Jump to content
    

Работа CAN контроллера

Добрый день всем! Разбираюсь сейчас с готовым CAN контроллером. Перечитав доки и посмотрев пару лекций на ютубе, остались непонятыми пару моментов. В контроллере есть bit monitoring, что сравнивает бит который отправили с тем что на шине и четкого обьяснения его работы я не нашел (или был невнимателен или не понял). Я предполагал, что условно передатчик отдает на шину фрейм, а приемник его повторяет и идет тем самым проверка о единообразии битов, но теория совсем не бьется с тем как происходит арбитраж на шине и тем, что если устройств будет больше 2х. Если кто может навести на нужные статьи или обьяснить принцип работы bit monitoring (указав, что он берет и с чем сравнивает) я был бы весьма признателен. Также очень приветствую дополнительные доки и спеки по этому вопросу, у самого тоже уже небольшая заначка есть.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

2 минуты назад, novikovfb сказал:

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

Ну я вроде так и думал, но у меня передатчик на первых же битах ( начиная с SOF ) выдает Bit Error, начинает увеличиватся счетчик ошибок TEC, и он переходит в состояние Active Error. Т.е. как я понял у меня срабатывает bit monitoring в самом передатчике

Share this post


Link to post
Share on other sites

43 минуты назад, Naixrim сказал:

Ну я вроде так и думал, но у меня передатчик на первых же битах ( начиная с SOF ) выдает Bit Error, начинает увеличиватся счетчик ошибок TEC, и он переходит в состояние Active Error. Т.е. как я понял у меня срабатывает bit monitoring в самом передатчике

Приемник у вас свой сигнал принимает ?

Share this post


Link to post
Share on other sites

2 минуты назад, _3m сказал:

Приемник у вас свой сигнал принимает ?

Приемник принимает сигнал от передатчика. Два одинаковых контроллера в общей шине. Настроены на нормальный режим. Один передает и один принимает.

Share this post


Link to post
Share on other sites

59 minutes ago, Naixrim said:

Ну я вроде так и думал, но у меня передатчик на первых же битах ( начиная с SOF ) выдает Bit Error, начинает увеличиватся счетчик ошибок TEC, и он переходит в состояние Active Error. Т.е. как я понял у меня срабатывает bit monitoring в самом передатчике

сравните осциллографом сигнал на входе передатчика и выходе приемника. Должны быть одинаковые с небольшой задержкой

Share this post


Link to post
Share on other sites

2 минуты назад, novikovfb сказал:

сравните осциллографом сигнал на входе передатчика и выходе приемника. Должны быть одинаковые с небольшой задержкой

Они одинаковые но с очень большой задержкой. Может быть 7-8 тактов. Я правильно вас понял, что приемник должен передатчику отдать его же сигнал?

 

Share this post


Link to post
Share on other sites

1 minute ago, Naixrim said:

Я правильно вас понял, что приемник должен передатчику отдать его же сигнал?

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

Share this post


Link to post
Share on other sites

16 минут назад, novikovfb сказал:

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

Я прошу прощения, до меня долго доходит и я попрошу пару уточнений. Чтобы было понятнее что я имею в виду я прислал картинку. Так вот, передатчик сидит на общей линии через трансивер и TXD линией и RXD линией. Тоже самое и с приемником. Передатчик выдает фрейм данных и как я думаю, он же проверяет свой же сигнал который идет по пути Трансивер -> RXD ? Т.е. участия приемника ( т.е. отдельного устройства или контроллера) здесь не нужно чтобы передатчик сам себя проверил?

1.jpg

Share this post


Link to post
Share on other sites

20 минут назад, Naixrim сказал:

Передатчик выдает фрейм данных и как я думаю, он же проверяет свой же сигнал который идет по пути Трансивер -> RXD ?

Проверяет не фрейм, проверяет каждый выставленный на шину рецессивный бит. Как только обнаружено несовпадение передаваемого бита с принятым обратно с шины состоянием - генерится состояние коллизии и потери арбитража. Либо генерится состояние ошибки (смотря в какой части кадра произошла эта коллизия). И передатчик отменяет дальнейшую передачу бит кадра. До следующего кадра.

 

Почитайте хоть что-нибудь по теории работы шины CAN. Да хотя бы вики. Ведь инфы в инете вагон.

Share this post


Link to post
Share on other sites

2 часа назад, jcxz сказал:

Проверяет не фрейм, проверяет каждый выставленный на шину рецессивный бит. Как только обнаружено несовпадение передаваемого бита с принятым обратно с шины состоянием - генерится состояние коллизии и потери арбитража. Либо генерится состояние ошибки (смотря в какой части кадра произошла эта коллизия). И передатчик отменяет дальнейшую передачу бит кадра. До следующего кадра.

 

Почитайте хоть что-нибудь по теории работы шины CAN. Да хотя бы вики. Ведь инфы в инете вагон.

Как раз насчет почитать по теории работы. Нигде не сказано следующий момент, ни в спеке Боша, ни в спеках кого либо еще. Чей рецессивный бит сверяется? Собственно об этом и есть мой вопрос. ПЕРЕДАТЧИК проверяет сам себя. Т.е. выставляет бит на шину, через трансивер считывает свой же бит и его проверяет или он ждет такого же ответа от ПРИЕМНИКА, который ему зеркалит принятые биты и отправляет обратно передатчику? Прикладываю скрин спецификации, где сказано о том, что передатчик мониторит, но каким образом и от кого (себя или эхо от приемника), не сказано!

2.png

Share this post


Link to post
Share on other sites

Naixrim, bit monitoring работает почти на всех битах кадра, кроме битов поля арбитража. А всякие эхо-моды, сайлент-моды и т.д. это локальные свистоперделки от вендоров CAN-контроллеров, делаются с целью реализации программистом какого-никакого самоконтроля. Вы, введя свои термины "передатчик" и "приемник", несколько запутали коллег, я думаю:wink: Нет на шине никаких передатчиков и приемников. На шине висят равнозначные абоненты. Любой абонент в любой момент времени может попытаться отправить фрейм. Когда шина свободна (контроллер абонента увидел >= 11 рецессивных бит на шине подряд) - осуществляется попытка передачи. Когда фрейм передается (он передается побитно), каждый выставляемый на TXD (а, следовательно, и на саму CAN-шину) бит контролируется CAN-контроллером по RXD. А дальше срабатывает обычная логика - если биты совпадают, то все ок, если нет, то: 1) если это поле арбитража - bit error не выставляется, фреймы ошибок не отправляются, кадры не разрушаются, счетчики ошибок стоят на месте, просто "проигравший" по приоритету ID-сообщения абонент перестанет передавать свои биты и будет лишь дальше слушать линию; 2) если это нифига не поле арбитража, а, например, поле данных - то ахтунг зе бите эррор.

Share this post


Link to post
Share on other sites

Я наверное должен пояснить некоторый момент. Я задал здесь вопрос так как после полученной информации я все еще считал, что она не однозначная. И скорее это нужно для подтверждения выводов сделанных на ее основе. Как мне кажется я нашел здесь ответ на свой вопрос.

12 минут назад, Arlleex сказал:

Naixrim, bit monitoring работает почти на всех битах кадра, кроме битов поля арбитража. А всякие эхо-моды, сайлент-моды и т.д. это локальные свистоперделки от вендоров, делаются с целью реализации программистом, какого-никакого самоконтроля. Вы, введя свои термины "передатчик" и "приемник", несколько запутали коллег, я думаю:wink: Нет на шине никаких передатчиков и приемников. На шине висят равнозначные абоненты. Любой абонент в любой момент времени может попытаться отправить фрейм. Когда шина свободна (контроллер абонента увидел >= 11 рецессивных бит на шине подряд) - осуществляется попытка передачи. Когда фрейм передается (он передается побитно), каждый выставляемый на TXD (а, следовательно, и на саму CAN-шину) бит контролируется CAN-контроллером по RXD. А дальше срабатывает обычная логика - если биты совпадают, то все ок, если нет, то: 1) если это поле арбитража - bit error не выставляется, фреймы ошибок не отправляются, кадры не разрушаются, счетчики ошибок стоят на месте, просто "проигравший" по приоритету ID-сообщения абонент перестанет передавать свои биты и будет лишь дальше слушать линию; 2) если это нифига не поле арбитража, а, например, поле данных - то ахтунг зе бите эррор.

Да, именно этого ответа я ждал и шел больше недели! Огромное вам спасибо! Да, согласен, что со своей формулировкой я ввел всех в заблуждение, потому прошу прощения. Моя проблема возникла из-за того, что знакомство с этим я начал с получения на руки только контроллера без физики.

Share this post


Link to post
Share on other sites

12 hours ago, Arlleex said:

Нет на шине никаких передатчиков и приемников.

я под передатчиком подразумевал вход TxD выходы CAN_H, CAN_L у CAN_Tranciever (см. схему выше), под приемником - выход RxD у него же.

Share this post


Link to post
Share on other sites

42 минуты назад, novikovfb сказал:

я под передатчиком подразумевал вход TxD, ... под приемником - выход RxD у него же.

Что не билось с расставленными ролями "передатчик" и "приемник" у ТС.

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...