Модуль ECAN для dsPIC. Типичная сеть ECAN. 16 приемных фильтров для фильтрования сообщения, страница 22

/* Устанавливаем системную частоту как 40MHz */

#defineFCY 40000000

/* Устанавливаем модуль ECAN в режим конфигурирования, после записываем

в регистр управления скоростью обмена*/

C1CTRL1bits.REQOP = 4;

/* Ждём пока мы модуль ECAN перейдёт в режим конфигурирования */

while(C1CTRL1bits.OPMODE! = 4);

/* FCAN выбирается чтобы  был FCY для чего устанавливаем бит CANCKS

/* FCAN = FCY = 40MHz */

C1CTRL1bits.CANCKS = 0x1;

/* Задаём фазу сегмента 1 как 8 TQ */

C1CFG2bits.SEG1PH = 0x7;

/* Задаём фазу сегмента 2 чтобы программировать*/

C1CFG2bits.SEG2PHTS = 0x1;

/* Фазу сегмента 2 устанавливаем как 6 TQ */

C1CFG2bits.SEG2PH = 0x5;

/* Устанавливаем задержку распространения 5 TQ */

C1CFG2bits.PRSEG = 0x4;

/* Выборку с шины осуществлять три раза */

C1CFG2bits.SAM = 0x1;

/* Ширина скачка синхронизации настраиваем для  4 TQ */

C1CFG1bits.SJW = 0x3;

/* Устанавливаем предделитель скорости обмена для 1:1, т.е.., TQ = (2*1*1)/ FCAN  */

C1CFG1bits.BRP = 0x0 ;

/* Перевести модуль ECAN в нормальный режим*/

C1CTRL1bits.REQOP = 0;

/* Дождаться пока ECAN модуль перейдёт в нормальный режим */

while(C1CTRL1bits.OPMODE! = 0);

10. УПРАВЛЕНИЕ ОШИБКАМИ ECAN

10.1 Ошибки CAN шины

Протокол CAN позволяет обнаружить пять различных вида ошибок.

• Разрядная Ошибка

• Ошибка подтверждения

• Ошибка Формы

• Ошибка наполнения

• Ошибка CRC

Разрядная ошибка и ошибка подтверждения происходит на разрядном уровне; другие три ошибки происходят на уровне сообщения.

10.1.1 Разрядная ошибка

Узел, который посылает бит в шину также и контролирует шину. Разрядная ошибка обнаруживается, когда проверка бита отличается от выданного значения этого же бита. Исключение - то, когда recessive бит посылают в течении бита наполнения поля Arbitration или в течение поля подтверждения ACK. В этом случае, никакой ошибки не происходит когда проверяется dominant бит. Передатчик, посылая фрейм пассивной ошибки и обнаруживая dominant бит не интерпретирует это как разрядную ошибку.

10.1.2 Ошибка подтверждения

В поле Acknowledge сообщения, передатчик проверяет, содержит ли поле подтверждения (которое отправило это же устройство как recessive бит), dominant бит. В противном случае это подразумевает, что никакой другой узел не получил правильно фрейм. Если произошла ошибка подтверждения, то в результате сообщение должно быть повторено. При этом не формируется никакого фрейма ошибки.

10.1.3 Ошибка формы

Ошибка формы определяется когда поле fixed-form бит (поле конца фрейма, межфреймовый интервал, поле подтверждения или поле CRC), содержит один или более неправильных битов. Для receiver, dominant ,бит в течении последнего бита поля конца фрейма не рассматривают как ошибка формы.

10.1.4. Ошибка наполнения

Ошибка наполнения фиксируется если за 6 bit time прошла последовательность из 6 одинаковых бит  в поле сообщения, в котором протоколом CAN не допускается последовательности из 6-ти одинаковых  бит. При этом если возникнет ситуация, когда необходимо передать 6 и более одинаковых битов, то аппаратно это отслеживается и автоматически добавляется бит заполнения. Приёмник этот бит отбрасывает.

10.1.5 Ошибка CRC

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

Ошибка CRC обнаруживается если при расчёте приёмника результат не совпадает с кодом CRC содержащимся в переданном передатчиком сообщении.

10.2 Ограничение ошибок

Каждый CAN контролер на шине находит ошибки внутри каждого сообщения. Если ошибка обнаружена, обнаруживший узел передает кадр ошибки, таким останавливая передачу данных. Другие узлы обнаружившие кадр ошибки (если они сами не обнаружили эту ошибку) начинают предпринимать соответствующее действие (т.е. отбрасывают текущее сообщение).

ECAN модуль содержит два счетчика ошибок:

- Счетчик ошибок передачи (CiERR<TERRCNT>)