18. 局域网控制器 (CAN)

18.1. 概述

本系列所有型号 CAN 模块操作均相同,不同型号 CAN 数量可能不同。使用前需使能 CAN 模块时钟。与物理层相连需要连接额外的硬件收发器。

18.2. 特性

  • 支持协议 2.0A(11位标识符)和 2.0B(29位标识符)

  • 支持最大 1 Mbit/s 的比特率

  • 提供128字节的接收FIFO

  • 提供32个16位或16个32位的滤波器

  • 提供可掩蔽中断

  • 为自检操作提供可编程环回模式

18.3. 功能描述

18.3.1. 中断配置与清除

CAN模块支持如下中断:

  • 接收中断

  • 发送中断

  • 错误中断

  • 数据溢出中断

  • 唤醒中断

  • 被动错误中断

  • 仲裁丢失中断

  • 总线错误中断

触发中断前,首先需要设置相应位的中断使能(IE)。

备注

各中断状态清除(除接收中断),均为读清除。对于接收中断,需要将CMD寄存器RRB位写1清除。

18.3.2. 数据发送

发送报文需要设置发送buffer (寄存器INFO,DATA0—DATA11)。可以是标准帧格式或是扩展帧格式。数据位最大是8个字节,超过8字节,自动按8字节计算。

写数据前,需要查看SR寄存器TXRDY位是否等于1,如果不等于1,则发送的数据将会被丢弃。发送数据请求通过设置CMD寄存器TXREQ位为1(发送请求) 或是CMD. SRR=1(自接收请求)。发送传输启动时,状态寄存器SR.TXBUSY置1,发送请求位清零。

数据传输没有开始时,可以通过设置命令寄存器(CMD. ABTTX = 1)中止传输。如果已经开始传输,则不能中止。

备注

不能通过设置 CMD.TXREQ = 0 取消发送请求,只能通过设置发送终止命令 CMD. ABTTX =1 取消。

同时设置 CMD. ABTTX =1,CMD. TXREQ = 1,数据只发送一次,若本次发送因总线错误和丢失仲裁失败,也不会自动重发。

18.3.3. 数据接收

数据接收先通过滤波器,符合条件标识符的才可以接收。滤波器的设置详见“接收滤波”章节。

数据接收可以读取内部128字节FIFO。

当CAN模块开始将接收到的数据写入接收FIFO时,状态寄存器SR.RXBUSY = 1, 当接收FIFO (寄存器INFO,DATA0—DATA11)接收到完整报文的时候,状态寄存器SR. RXDA = 1, 中断状态IF.RXDA置1(如果中断使能寄存器IE.RXDA置1)。 接收FIFO是64字节,最多允许接收5个完整的扩展帧报文。如果接收FIFO没有足够的内存,状态寄存器SR.RXOV = 1,数据溢出, (如果中断使能 IE. RXOV =1),溢出中断置位IF.RXOV = 1。

从接收FIFO中读取数据后,需要释放FIFO(设置CMD. RRB = 1)。如果没有读取的数据,中断状态位(IE. RXDA)和接收BUFFER(SR.RXDA)状态位清除。

18.3.4. 自接收

自接收功能,数据可以自发自收,不发送应答位。通过设置自接收请求(CMD. SRR = 1),根据配置,可以产生发送和接收中断。

如果自接收请求和发送请求同时设置,则自接收请求设置无效

18.3.5. 接收滤波

验收滤波器有验收代码寄存器(ACR0—ACR3)和验收屏蔽寄存器(AMR0—AMR1)

当接收到的CAN帧的ID满足ACR & ~AMR == ID & ~AMR时,该帧通过过滤,否则丢弃该帧。

../../_images/standard_frame.svg
../../_images/extended_frame.svg

18.3.6. 波特率

可通过BT0 和BT1寄存器设置波特率,波特率的分频值(BRP)低6bit存入BT0寄存器BRP位,高4bit存入BT2寄存器BRP位。

如 BRP = (SystemCoreClock / 2) / 2 / Baudrate/(1 + (BT1.TSEG1+ 1) + (BT1.TSEG2 + 1)) – 1

值得注意的是需要确保BRP的值为整数,即(SystemCoreClock / 2) / 2 / Baudrate 为整数, 即(1 + (BT1.TSEG1+ 1) + (BT1.TSEG2 + 1))能被((SystemCoreClock / 2) / 2 / Baudrate)整除。

采样点 = (BT1.TSEG1 + 1)/((1 + (BT1.TSEG1 + 1) + (BT1.TSEG2 + 1)) * 100%

图 18.1 波特率设置示意图所示。

../../_images/baudrate.svg

图 18.1 波特率设置示意图

18.3.7. 错误处理

CAN 模块包括两个错误计数器:接收错误计数器RXERR和发送错误计数器TXERR。当发生错误时,它们会根据 CAN 2.0 规范自动递增。

错误的类型(位错误、格式错误、填充错误或是其他错误)和错误在帧中的位置,可以通过错误代码捕捉寄存器ECC查询。

错误报警限制寄存器EWLIM用于设定当接收/发送错误个数达到指定值时触发警告,默认值是96。当发送错误计数器或是接收错误计数器超过错误报警限制寄存器设置的值时,错误状态寄存器(SR. ERRWARN = 1)置1,如果错误中断使能(IE. ERRWARN = 1),产生错误中断(IF. ERRWARN = 1)。

如果任何一个错误计数器超过127时,CAN进入错误被动状态(Error Passive),如果主动错误中断使能(IE. ERRPASS = 1),产生错误主动中断(IF. ERRPASS = 1)。

如果发送错误计数器超过了255,总线状态位(SR. BUSOFF)会被置1,总线关闭,CAN就会进入复位模式。当清除控制寄存器的复位模式(CR. RST),CAN退出复位模式。

18.3.8. 睡眠模式

CAN可以工作在低功耗的睡眠模式。通过设置控制寄存器 CR.SLEEP = 1,进入睡眠模式。

唤醒睡眠模式可以通过以下三种:

  • 总线上有活动

  • 配置睡眠中断使能,触发睡眠唤醒中断

  • 清除睡眠位(CR.SLEEP =0)

如果是总线上有活动唤醒睡眠模式,CAN 直到检测到总线空闲,并且接收到11bit后,才接受报文。在复位模式下,CAN不能进入睡眠模式。

备注

CR.SLEEP 位域只能在正常模式下写。

18.3.9. 仅听模式

配置 CR.LOM = 1,进入仅听模式。(至少需要三个节点)。

CAN工作在仅听模式,只接收数据,不发送数据。即使接收成功,也不发送应答位。

备注

CR.LOM 位域正常模式和复位模式下都可以写。

18.3.10. 初始化和配置

初始化

  • 配置中断使能寄存器

  • 选择单/双过滤模式和复位模式

  • 配置验收寄存器(ACR0—ACR3) 和验收屏蔽寄存器(AMR0—AMR3)

  • 配置总线定时寄存器0(BTR0)和1(BTR1),设置波特率

  • 配置CR寄存器,退出复位模式

设置发送数据

  • 查看发送buffer状态位,SR. TXBR

  • 如果可以写入新的报文发送,在发送buffer中写入数据 (配置寄存器INFO,DATA0—DATA11)

  • 配置命令寄存器CMD,设置CMD. TXREQ,发送数据请求,或CMD. SRR,自接收请求

  • 设置接收数据

  • 查看接收中断状态IF. RXDA (使能接收中断)或是接收buffer状态寄存器SR. RXDA

  • 当读取接收buffer里的数据后(寄存器INFO,DATA0—DATA11),将CMD. RRB置1,释放接收FIFO。

18.4. 寄存器映射

名称

偏移

复位值

CAN0 BASE:0x40042800

CR

0x00

0x00000001

CMD

0x04

0x00000000

SR

0x08

0x0000003C

IF

0x0C

0x00000000

IE

0x10

0x00000000

BT2

0x14

0x00000000

BT0

0x18

0x00000000

BT1

0x1C

0x00000000

AFM

0x24

0x00000000

AFE

0x28

0x00000000

ALC

0x2C

0x00000000

ECC

0x30

0x00000000

EWLIM

0x34

0x00000060

RXERR

0x38

0x00000000

TXERR

0x3C

0x00000000

INFO

0x40

0x00000000

DATAx (x = 0 .. 11)

0x44 + (x * 0x4)

0x00000000

RMCNT

0x74

0x00000000

ACRx (x = 0 .. 15)

0x300 + (x * 0x4)

0x00000000

AMRx (x = 0 .. 15)

0x380 + (x * 0x4)

0x00000000

18.5. 寄存器描述

18.5.1. 控制寄存器CR

偏移: 0x00

复位值: 0x00000001

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

SLEEP

STM

LOM

RST

位域

名称

类型

描述

31:5

4

SLEEP

R/W

1:进入睡眠模式,有总线活动或中断时唤醒并自动清零此位

0:正常模式

:此位域只能在正常模式下写。

3

2

STM

R/W

1 :自测模式,即使没有应答,CAN控制器也可以成功发送

0 :正常模式,成功发送数据,需要应答信号

:此位域正常模式和复位模式下都可以写。

1

LOM

R/W

1 :仅听模式

0 :正常模式

:此位域正常模式和复位模式下都可以写。

0

RST

R/W

1 :复位模式

0 :正常模式

注:复位模式位接收到’1’-’0’跳变后,CAN控制器回到工作模式

18.5.2. 命令寄存器 CMD

偏移: 0x04

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

SRR

CLROV

RRB

ABTTX

TXREQ

位域

名称

类型

描述

31:5

4

SRR

WO

1:自接收请求;用于在自测模式下,同时发送和接收数据

3

CLROV

WO

1:清除数据溢出状态位

2

RRB

WO

1:释放接收缓冲

1

ABTTX

WO

1:取消下一个发送请求

0

TXREQ

WO

1:工作模式下,发送数据请求

:不能通过设置 CMD.TXREQ = 0 取消发送请求,只能通过设置发送终止命令 CMD. ABTTX =1 取消。同时设置 CMD. ABTTX =1,CMD. TXREQ = 1,数据只发送一次,若本次发送因总线错误和丢失仲裁失败,也不会自动重发。

18.5.3. 状态寄存器 SR

偏移: 0x08

复位值: 0x0000003C

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

BUSOFF

ERRWARN

TXBUSY

RXBUSY

TXOK

TXBR

RXOV

RXDA

位域

名称

类型

描述

31:8

7

BUSOFF

RO

1:CAN 控制器处于总线关闭状态,没有参与到总线活动

0:CAN 控制器处于总线开启状态,参与总线活动

6

ERRWARN

RO

1:至少一个错误计数器达到错误限制寄存器设置的值

0:错误计数器的值小于错误限制寄存器设置的值

5

TXBUSY

RO

1:正在发送报文

0:空闲

4

RXBUSY

RO

1:正在接收报文

0:空闲

3

TXOK

RO

1:上一个报文发送成功完成

0:上一次的报文没有成功发送

2

TXBR

RO

1:可以写入新的报文发送

0:正在处理前面的发送,现在不能写新的报文

1

RXOV

RO

1:数据溢出。在接收FIFO里没有足够的空间导致数据的丢失

0:上一次写入清除数据溢出命令后,没有数据溢出

0

RXDA

RO

1:接收buffer满。接收buffer里有一个或多个数据可以读取

0:接收buffer空。没有可读数据

18.5.4. 中断状态寄存器 IF

偏移: 0x0C

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

BUSERR

ARBLOST

ERRPASS

WKUP

RXOV

ERRWARN

TXBR

RXDA

位域

名称

类型

描述

31:8

7

BUSERR

ROC

CAN控制器检测到总线错误

1:中断已产生

0:中断未产生

6

ARBLOST

ROC

CAN控制器丢失仲裁变成接收方

1:中断已产生

0:中断未产生

5

ERRPASS

ROC

从被动错误进入主动错误,或是至少一个错误计数器超过127

1:中断已产生

0:中断未产生

4

WKUP

ROC

在睡眠模式下的CAN控制器检测到总线活动

1:中断已产生

0:中断未产生

3

RXOV

ROC

数据溢出

1:中断已产生

0:中断未产生

2

ERRWARN

ROC

错误(SR. ERRWARN或SR.BUSOFF 0-to-1 或 1-to-0)

1:中断已产生

0:中断未产生

1

TXBR

ROC

可以写入新的报文,发送buffer状态位(SR. TXRDY)从0变成1

1:中断已产生

0:中断未产生

0

RXDA

RO

接收中断,接收buffer中有一个或是多个数据信息

1:中断已产生

0:中断未产生

注:清除该位通过写CMD.RRB = 1清除。

18.5.5. 中断使能寄存器 IE

偏移: 0x10

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

BUSERR

ARBLOST

ERRPASS

WKUP

RXOV

ERRWARN

TXBR

RXDA

位域

名称

类型

描述

31:8

7

BUSERR

R/W

总线错误中断使能

1:使能

0:禁能

6

ARBLOST

R/W

丢失仲裁中断使能

1:使能

0:禁能

5

ERRPASS

R/W

主动错误中断使能

1:使能

0:禁能

4

WKUP

R/W

睡眠唤醒中断使能

1:使能

0:禁能

3

RXOV

R/W

接收报文溢出中断使能

1:使能

0:禁能

2

ERRWARN

R/W

错误中断使能

1:使能

0:禁能

1

TXBR

R/W

可以写入新的报文中断使能

1:使能

0:禁能

0

RXDA

R/W

接收中断使能

1:使能

0:禁能

18.5.6. 总线定时器高四位寄存器BT2

偏移: 0x14

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

BRP

位域

名称

类型

描述

31:4

3:0

BRP

R/W

Baudrate Prescale,波特率预分频值高四位

CAN时间单位=2*Tsysclk*(BT2.BRP<<6+ BT0.BRP +1)

18.5.7. 总线定时器BT0

偏移: 0x18

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

SJW

BRP

位域

名称

类型

描述

31:8

7:6

SJW

R/W

同步跳变宽度

5:0

BRP

R/W

Baudrate Prescale,波特率分频低6位

CAN时间单位=2*Tsysclk*(BT2.BRP<<6+ BT0.BRP +1)

18.5.8. 总线定时器BT1

偏移: 0x1C

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

SAM

TSEG2

TSEG1

位域

名称

类型

描述

31:8

7

SAM

R/W

采样次数

0:1次

1:3次

6:4

TSEG2

R/W

t_tseg2 = CAN时间单位 * (TSEG2+1)

3:0

TSEG1

R/W

t_tseg1 = CAN时间单位 * (TSEG1+1)

18.5.9. 过滤方式选择寄存器AFM

偏移: 0x24

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

AFM15

AFM14

AFM13

AFM12

AFM11

AFM10

AFM9

AFM8

7

6

5

4

3

2

1

0

AFM7

AFM6

AFM5

AFM4

AFM3

AFM2

AFM1

AFM0

位域

名称

类型

描述

31:16

15

AFM15

R/W

过滤器15的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

14

AFM14

R/W

过滤器14的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

13

AFM13

R/W

过滤器13的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

12

AFM12

R/W

过滤器12的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

11

AFM11

R/W

过滤器11的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

10

AFM10

R/W

过滤器10的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

9

AFM9

R/W

过滤器9的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

8

AFM8

R/W

过滤器8的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

7

AFM7

R/W

过滤器7的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

6

AFM6

R/W

过滤器6的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

5

AFM5

R/W

过滤器5的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

4

AFM4

R/W

过滤器4的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

3

AFM3

R/W

过滤器3的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

2

AFM2

R/W

过滤器2的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

1

AFM1

R/W

过滤器1的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

0

AFM0

R/W

过滤器0的滤波方式

1:单滤波(32)位,只用于扩展帧

0:双滤波(16)位,只用于标准帧

18.5.10. 过滤使能寄存器AFE

偏移: 0x28

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

AFE15

AFE14

AFE13

AFE12

AFE11

AFE10

AFE9

AFE8

7

6

5

4

3

2

1

0

AFE7

AFE6

AFE5

AFE4

AFE3

AFE2

AFE1

AFE0

位域

名称

类型

描述

31:16

15

AFE15

R/W

滤波器15的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

14

AFE14

R/W

滤波器14的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

13

AFE13

R/W

滤波器13的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

12

AFE12

R/W

滤波器12的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

11

AFE11

R/W

滤波器11的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

10

AFE10

R/W

滤波器10的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

9

AFE9

R/W

滤波器9的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

8

AFE8

R/W

滤波器8的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

7

AFE7

R/W

滤波器7的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

6

AFE6

R/W

滤波器6的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

5

AFE5

R/W

滤波器5的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

4

AFE4

R/W

滤波器4的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

3

AFE3

R/W

滤波器3的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

2

AFE2

R/W

滤波器2的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

1

AFE1

R/W

滤波器1的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

0

AFE0

R/W

滤波器0的使能

1:使能滤波器,根据滤波规则进行包收取

0:关闭滤滤器,不收取该滤波器对应的包

18.5.11. 仲裁丢失捕捉寄存器 ALC

偏移: 0x2C

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

ERR_Code

位域

名称

类型

描述

31:5

4:0

ERR_Code

RO

详见下表

ALC[4:0]

十进制值

功能

0 0 0 0 0

00

仲裁丢失在识别码的bit1(ID.28)

0 0 0 0 1

01

仲裁丢失在识别码的bit2(ID.27)

0 0 0 1 0

02

仲裁丢失在识别码的bit3(ID.26)

0 0 0 1 1

03

仲裁丢失在识别码的bit4(ID.25)

0 0 1 0 0

04

仲裁丢失在识别码的bit5(ID.24)

0 0 1 0 1

05

仲裁丢失在识别码的bit6(ID.23)

0 0 1 1 0

06

仲裁丢失在识别码的bit7(ID.22)

0 0 1 1 1

07

仲裁丢失在识别码的bit8(ID.21)

0 1 0 0 0

08

仲裁丢失在识别码的bit9(ID.20)

0 1 0 0 1

09

仲裁丢失在识别码的bit10(ID.19)

0 1 0 1 0

10

仲裁丢失在识别码的bit11(ID.18)

0 1 0 1 1

11

仲裁丢失在SRTR位

0 1 1 0 0

12

仲裁丢失在IDE位

0 1 1 0 1

13

仲裁丢失在识别码的bit12(ID.17),只存在扩展帧格式

0 1 1 1 0

14

仲裁丢失在识别码的bit13(ID.16),只存在扩展帧格式

0 1 1 1 1

15

仲裁丢失在识别码的bit14(ID.15) ,只存在扩展帧格式

1 0 0 0 0

16

仲裁丢失在识别码的bit15(ID.14) ,只存在扩展帧格式

1 0 0 0 1

17

仲裁丢失在识别码的bit16(ID.13) ,只存在扩展帧格式

1 0 0 1 0

18

仲裁丢失在识别码的bit17(ID.12) ,只存在扩展帧格式

1 0 0 1 1

19

仲裁丢失在识别码的bit18(ID.11) ,只存在扩展帧格式

1 0 1 0 0

20

仲裁丢失在识别码的bit19(ID.10) ,只存在扩展帧格式

1 0 1 0 1

21

仲裁丢失在识别码的bit20(ID. 9) ,只存在扩展帧格式

1 0 1 1 0

22

仲裁丢失在识别码的bit21(ID. 8) ,只存在扩展帧格式

1 0 1 1 1

23

仲裁丢失在识别码的bit22(ID. 7) ,只存在扩展帧格式

1 1 0 0 0

24

仲裁丢失在识别码的bit23(ID. 6) ,只存在扩展帧格式

1 1 0 0 1

25

仲裁丢失在识别码的bit24(ID. 5) ,只存在扩展帧格式

1 1 0 1 0

26

仲裁丢失在识别码的bit25(ID. 4) ,只存在扩展帧格式

1 1 0 1 1

27

仲裁丢失在识别码的bit26(ID. 3) ,只存在扩展帧格式

1 1 1 0 0

28

仲裁丢失在识别码的bit27(ID. 2) ,只存在扩展帧格式

1 1 1 0 1

29

仲裁丢失在识别码的bit28(ID. 1) ,只存在扩展帧格式

1 1 1 1 0

30

仲裁丢失在识别码的bit29(ID. 0) ,只存在扩展帧格式

1 1 1 1 1

31

仲裁丢失在RTR位,只存在扩展帧格式

18.5.12. 错误代码 ECC

偏移: 0x30

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

ERRCODE

DIR

SEGCODE

位域

名称

类型

描述

31:8

7:6

ERRCODE

RO

错误代码:

00:位错误

01:格式错误

10:填充错误

11:其它错误

5

DIR

RO

0 发送时发生错误

1 接收时发生错误

4:0

SEGCODE

RO

错误段码,见下表

ECC[4:0]

十进制值

功能

0 0 0 0 0

00

0 0 0 0 1

01

0 0 0 1 0

02

ID28—ID21

0 0 0 1 1

03

帧开始

0 0 1 0 0

04

SRTR位

0 0 1 0 1

05

IDE位

0 0 1 1 0

06

ID20—ID18

0 0 1 1 1

07

ID17—ID13

0 1 0 0 0

08

CRC序列

0 1 0 0 1

09

保留位0

0 1 0 1 0

10

数据区

0 1 0 1 1

11

数据长度代码

0 1 1 0 0

12

RTR位

0 1 1 0 1

13

保留位1

0 1 1 1 0

14

ID.4 – ID.0

0 1 1 1 1

15

ID.12 – ID.5

1 0 0 0 0

16

1 0 0 0 1

17

积极错误标志

1 0 0 1 0

18

1 0 0 1 1

19

支配(控制)位误差

1 0 1 0 0

20

1 0 1 0 1

21

1 0 1 1 0

22

消极错误标志

1 0 1 1 1

23

错误定义符

1 1 0 0 0

24

CRC定义符

1 1 0 0 1

25

应答通道

1 1 0 1 0

26

帧结束

1 1 0 1 1

27

应答定义符

1 1 1 0 0

28

溢出标志

18.5.13. 错误报警限制EWLIM

偏移: 0x34

复位值: 0x00000060

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

EWLIM

位域

名称

类型

描述

31:8

7:0

EWLIM

R/W

当TXERR或RXERR之一大于此值时,产生ERRWARN中断

注意:在复位模式下可读可写,在正常模式下只读

18.5.14. 接收错误计数器 RXERR

偏移: 0x38

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

ERRCNT

位域

名称

类型

描述

31:8

7:0

ERRCNT

R/W

当前接收错误计数器的值

注意:在复位模式下可读可写,在正常模式下只读

18.5.15. 发送错误计数器 TXERR

偏移: 0x3C

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

ERRCNT

位域

名称

类型

描述

31:8

7:0

ERRCNT

R/W

发送错误计数器当前值

注意:在复位模式下可读可写,在正常模式下只读

18.5.16. 帧信息寄存器INFO

偏移: 0x40

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

FF

RTR

DLC

位域

名称

类型

描述

31:8

7

FF

R/W

帧格式

0 标准帧格式

1 扩展帧格式

6

RTR

R/W

帧格式

0 数据帧

1 远程帧

5:4

3:0

DLC

R/W

数据长度

18.5.17. 数据寄存器DATAx (x = 0 .. 11)

偏移: 0x44 + (x * 0x4)

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

DATA

位域

名称

类型

描述

31:8

7:0

DATA

R/W

对于标准帧:DATA[0]存储ID的高8位,DATA[1]的高3位存储ID的低3位,DATA[2~9]存储帧数据。

对于扩展帧:DATA[0]存储ID的最高8位,DATA[1]存储ID的次高8位,DATA[2]存储ID的再次8位,DATA[3]的高5位存储ID的最低5位,DATA[2~11]存储帧数据。

18.5.18. 接收报文数目寄存器RMCNT

偏移: 0x74

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

RMC

位域

名称

类型

描述

31:5

4:0

RMC

RO

每次接收到报文数目加1,释放接收缓冲数目减1

复位模式下,寄存器清零

18.5.19. 验收寄存器ACRx (x = 0 .. 15)

偏移: 0x300 + (x * 0x4)

复位值: 0x00000000

31

30

29

28

27

26

25

24

ACR

23

22

21

20

19

18

17

16

ACR

15

14

13

12

11

10

9

8

ACR

7

6

5

4

3

2

1

0

ACR

位域

名称

类型

描述

31:0

ACR

R/W

ACR & AMR == ID & AMR的Message通过过滤,可被接收

18.5.20. 验收屏蔽寄存器AMRx (x = 0 .. 15)

偏移: 0x380 + (x * 0x4)

复位值: 0x00000000

31

30

29

28

27

26

25

24

AMR

23

22

21

20

19

18

17

16

AMR

15

14

13

12

11

10

9

8

AMR

7

6

5

4

3

2

1

0

AMR

位域

名称

类型

描述

31:0

AMR

R/W

ACR & AMR == ID & AMR的Message通过过滤,可被接收