voicek 0 Posted May 6, 2015 · Report post Проектирую автомозг на STM32. Пытаюсь настроить общение с адаптером OBD2 ELM327 USB по кан шине. В режиме loopback с отрванным драйвером MCP2551, посылка отправляется и приходит. Подключаю драйвер. Режим normal, sjw=1, ts1=3, ts2=4, bpr=18, если частота APB1 - 36МГц, то скорость получается 250 Kbaud. Пытаюсь отправлять из терминала в ELM данные. Модуль кан генерит прерывание по ошибкам (я его включил), и в регистре ESR в поле LEC выставляется значение 0х01. По даташиту это - Stuff Error. 000: No Error 001: Stuff Error 010: Form Error 011: Acknowledgment Error 100: Bit recessive Error 101: Bit dominant Error 110: CRC Error 111: Set by software Что обозначает Stuff Error? Может кто ковырял подобную связку, поможите... Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
lead_seller 0 Posted May 6, 2015 · Report post Stuff error - это ошибка стаффинга. Возникает она в случае, если передающее устройство передает больше чем 5 одинаковых бит. В стандарте CAN заложено прореживание последовательностей из 5 одинаковых бит, противоположными битами. Например, если вы передаете 0xFF ну или 0b1111 1111, то в шину будет передано 0b111110111. Соответственно, либо к Вам приходит сообщение, которое нарушает этот стандарт (а это может происходить из-за разницы в скоростях приемник-передатчик), либо Ваша шина находится в доминантном состоянии, что расценивается как непрерывная передача бита "1". Посмотрите, что происходит на шине, при включении Вашего приемника. И посмотрите, что происходит на ногах CAN_RX и CAN_TX драйвера. Попробуйте поотправлять сообщения при подключенном драйвере, но отключенной шине. При включении любого CAN-приемника в сеть, Вы должны увидеть прямоугольный импульс - это проходит тестирование шины. Так же, при начале передачи каждого пакета вы увидите переход из рецессии в доминанту - это занятие линии. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
voicek 0 Posted May 9, 2015 · Report post Заработало. Банально ошибся. Драйвера пишу свои, и в функции настройки скорости передачи, регистрам sjw, ts1, ts2, bpr задавал значения из аргументов, т.е. 1,2,3,4.. А считаем то с нуля, т.е. 1 в аргументе - 0 в регистре... :) Поправил и все взлетело... :) Спасибо комраду lead_seller, за то что откликнулся... Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...