Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AM3517: странности с шиной CAN на 10k
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
griabig
Добрый день,

имеется плата на базе TI AM3517. Обнаружилась весьма странная проблема с работой шины CAN на скорости 10k. На всех остальных стандартных скоростях (20k - 1M) никаких проблем нет.

Проблема заключается в следующем: похоже, что некорректно работает bit-stuffing (вставки дополнительного бита противоположного значения для автосинхронизации потока) при передаче более четырех нулей подряд. Вставляемый единичный бит имеет недостаточную длительность и в результате чего вся посылка прерывается по ошибке на линии. При передаче более четырех единиц, когда тоже необходим bit-stuffing ) таких проблем нет.

Все осциллограммы сняты для скорости 10k и отличаются лишь передаваемыми данными
1) Передаем пакет, в котором нет длительных посылок из одинаковых бит и поэтому нет необходимости в дополнительных битах синхронизации. Пакет успешно принимается.

Нажмите для просмотра прикрепленного файла


2) Передаем пакет, в котором передается пять единиц, и вставляется дополнительный нулевой бит синхронизации. Длительность пяти единиц корректная - 500 мкс. В этом случае пакет также передается успешно.

Код
$ cansend can0 -i 0x23F -v 0xA5 0xA5 0x55 0x55


Нажмите для просмотра прикрепленного файла

3) Передаем пакет, в котором передается пять нулей, и вставляется дополнительный единичный бит синхронизации. Длительность пяти нулей в этом случае почему-то получается некорректной (460 мкс вместо 500 мкс). В этом случае передача сразу прерывается, после этого осуществляется повторная передача, которая также обрывается.

Код
$ cansend can0 -i 0x2A0 -v 0xA5 0xA5 0x55 0x55


Нажмите для просмотра прикрепленного файла

4) Избежать обрыва передачи можно, если сместить sample point ближе к началу импульса с 0.85 to 0.6. Тогда весь пакет отправляется. Однако пять нулевых битов все равно имеют неправильную длительность 460 мкс, и поэтому этот битый пакет не принимается другой стороной.

Нажмите для просмотра прикрепленного файла

.
_3m
Позиции следующих битов при сбое съезжают или остаются на месте ?
Еще: вы где смотрите - непосредственно на шине кан или на входе трансивера ?
Я скорость ниже 50к не применяю так как большая часть приемопередатчиков имеет фичу "dominant time-out". А 82c250 не совместим с низковольтной логикой.
griabig
Цитата(_3m @ May 31 2013, 11:33) *
Позиции следующих битов при сбое съезжают или остаются на месте ?
Еще: вы где смотрите - непосредственно на шине кан или на входе трансивера ?
Я скорость ниже 50к не применяю так как большая часть приемопередатчиков имеет фичу "dominant time-out". А 82c250 не совместим с низковольтной логикой.

Выход смотел непосредственно на шине между CAN-High и CAN-Low. Позиции следующих битов не съезжают. Действительно, похоже, что проблема именно из-за dominant time-out приемо-передатчика. Огромное спасибо.
А есть какие-нибудь передачики с несколько большим интервалом diminant time-out, подходящие для применения с низковольтной логикой?

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.