Перейти к содержанию
    

Суть проблемы. Конфигурирую оба принимающих буфера на прием любых сообщений при выключенных масках и фильтрах (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 и принял - не больше, но и не меньше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте. Что бы тем не плодить, напишу здесь. Я думаю в тему будет.

 

Так вот. Пытаюсь справиться с принятием сообщений.

Непонятно, каким то образом, регистр RXB0CTRL изменяет свои биты, конкретно биты RXM1 и BUKT.

В программе он конфигурируется только один раз в режиме конфигурации и принимает только значение RXM1 = 1 (принятие расширенных сообщений, ), BUK = 0 (Запись сообщения из RXB0 в RXB1 запрещена).

 

Работает система так: устройство на шине посылает 8 сообщений с идентификатором 00 FF10 00.

Моё устройство (которое не так работает) имеет 8 раз дёргает ногу RX0BF (которая настроена на опускание при принятии правильного сообщения в RXB0). Читаю RXB0 и RXB1 и смотрю: Данные с адресом лежат в RXB1. Регистр RXB0CTRL = 0.

 

И вот как он это делает ума не приложу.

Посоветуйте, куда копать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И есть ещё такое поведение:

Адрес сообщения 00 FF 10 00

Так вот, Если фильтр RX0 настроить на этот адрес, то не принимает, а если отличный любой другой ,то принимает сообщения.

Маска RXM0 FF FF FF FF

Изменено пользователем KARLSON

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё. Исправил ситуацию. Ошибка в монтаже приёмника. RX0BF и RX1BF выводы были перепутаны местами.

И другим примечание.

Если требуется принимать сообщения только с одним идентификатором, настраиваете фильтр 0 (RXF0) и маску 0 (RXM0) на нужный идентификатор, а фильтр1 (RXF1) и маску 1 (RXM1) на FF FF FF FF, что бы буфер RXB1 не работал. Если RXB1 не настроить, то он всё подряд будет принимать. Зачем лишние действия контроллеру)).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то я с ним никак не подружусь. Через некоторое время работы сам переходит в конфигурационный режим. Как это вообще возможно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...