Всем привет, столкнулся с проблемой при работе с шиной CAN. По непонятной мне причине возникают кривые пакеты у которых в EOF доминантные биты (нули), должны быть всегда рецессивные (единицы). Кто нибудь может пояснить при каких обстоятельствах такое может происходить?
Комментарии: 19
Dmytro
А что за девайс/девайсы?
Anton
Девайсов там 3 + усбкан в компьютер... девайсы на stm32.
Shtolcman
А откидывать по одному и смотреть, что получится не выйдет? Хотя у тебя ж Id каждого девайса должны быть
Dmytro
Чет я немного не догоняю эту картинку. DLC должен же быть 4 бита, почему в идентификаторе по факту распознано не то что там передано? https://en.wikipedia.org/wiki/CAN_bus#Base_frame_format
Shtolcman
А параметры сниффера правильно установлены?
Dmytro
Покажите захват этим же сниффером, но когда все передается "правильно"
Anton
Да все правильно, насколько я помню CAN вставляет 0 если перед ним идет много 1 и наоборот, вставляет 1 если перед ним много нулей. Эти биты не влияют на передаваемые данные.
Dmytro
Точно после 5 одинаковых бит должен быть один обратный
Anton
Когда все правильно :)
Shtolcman
Так он же вроде аппаратно отбрасывается
Dmytro
Собственно, проблема начинается еще с ACK delimeter бита - Он должен быть всегда рецесивным (1) Да, он даже другим цветом помечен)
Anton
Верно
Dmytro
а лог. анализатор пассивный, он ничего не передает? ACK бит там, к примеру
Anton
Пассивный Но на всякий случай попробовал отключить, проблему это не решило, судя по реакции программы, которая работает на компе...
Dmytro
Из общих рекомендаций могу только предложить попробовать снизить скорость и убедиться что терминаторы есть)
Anton
Терминаторы точно есть, это первое что я проверил. Скорость сейчас мегабит да, но расстояния, все лежит на столе, максимум несколько десятков сантиметров. А по стандарту мегабитный кан должен работать до 40 метров.
Dmytro
А, так в STM же ошибка должна вроде аппаратно распознаться, не? На что она там жалуется?
Igor
посмотрите осцилографом форму сигналов. Может помеха большая или линия не согласована.
Anton
Это что - то с самой платой, она почему - то "не дружит" с усбкан преобразователем. При этом если я запускаю обмен между самими модулями не используя усбкан, то все работает. Так же помогла замена девайса на такое же точно. Насколько я понял, усбкан некорректно принимает пакет с конкретно этой платы и выставляет error frame на шине.