Можно ли сгенерировать ошибку шины CAN с помощью STM32? - PullRequest
3 голосов
/ 02 апреля 2019

Для одного из моих проектов я хотел бы генерировать некоторые ошибки шины CAN (например, вставка битов или ошибка CRC).

Это всего лишь маленькая идея, которая у меня была, но вы думаете, что это возможно осуществить? Я знаю, что все компоненты протокола обрабатываются драйвером CAN, но я также не являюсь экспертом в области обмена данными по CAN, поэтому, возможно, у меня есть небольшая надежда, что эта генерация ошибок может быть достижима. Что ты думаешь?

Я использую микроконтроллер STM32 и CAN-трансивер TJA.

1 Ответ

6 голосов
/ 02 апреля 2019

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

Один простой способ генерировать множество ошибок - это иметь только один узел на шине или короткое замыкание CAN High / Low. Если вы сделаете это, вы быстро перейдете к активной ошибке, а затем к пассивной ошибке.

Более тонкий путь - перевести линии Tx / Rx между MCU и трансивером на неправильный уровень. Если вы подключите один из них к внешнему выводу GPIO, а затем выберете импульс непосредственно после сохранения сообщения в буфере CAN, это вызовет ошибки. Особенно если длиннее 6 битов = ошибка материала. Скорее всего, они будут хорошо синхронизированы с протоколом, так что это, вероятно, то, что вы хотите. Возможно, вам придется добавить 10k последовательно к фактическим выводам tx / rx, чтобы они стали слабее, чем GPIO.

Другой метод состоит в том, чтобы 2 узла одновременно отправляли идентичные арбитражные поля (ID, RTR + разное), но разные данные. Это достижимо только с помощью программного обеспечения, но это означает, что вам нужно, чтобы 2 тупых узла ничего не делали, а отправляли одни и те же сообщения снова и снова при 100% загрузке шины.

...