Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ошибки при предачи данных по CAN
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Controller Area Network (CAN)
Женек_84
Друзья, помогите разобраться с передачей данных между двумя CAN-контроллерами MCP2510, которые соединены по двум коротким
линиям между собой CANH и CANL.
У меня один работает как передатчик, другой как приемник через CAN шину, CAN-трансивер - PCA82C250 в высокоскоростном режиме.
Перевожу и передатчик и приемник в нормальный режим работы, разрешаю все возможные прерывания и отключаю все маски и фильтры
для передатчика и приемника, для передатчика записываю станд. идентификаторы в передающий буфер 0, длину данных ставлю восьми байтам и записываю эти 8 байт. Выставляю самый высокий приоритет для перед. буфера 0 и говорю, что буфер готов к передаче (записываю TXREQ=1). Вижу прерывание на контакте INT и передатчика и приемника, т.е. у обоих контроллеров, что сообщения как бы переданы одним и приняты другим контроллером.
Но когда читаю регистр контроля передающего буфера 0 передатчика (TXB0CTRL), то возникают ошибки при передаче сообщения,
бит передачи не очищается и устанавливаются биты ошибок потери арбитража и ошибка шины.
Не пойму в чем дело. Самая простенькая программа и не работает. Может кто сталкивался с этим?
Может нужно сконфигурировать регистры тайминга для CAN шины - CNF1,2,3?
И третий провод для CAN-шины общий необходим?
Может кто-нибудь прогу скинет или даст ссылку по обмену данными между двумя контроллерами по CAN шине...
cant
резисторы на конце линии стоят? третий провод - земля и должен быть, если питание разное.
Женек_84
Поставил терминальные резисторы на 120 (Ом) на приемнике и передатчике между CANH и CANL, сконфигурировал регистры тайминга для CAN - CNF1, CNF2, CNF3 и все вроде заработало. Данные приемника совпадают с данными передатчика.
Но не всегда работает, иногда при чтении данные не совпадают, причем где угодно могут не совпадать, то есть либо сами данные, либо идентификаторы. Какая-то нестабильность в работе.
Третьего провода (земли) для CAN нет. Может в нем дело? Или регистры какие-нибудь еще сконфигить?
А может это из-за неправильной конфигурации регистров тайминга? Может ли такое быть?

cant
ознакомтесь с этим материалом, его достаточно для простой настройки интерфейса

http://www.gaw.ru/html.cgi/txt/interface/can/start.htm
http://www.microchip.ru/files/d-sheets-rus/an713.pdf
http://piclist.ru/can.html
Женек_84
cant, спасибо за ответы.
Я все прочитал конечно и в принципе знал, но проблема все равно остается.
То работает, то нет.
Объединил земли (третий провод) между передатчиком и приемником, ситуация не изменилась. Нестабильность в работе остается.
Буду думать дальше.
Даже вот ща попробовал и не пойму нифига, в одном случае, если у меня первый контроллер - передатчик, а второй - приемник, то все проходит - полученные данные такие же как и переданные, а если наоборот ,то есть, когда второй контроллер становится передатчиком , то затыкается на чтении стандартного идентификатора у приемника, вместо записанных AAh и 00h читает AAh и 02h.
Женек_84
Заметил, что здесь дело даже не в CAN шине.
Сделал после записи сразу считывание данных из передатчика и увидел, что иногда неправильно считывает или записывает получается в сам MCP2510. Например, записал идентификатор AAh в контроллер и сразу считал его, иногда проходит, а иногда нет, может например считать 6Ah.
Не пойму в чем дело... Получается в самом SPI интерфейсе?
Женек_84
А ща вообще в тупик зашел. Пишу в регистр по адресу 0Fh в MCP2510 любые данные, вижу правильные временные диаграммы SPI при записи, но читает каждый раз по разному- иногда првильно, иногда нет и также прям на линиях SPI смотрю, тож нормальные диаграммы чтения, а данные не те бывают.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.