Что касается шины CAN - PullRequest
2 голосов
/ 15 марта 2012

Я использую 16-битный MCU PIC24HJ64GP504 для написания приложения на основе CAN.По сути, это связь между моей платой и другим узлом, которая постоянно отправляет данные на мою плату с использованием CAN со скоростью 1 Мбит / с.Я настраиваю модуль ECAN в моем PIC24 для работы на скорости 1 Мбит / с.Я написал код таким образом, что в течение первых 10 мс модуль ECAN будет принимать все сообщения, поступающие с другой стороны, и после этого я перенастроил модуль ECAN для приема только тех сообщений с идентификатором сообщения 0x13.

Теперь возникает проблема ... Другой узел и моя плата включаются одновременно.Другой узел начинает передавать сообщения примерно через 40 мс после включения питания.Но я не могу получить какое-либо сообщение об этом на моей доске.Теперь, если я сначала включу свою плату, дадим ей некоторое время, чтобы перенастроить модуль ECAN с новыми фильтрами и настроить, а затем включить другой узел, тогда все работает отлично.

Теперь самая странная часть ... Если между моей платой и другим узлом подключен анализатор шины CAN, и даже если я включаю оба узла одновременно, все работает нормально ... Нет необходимостичтобы включить мою доску первым.Я пробовал это с тремя различными анализаторами шин от разных производителей и получил те же результаты.

Мне кажется, что при переконфигурации модуля ECAN требуется некоторое время, чтобы успокоиться.А с введением в шину анализатора шины это время как-то сокращается, так что все работает отлично.Но я не уверен, что именно проблема может быть.

Ответы [ 3 ]

3 голосов
/ 15 марта 2012

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

Я бы откладывал отправку до тех пор, пока вся шина не будет инициализирована.

2 голосов
/ 16 марта 2012

Мне также кажется, что мне не хватает ACK.

Видите ли вы какие-либо кадры с ошибками (получите возможность для запуска 6 последовательных доминирующих битов) - узел Tx может отключиться от шины или даже перейти в какой-либо режим ошибки приложения, если он не был достаточно подтвержден. *

Возможно, вы сможете вернуть его обратно на шину, передав на него фиктивное сообщение.

Я нашел Saleae Logic очень полезным в этих обстоятельствах (а также в прицеле) - повесьте его на вывод Rx вашего физического уровня (или даже подключите отдельную PHY, которую вы можете использовать для мониторинга автобуса). Программное обеспечение Saleae интерпретирует CAN и покажет вам, что происходит. Иногда полезно использовать триггер области для запуска логики.

0 голосов
/ 25 октября 2016

CAN Связь требует как минимум двух активных устройств на шине для успешной связи.Это связано с тем, что кадр CAN не завершен, если кто-то не подтвердит его.

Когда вы включаете свою плату и другой узел, кажется, что ваша плата не готовится через 40 мсек.Если он не готов, он оставляет «Другой узел» единственным участником в шине и нарушает указанное выше правило.Другой узел получит ошибку Tx, и после 128 ошибок, этот другой узел перейдет в режим ошибки и прекратит отправку сообщений - следовательно, вы ничего не получаете.

Когда вы сначала включаете свою плату, дайте ей время -ваша плата готова и будет принимать каждое сообщение, отправленное другим узлом - следовательно, связь хорошая!

Когда вы добавляете CANalyzer, даже если ваша плата не включена, на шине есть два активных узла -Следовательно, общение хорошее!

...