Перейти к содержанию
    

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

59 minutes ago, Naixrim said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, Naixrim said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

1.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

2.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 hours ago, Arlleex said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...