CAN error status register (CAN_ESR)
Регистр состояния ошибок CAN-шины
Смещение (Address offset): 0x18
Reset value: 0x0000'0000
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 |
REC[7:0] | |||||||
r | r | r | r | r | r | r | r |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
TEC[7:0] | |||||||
r | r | r | r | r | r | r | r |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
Reserved | |||||||
--- | --- | --- | --- | --- | --- | --- | --- |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Reserved | LEC[2:0] | Reserved | BOFF | EPVF | EWGF | ||
--- | rw | rw | rw | --- | r | r | r |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
В случае ошибки во время приема этот счетчик увеличивается на 1 или на 8 в зависимости от типа ошибки, определенного стандартом CAN. После каждого успешного приема счетчик уменьшается на 1 или сбрасывается на 120, если его значение было больше 128. Когда значение счетчика превышает 127, контроллер CAN переходит в пассивное состояние с ошибкой.
Если сообщение было передано (при приеме или передаче) без ошибок, это поле будет сброшено до значения ‘0’.
Устанавливается аппаратно. Программно может быть установлено в значение 0b111, но обновляются аппаратно для отображения текущего состояния связи.
000 : No Error - нет ошибок
001 : Stuff Error -
010 : Form Error -
011 : Acknowledgment Error -
100 : Bit recessive Error -
101 : Bit dominant Error -
110 : CRC Error -
111 : Set by software - устанавливается программно
Устанавливается аппаратно при переходе в состояние отключения шины (Bus-off). Состояние отключения шины вводится при переполнении TEC, превышающем 255.
Устанавливается аппаратно, когда достигнут предел пассивной ошибки (счетчик ошибок приема или счетчик ошибок передачи > 127)
Устанавливается аппаратно при достижении предельного значения предупреждения об ошибках(счетчик ошибок приема или счетчик ошибок передачи достиг значения 96)
/******************** Bit definition for CAN_ESR register *******************/
#define CAN_ESR_EWGF ((uint32_t)0x00000001) /* Error Warning Flag */
#define CAN_ESR_EPVF ((uint32_t)0x00000002) /* Error Passive Flag */
#define CAN_ESR_BOFF ((uint32_t)0x00000004) /* Bus-Off Flag */
#define CAN_ESR_LEC ((uint32_t)0x00000070) /* LEC[2:0] bits (Last Error Code) */
#define CAN_ESR_LEC_0 ((uint32_t)0x00000010) /* Bit 0 */
#define CAN_ESR_LEC_1 ((uint32_t)0x00000020) /* Bit 1 */
#define CAN_ESR_LEC_2 ((uint32_t)0x00000040) /* Bit 2 */
#define CAN_ESR_TEC ((uint32_t)0x00FF0000) /* Least significant byte of the 9-bit Transmit Error Counter */
#define CAN_ESR_REC ((uint32_t)0xFF000000) /* Receive Error Counter */