Полная версия этой страницы:
MCP2515
Суть проблемы. Конфигурирую оба принимающих буфера на прием любых сообщений при выключенных масках и фильтрах (RXM1 = 1,RXM0 = 1). Регистры маскок и фильров равны 0.
По СAN интерфейсу посылаю 1 посылку(c другого устройства) с идентификатором 0x3001 и 1 байтом данных, равным 0xFE;
MCP2515 выдает, что приняла посылку 0x3001 и 1 байт данных 0xFE. И тут же сигналит, о принятии еще одной посылки: идентификатор 0x0000 и 4 байта данных 0xFE 0x00 0x00 0x00. Откуда она берет
вторую посылку? Объясните...
Разобрался. Тема закрыта.
Прошу прощения, но ляп был в том, что я только начал осваивать CAN.
Проблема заключалась в следующем. В сеть CAN было включено 2 устройства, один на AT90CAN128, второе на mcp2515. Для AVR использовал библиотеку 2003 года от Atmel(если не ошибаюсь из примера загрузчика). Так вот, с AVR посылал 1 пакет. MCP2515 принимал этот пакет и еще выдавал, что принял второй пакет. Осциллографом просмотрел CAN шину, действительно, после отправления "правильного" пакета на шине еще были посылки. Интуитивно понятно, что что-то не так.
Не стал копаться в библиотеке, а взял библиотеку от Atmel 2007 года и все заработало.
Сколько посылок послал, столько mcp2515 и принял - не больше, но и не меньше.
KARLSON
Apr 28 2011, 08:06
Здравствуйте. Что бы тем не плодить, напишу здесь. Я думаю в тему будет.
Так вот. Пытаюсь справиться с принятием сообщений.
Непонятно, каким то образом, регистр RXB0CTRL изменяет свои биты, конкретно биты RXM1 и BUKT.
В программе он конфигурируется только один раз в режиме конфигурации и принимает только значение RXM1 = 1 (принятие расширенных сообщений, ), BUK = 0 (Запись сообщения из RXB0 в RXB1 запрещена).
Работает система так: устройство на шине посылает 8 сообщений с идентификатором 00 FF10 00.
Моё устройство (которое не так работает) имеет 8 раз дёргает ногу RX0BF (которая настроена на опускание при принятии правильного сообщения в RXB0). Читаю RXB0 и RXB1 и смотрю: Данные с адресом лежат в RXB1. Регистр RXB0CTRL = 0.
И вот как он это делает ума не приложу.
Посоветуйте, куда копать.
KARLSON
Apr 28 2011, 10:47
И есть ещё такое поведение:
Адрес сообщения 00 FF 10 00
Так вот, Если фильтр RX0 настроить на этот адрес, то не принимает, а если отличный любой другой ,то принимает сообщения.
Маска RXM0 FF FF FF FF
KARLSON
Apr 29 2011, 08:47
Всё. Исправил ситуацию. Ошибка в монтаже приёмника. RX0BF и RX1BF выводы были перепутаны местами.
И другим примечание.
Если требуется принимать сообщения только с одним идентификатором, настраиваете фильтр 0 (RXF0) и маску 0 (RXM0) на нужный идентификатор, а фильтр1 (RXF1) и маску 1 (RXM1) на FF FF FF FF, что бы буфер RXB1 не работал. Если RXB1 не настроить, то он всё подряд будет принимать. Зачем лишние действия контроллеру)).
KARLSON
May 26 2011, 12:00
Что-то я с ним никак не подружусь. Через некоторое время работы сам переходит в конфигурационный режим. Как это вообще возможно?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.