|
Общие ошибки у AT90CAN128 - когда они должны возникать?, А ведь все когда-то чайниками были! |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Jan 8 2008, 12:10
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(galjoen @ Jan 7 2008, 13:09)  6. Отрубил у принимающего устройства TXCAN (не передаёт в линию ACK) - начались вопросы: У принимающего устройства возникает ошибка "ACK error", хотя по описанию (да и логически) должна-бы возникнуть "Bit Error". Устройство-то передаёт в линию 0-й уровень (ACK), а в линии 1. Как раз, передатчик в ACK слоте передает recessive bit, и ждет ACK - dominant, а т.к. устройств больше нет то и появляется ошибка "ACK error" Цитата(galjoen @ Jan 7 2008, 13:09)  7. Запретил у принимающего устройства приём адреса генерируемого передатчиком. Судя по описанию в этом случае должна возникнуть общая ошибка - ACK error general (в линии имеется кадр с ресессивным уровнем в бите ACK). Реально у приёмника не возникает никаких ошибок. Пробовал запретить все MOb вообще, проверял разрешение всего, что относится к общим ошибкам - бесполезно. Фильтры не влияют на поле ACK, error... если контроллер принял фрейм выставляется подтверждение, ошибки.... А уже потом решает выкинуть его или положить в MOB (уже другой уровень). По ошибкам, полю ACK - можно узнать только состояние физического уровня.
|
|
|
|
|
Jan 9 2008, 14:23
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(KRS @ Jan 8 2008, 15:10)  Как раз, передатчик в ACK слоте передает recessive bit, и ждет ACK - dominant, а т.к. устройств больше нет то и появляется ошибка "ACK error" И я именно об этом: приёмник выставляет dominant в ACK слоте, но из-за оторванного провода TXCAN у приёмника этого не получается (ACK остаётся recessive). И у него (у приёмника) возникает ошибка "ACK error" и больше никаких ошибок. Хотя т.к. приёмник установил на шине dominant, потом проверил, а там recessiv, он вроде-бы должен установить ошибку "Bit error". А судя по описанию ( как я понял) у приёмника вообще не д.б. такой ошибки как "ACK error". То, что у передатчика возникает ошибка "ACK error" - это понятно. Цитата(KRS @ Jan 8 2008, 15:10)  Фильтры не влияют на поле ACK, error... если контроллер принял фрейм выставляется подтверждение, ошибки.... А уже потом решает выкинуть его или положить в MOB (уже другой уровень). По ошибкам, полю ACK - можно узнать только состояние физического уровня. Я понимаю так: 1. Контроллер принимает фрейм и проверяет проходит-ли он через фильтры. 2. Если проходит - кладёт его в MOb (MOb-ы), устанавливает в слоте ACK - dominant уровень, ошибки устанавливает в соответствующем MOb (MOb-ах) (в тех, в которые фрейм прошёл через фильтры). 3. Если не проходит, или испорчен до такой степени, что определить это (прохождение через фильтры) невозможно - не кладёт его (фрейм) в MOb, не устанавливает в слоте ACK - dominant уровень, ошибки устанавливает в разделе " общие ошибки" = "Stuff Error General", "CRC Error General", "Form Error General", " Acknoweledgment Error General". A. В моём случае фрейм через фильтры не проходит. B. Т. к. на шине других устройств нет - в слоте ACK recessive уровень. C. Но общие ошибки (а именно " Acknoweledgment Error General") не устанавливаются. Из-за этого невозможно проанализировать шину, что я собирался сделать в отладочных целях.
|
|
|
|
|
Jan 9 2008, 14:33
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(galjoen @ Jan 9 2008, 17:23)  И я именно об этом: приёмник выставляет dominant в ACK слоте, но из-за оторванного провода TXCAN у приёмника этого не получается (ACK остаётся recessive). И у него (у приёмника) возникает ошибка "ACK error" и больше никаких ошибок. Все правильно раз нет доминирущего бита, в ACK слоте значит нет подтверждение. А рвать линю TXCAN - не корректно вы просто отключаете физический уровень. И любая попытка отпрвить что то с этого узла приведет к Bus Off Ошибка bit error может возникнуть только в слоте данных. Цитата(galjoen @ Jan 9 2008, 17:23)  Я понимаю так: 1. Контроллер принимает фрейм и проверяет проходит-ли он через фильтры. 2. Если проходит - кладёт его в MOb (MOb-ы), устанавливает в слоте ACK - dominant уровень Нет, Контроллер принимает фрейм устанавливает в слоте ACK - dominant уровень, а фильтры, MOB... все это потом.
|
|
|
|
|
Jan 10 2008, 10:33
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(KRS @ Jan 9 2008, 17:33)  А рвать линю TXCAN - не корректно вы просто отключаете физический уровень. И любая попытка отпрвить что то с этого узла приведет к Bus Off Я не собирался отправлять, что нибудь с этого узла. Я хотел просто сделать анализатор КАН шины для отладочных целей. Цитата(KRS @ Jan 9 2008, 17:33)  Нет, Контроллер принимает фрейм устанавливает в слоте ACK - dominant уровень, а фильтры, MOB... все это потом. Проверил на железке (в т.ч осциллографом) - не верно (по крайней мере для AT90CAN128). Контроллер (принимающий) если этот фрейм не его (не проходит через фильтры ни в один MOb) - не устанавливает в слоте ACK - dominant уровень (отлично видно осциллографом т.к. провод TXCAN у принимающего всегда в 1). Да вроде и логически д.б. так: если фрейм никем не принят (ни одним MOb) - отправитель видит это по отсутствию dominant в слоте ACK. Я думаю (хотя и не уверен из-за отсутствия опыта), что именно для таких случаев и были придуманы общие ошибки (General Errors). Т.е. если принимающий контроллер видит на шине фрейм с ошибкой, но понимает, что это фрейм не его (или фрейм разрушен настолько, что определить его или не его он не может), он устанавливает общую ошибку.
|
|
|
|
|
Jan 10 2008, 12:27
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(galjoen @ Jan 10 2008, 13:33)  Я не собирался отправлять, что нибудь с этого узла. Я хотел просто сделать анализатор КАН шины для отладочных целей. Для этого есть режим LISTEN ONLY. Цитата(galjoen @ Jan 10 2008, 13:33)  Проверил на железке (в т.ч осциллографом) - не верно (по крайней мере для AT90CAN128). Контроллер (принимающий) если этот фрейм не его (не проходит через фильтры ни в один MOb) - не устанавливает в слоте ACK - dominant уровень (отлично видно осциллографом т.к. провод TXCAN у принимающего всегда в 1). Вот выдрежка из даташита на can128 The bit in the ACK slot is sent as a recessive bit and is overwritten as a dominant bit by the receivers which have at this time received the data correctly. Correct messages are acknowledged by the receivers regardless of the result of the acceptance test. И логически - это ошибка физического уровня. А то что не в один ящик не попало это другой уровень уже. Еще по поводу физического уровня если неплохой app note от микрочипа. Controller Area Network (CAN) Basics (можно по этому названию гуглом найти) там описаны все ошибки и когда они возникают или у боша (автора CAN) можно посмотреть - все определно стандартом!
|
|
|
|
|
Jan 11 2008, 13:31
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(KRS @ Jan 10 2008, 15:27)  Вот выдрежка из даташита на can128 The bit in the ACK slot is sent as a recessive bit and is overwritten as a dominant bit by the receivers which have at this time received the data correctly. Correct messages are acknowledged by the receivers regardless of the result of the acceptance test. И логически - это ошибка физического уровня. А то что не в один ящик не попало это другой уровень уже. Проверил осциллографом ещё раз - верно. Стоит разрешить КАН и настроить скорость - начинает в ACK слоте dominant устанавливать. Даже если ни одного MOb на приём не настроено. В прошлый раз у меня просто контакт пропадал когда я осциллографом тыкался - всё на соплях запаяно. Так-что спасибо вам KRS - без вас бы не разобрался. Но общие ошибки всё равно не возникают. Буду дальше ковырять на досуге. Если наковыряю - сообщу.
|
|
|
|
|
Jan 14 2008, 15:11
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(galjoen @ Jan 11 2008, 16:31)  Но общие ошибки всё равно не возникают. А что за общие ошибки? У физического уровня CAN таких ошибок нет. Есть Bit error, Stuff error, CRC error, Form error, Acknowledgment error Может Вы про то что в реализации CAN128 есть регистры MOB а есть General. Так в даташите написано что 19.7.3Error Setting The CAN channel can detect some errors on the CAN network. •In transmission: The error is set at MOb level. •In reception: - The identified has matched: The error is set at MOb level. - The identified has not or not yet matched: The error is set at general level. After detecting an error, the CAN channel sends an error frame on network. If the CAN channel detects an error frame on network, it sends its own error frame.
|
|
|
|
|
Jan 15 2008, 18:51
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(KRS @ Jan 14 2008, 18:11)  Может Вы про то что в реализации CAN128 есть регистры MOB а есть General. Да, я именно об этом. Думаю, что в данном случае "general errors" можно перевести как "общие ошибки". В том смысле, что не относящиеся к какому-либо MOb. Цитата(KRS @ Jan 14 2008, 18:11)  - The identified has not or not yet matched: The error is set at general level. Эту выдержку из даташита я понял так: если, или пока ещё, индентификатор не соответствует ( ни одному из установленных в принимающих MOb): ошибки устанавливаются на общем уровне. А вы как поняли? Из этих, общих ошибок (CANGIT), у меня только SERG (Stuff Error General) устанавливается. Это когда я передатчик на 100 кбод настраивал, а приёмник на 1 мбод. При этом каждый бит передатчика длиньше, чем 5 бит приёмника. У КАН, как я понял, max 5 бит одного значения подряд могут быть, 6 - это уже ошибка битстаффинга будет. Но и в этом случае - что-то странное. В регистре статуса приёмника (CANGSTA) бит error passive (ERRP) установлен (устанавливается). То-есть вроде-бы сейчас приёмник в режиме error passive, и только уровнем recessive кадр ошибки можем формировать. Но реально в линию dominant шлётся. Я уже к проводам TXCAN светодиоды припаял. Так он у приёмника в error passive mode, вроде светится не должен, а светится. А может я что-то не так понял с этим error passive? С CERG:CRC Error General и FERG:Form Error General - вроде понятно. Думаю, что заставлю их установиться (пока просто этим не занимался). Но бит AERG: Acknoweledgment Error General в том-же CANGIT упорно устанавливаться не хочет. Уж я, что только не делал. Но, думаю, раз есть такой бит - должен-же он когда-нибудь устанавливаться. Иначе - зачем его делать-то? Может кто-нибудь подскажет как заставить его установиться?
|
|
|
|
|
Jan 16 2008, 14:18
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(KRS @ Jan 16 2008, 10:58)  А как он может установиться? Он же может установиться только у передатчика а ошибки передачи устанавливаются в MOB. Тогда, зачем-же его сделали-то??? Еррату изучал - ничего об этом нет. Интересно, а как у других КАН контроллеров? Есть что-то подобное? Я-то кроме AT90CAN128 пока ничего не пробовал. Да и вообще - токо 3-ю неделю КАНаю (в свободное от основной работы время).
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|