По поводу CAN-шины

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

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

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

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


person MAYURESH MANJREKAR    schedule 15.03.2012    source источник
comment
electronics.stackexchange.com - хорошее место. Там довольно много людей с опытом PIC и CAN.   -  person kenny    schedule 15.03.2012


Ответы (3)


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

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

person Philipp T.    schedule 15.03.2012
comment
Мое устройство ничего не передает. Он просто потребляет данные, вот и все. Также прошивка другого узла не находится под моим контролем. Скажем, я не смогу изменить время начала передачи с 40 мс на 100 мс. Кстати, сегодня я проверил с помощью осциллографа и обнаружил, что если другой узел начинает передачу через 170 мс, тогда все работает нормально. Но если он передается до этого, я не получаю никаких сообщений на своем устройстве. - person MAYURESH MANJREKAR; 15.03.2012
comment
@Philipp Я не могу поверить, что CAN-Analyzer будет выдавать ACK, он всегда должен быть в режиме только прослушивания - person jeb; 16.03.2012
comment
@jeb - инструменты анализа CAN выдают ACK, если вы не настроили их так, чтобы - person Martin Thompson; 16.03.2012
comment
@Martin: Спасибо, что разъяснили это - person jeb; 16.03.2012

Также мне кажется, что нет ACK.

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

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

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

person Martin Thompson    schedule 16.03.2012

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

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

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

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

person Swanand    schedule 25.10.2016