seeeduino can-bus shield v2: не может читать can-шину и писать на SD-карту

Я использую seeeduino V4.0 и CAN-BUS shield v2.0 с SD-картой промышленного класса.

Я использую библиотеку по умолчанию, предоставленную вики seeed.

Я смоделировал can - шину с двумя mcp2515. Я могу прочитать его без проблем, и все в порядке.

Я могу писать/читать на SD-карте с помощью примера, приведенного в библиотеке SD.

Но когда я использую этот пример, шина can и SD-карта запускаются без ошибок. Шина can нормально считывает и отображает данные шины can. Но когда я читаю SD-карту, файл создается, но полностью пуст. Я попытался изменить запись на .txt вместо .csv, и когда я пытаюсь

myFile = SD.open("test.txt", FILE_WRITE);
if (myFile)
{
  ...
}
else
{
  Serial.println("error: file not reachable");
}

"myFile" возвращает false.

ps: Я не задаю здесь много вопросов. Извините за плохую формулировку моего вопроса.

, 👍2

Обсуждение

У меня нет никаких хороших идей, так что вот одна плохая идея: напечатать что-то, показывающее, что оно попало в `myFile.close(); У вас может не быть никаких записей, пока вы не закроете (), не очистите() или не заполните сектор. Учитывая то, что вы показали, и то, что я читал о щите и т. Д., Похоже, что это не должно быть проблемой. Какой Arduino вы используете? Вы не изменили выбор CS на плате, верно?, @timemage

У меня такая же "плохая идея", но даже с close() (и без if(myFile)) SD-карта ничего не записывает. Если я обрабатываю запись перед использованием MCP2515, она работает нормально. Это похоже на проблему с интернет-провайдером, чтобы определить подчиненного, с которым нужно поговорить. Моя плата - seeeduino V4.0, @Thanatheos

Это более или менее то, что я думаю, но я не нашел ничего подтверждающего это, когда просматривал код двух библиотек. В какой-то момент я могу попробовать настроить UNO с SD-картой и каким-нибудь устройством SPI в качестве дублера для вашего MCP2515 (у меня его нет). Хотя к тому времени кто-то другой, возможно, уже ответил., @timemage

Я покопался еще немного, но не нашел ничего ясного. В их примере flagRecv должен быть volatile квалифицирован как "volatile unsigned char flagRecv = 0;" Но у меня мало уверенности в том, что это на самом деле проблема. Я как бы ожидаю, что как ошибка она будет проявляться по-другому, если вообще будет проявляться в этом использовании. Но это должно быть исправлено в любом случае. Если это действительно решит проблему, дайте мне знать, и я буду придерживаться этого в качестве ответа., @timemage

Спасибо вам за вашу помощь. Летучие вещества не помогают. Все та же проблема. Я попытался заставить SPI использовать ведомый 4 (SD), а не 9 (CANbus). digitalWrite (4, НИЗКИЙ); digitalWrite (9, ВЫСОКИЙ); if (!SD.begin(4)) { ошибка печати } успех печати myFile = SD.open("can.txt ", FILE_WRITE); и сразу после этого поставьте ss 9 на низкий уровень. Это показывает успех Он читался как обычно, но по-прежнему ничего не значил на SD-карте. Похоже, что spi насыщен mcp2515. Если я удалю SD-карту, я получу ошибку., @Thanatheos


1 ответ


Лучший ответ:

3

Несмотря на то, что "пример библиотеки должен быть правильным, это работа для других людей до вас", я не уверен, что многие люди заставляют это работать.

Я видел, что даже когда mcp2551 ничего не получает на can-шине, шина SPI насыщается mcp2551.

Решение состояло в том, чтобы использовать простейшую библиотеку make for 8MHz cristal chip. Измените его на работу со стандартным 16 МГц и используйте в качестве прерывания вывод прерывания (вывод 2 на плате).

Если у кого-то возникла такая же проблема, просто оставьте комментарий здесь, и я дам лучший и более полный ответ.

Большое вам спасибо @Timemage за вашу помощь

,