Jump to content
    

Абсолютно одинаковое CAN сообщение

Вопрос заключается в следующем: будут ли ошибки, если на шину будет передаваться одинаковое сообщение с разных узлов одновременно? То есть если с N устройств передается одинаковое сообщение, то оно пройдет как одно?

Share this post


Link to post
Share on other sites

Если точно одновременно, то, конечно, никаких ошибок не будет. Но если будут передавать все, то ACK никто не пошлёт.

 

А от чего у вас такие странные вопросы возникают?

Share this post


Link to post
Share on other sites

Как раз все наоборот.

Под "одинаковым" понимается одинаковый ID и, возможно, разные данные?

 

Тогда при одновременной передаче арбитраж никто не выигрывает, а ошибка будет, т.к. данные разные (даже если и одинаковые, биты могут "разъехаться" по времени к концу телеграммы).

 

А вот если верхним протоколом выдача телеграмм с одинаковым ID но с разных узлов четко разнесена по времени - проблем никаких.

Share this post


Link to post
Share on other sites

Одинаковый ID и данные. Спасибо. Скоро проверю в железе, просто интересно.

Share this post


Link to post
Share on other sites

даже если и одинаковые, биты могут "разъехаться" по времени к концу телеграммы

Если кварцы одинаковые, то не разъёдутся - всего около 100 бит то, всё сообщение.

Share this post


Link to post
Share on other sites

Вопрос заключается в следующем: будут ли ошибки, если на шину будет передаваться одинаковое сообщение с разных узлов одновременно? То есть если с N устройств передается одинаковое сообщение, то оно пройдет как одно?

 

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

Данная ситуация (много слейвов одновременно одинаковое передают) заложена например в CANopen LSS протокол- там такие одинаковые ответы обязательно будут. И ничего, работает :)

Share this post


Link to post
Share on other sites

Так ведь неразрушающий арбитраж не распространяется на поле данных.

Share this post


Link to post
Share on other sites

Так ведь неразрушающий арбитраж не распространяется на поле данных.

 

Ух ты, а я действительно не заметил. Надо будет еще раз более вдумчиво спецификацию почитать, я пробежав по диагонали понял что этот арбитраж работает в течении передачи всего CAN пакета :(

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

 

Share this post


Link to post
Share on other sites

Вот как это сформулировано в спецификациях Боша и CiA : "The ARBITRATION FIELD consists of the IDENTIFIER and the RTR-BIT"

"the bus access conflict is resolved by bitwise arbitration using the IDENTIFIER. ... If a DATA FRAME and a REMOTE FRAME with the same IDENTIFIER are initiated at the same time, the DATA FRAME prevails over the REMOTE FRAME. "

 

 

Share this post


Link to post
Share on other sites

If a DATA FRAME and a REMOTE FRAME with the same IDENTIFIER are initiated at the same time, the DATA FRAME prevails over the REMOTE FRAME. "

Так оно и понятно, чего данные просить если они вот уже полезли...

Share this post


Link to post
Share on other sites

На неделе буду проводить эксперимент, выводить сообщения на дисплей Opel Astra теми же ID что и штатная магнитола, только чаще, заодно и проверим, будут ли коллизии с магнитолой. Только в моем случае поля данных будут отличными от даннх магнитолы.

Share this post


Link to post
Share on other sites

На неделе буду проводить эксперимент, выводить сообщения на дисплей Opel Astra теми же ID что и штатная магнитола, только чаще, заодно и проверим, будут ли коллизии с магнитолой.

А как узнаете что коллизия произошла? я так понимаю некорректное сообщение (плохая CRC) будет похоронено аппаратным кэн-контроллером без участия программиста.

Share this post


Link to post
Share on other sites

А как узнаете что коллизия произошла? я так понимаю некорректное сообщение (плохая CRC) будет похоронено аппаратным кэн-контроллером без участия программиста.

Подключаюсь фирменным адаптером от IXXAT

Share this post


Link to post
Share on other sites

Вопрос заключается в следующем: будут ли ошибки, если на шину будет передаваться одинаковое сообщение с разных узлов одновременно? То есть если с N устройств передается одинаковое сообщение, то оно пройдет как одно?

Если несколько узлов попытаются отправить совершенно одинаковые пакеты, то произойдет следующее: в фазе арбитража (биты идентификатора+RTR) никто не выиграет арбитраж, передача пакета прекратится всеми узлами и они отпустят шину. До передачи байтов данных и CRC дело не дойдет. Эти попытки могут повторяться бесконечно. Потому нельзя допускать наличие узлов с одинаковыми идентификаторами на шине.

Share this post


Link to post
Share on other sites

... в фазе арбитража (биты идентификатора+RTR) никто не выиграет арбитраж, передача пакета прекратится всеми узлами и они отпустят шину ...

Это на каком основании?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...