Jump to content

    

Работа stm32f103 с ELM327 (не удается установить связь)

Recommended Posts

voicek

Проектирую автомозг на 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? Может кто ковырял подобную связку, поможите...

Share this post


Link to post
Share on other sites

lead_seller

Stuff error - это ошибка стаффинга.

Возникает она в случае, если передающее устройство передает больше чем 5 одинаковых бит. В стандарте CAN заложено прореживание последовательностей из 5 одинаковых бит, противоположными битами. Например, если вы передаете 0xFF ну или 0b1111 1111, то в шину будет передано 0b111110111.

Соответственно, либо к Вам приходит сообщение, которое нарушает этот стандарт (а это может происходить из-за разницы в скоростях приемник-передатчик), либо Ваша шина находится в доминантном состоянии, что расценивается как непрерывная передача бита "1". Посмотрите, что происходит на шине, при включении Вашего приемника. И посмотрите, что происходит на ногах CAN_RX и CAN_TX драйвера.

Попробуйте поотправлять сообщения при подключенном драйвере, но отключенной шине.

 

При включении любого CAN-приемника в сеть, Вы должны увидеть прямоугольный импульс - это проходит тестирование шины.

Так же, при начале передачи каждого пакета вы увидите переход из рецессии в доминанту - это занятие линии.

Share this post


Link to post
Share on other sites

voicek

Заработало. Банально ошибся. Драйвера пишу свои, и в функции настройки скорости передачи, регистрам sjw, ts1, ts2, bpr задавал значения из аргументов, т.е. 1,2,3,4.. А считаем то с нуля, т.е. 1 в аргументе - 0 в регистре... :) Поправил и все взлетело... :) Спасибо комраду lead_seller, за то что откликнулся...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.