CAN-FD
简介
CAN-FD模块是一款通信控制器,实现了CAN协议规范2.0版A、B部分以及CAN-FD协议1.0版本。
CAN-FD子系统中配备了一块8KB的RAM,该RAM可实现对CAN基本格式(2.0 A)和扩展格式(2.0 B)的滤波功能,并支持接收缓冲区与发送缓冲区。这些功能组件的数量可通过CAN-FD寄存器进行配置。
芯来CAN-FD系统架构如图所示:
CAN-FD架构
主要特性
CAN-FD的主要特点如下:
支持CAN协议2.0 A、B版本,以及CAN-FD协议1.0版本
标准数据帧
扩展数据帧
远程帧
数据长度从零到六十四字节
可编程比特率
符合ISO 11898-1标准
CAN错误日志记录
改进的接收滤波
两个可配置的接收FIFO
最多可配置64个专用接收缓冲区,每个接收缓冲区均可设置为存储8、12、16、20、24、32、48或64字节长度的数据
最多配备32个专用发送缓冲区,每个发送缓冲区均可配置为存储8、12、16、20、24、32、48或64字节长度的数据
可配置的发射FIFO- 传输中止能力
可编程环回测试模式
基于16位自由运行定时器的时间戳
在以更快数据速率传输具有灵活数据速率的CAN消息时,支持收发器延迟补偿功能
可屏蔽模块中断
两个时钟域:
ICB_CLK:CAN-FD子系统ICB接口时钟输入
CAN-FD_CLK:CAN-FD子系统内核时钟输入
断电支持
功能描述
CAN-FD模块是一款CAN协议引擎,配备了极为灵活的RAM缓冲区系统,用于传输和接收标准CAN帧以及具有灵活数据速率的CAN/CAN FD帧。其邮箱系统由一组消息缓冲区组成,这些缓冲区可存储配置与控制数据、时间戳、消息ID及数据内容。 对于经典CAN帧(CAN 2.0 A/B)及支持灵活数据速率的CAN帧,系统支持通过RAM缓冲区实现同时发送与接收。在邮箱接收模式下,匹配算法可将接收到的帧存储至ID字段中已编程相同ID的RAM缓冲区中。此外,通过掩码方案,能够将RAM缓冲区中编程的ID与接收到的CAN帧上的ID范围进行匹配。在发送过程中,仲裁算法会根据CAN消息的ID,决定待发送RAM缓冲区的优先级顺序。当接收经典CAN帧或支持灵活数据速率的CAN帧时,RAM缓冲区的大小需足以容纳滤波器字段中所选数据字节数量。CAN帧或支持灵活数据速率的CAN帧对应的RAM缓冲区数量,详见接收流程。更多信息请参阅消息RAM配置。
CAN-FD总体描述
在当今支持灵活数据速率的CAN应用中,网络中的节点数量不断增加,且多个网络常通过网关相互连接。通常,系统中的消息数量(即每个节点需处理的消息量)已显著增加。此外,除了应用层消息外,还引入了网络管理和诊断消息。
需要一种增强的过滤机制来处理每种类型的消息。
此外,应用任务需要更多CPU时间,因此必须降低消息接收所导致的实时性约束。
一种发送与接收缓冲方案使CPU能够长期专注于应用任务,而不会丢失任何消息。
基于标准CAN且采用灵活数据速率驱动器的HLP(Higher Layer Protocol)标准,需要与灵活数据速率CAN控制器建立高效的接口。
CAN-FD 拓扑结构
CAN-FD工作模式
CAN-FD模块具有以下工作模式:
功能模式
在功能模式下,CAN-FD 可执行消息帧的接收和(或)发送操作,错误处理正常进行,并且所有 CAN 协议功能均已启用。
测试模式
在测试模式下,CAN-FD 应仅用于生产测试或自检。CAN-FD_TX 引脚的软件控制会干扰所有 CAN 协议功能。因此,不建议将测试模式用于实际应用。
CAN协议相关特性
本节介绍与CAN协议相关的功能。
CAN-FD帧格式
ISO 11898-1 标准规定了符合 ISO 11898-1(2003)的经典帧格式,并引入了 CAN 灵活数据速率帧格式。经典 CAN 帧格式支持最高 1 Mbit/s 的比特率,且每帧的数据负载可达 8 字节。而灵活数据速率帧格式则允许比特率超过 1 Mbit/s,同时支持每帧超过 8 字节的数据负载。CAN-FD CAN 能够接收和发送包含灵活数据速率消息与经典 CAN 消息交织的 CAN 数据。
在具有灵活数据速率的CAN帧中,还有三个附加控制位:
扩展数据长度(EDL)位支持采用不同数据长度编码方案,从而实现更长的数据有效载荷。
位速率切换位(BRS)决定是否在具有灵活数据速率格式的CAN帧内切换位速率。
错误状态指示器(ESI)标志由处于错误激活状态的节点以显性位发送,而由处于错误被动状态的节点以隐性位发送。
在具有灵活数据速率格式的CAN中,不存在远程帧。配置为发送远程帧的消息始终以经典CAN格式发出。当在使用灵活数据速率帧进行发送或接收时,RTR位为隐性状态,CAN-FD同样支持对此非法帧的发送与接收。需要注意的是,RTR位仅适用于经典CAN帧。
具有灵活数据速率的CAN消息可被格式化为长帧,其中数据字段长度超过8字节,范围可从12字节到64字节不等。此外,支持灵活数据速率的CAN消息还可配置为实现比特率切换:在这种模式下,CAN帧的控制字段、数据字段及CRC字段采用高于帧首尾部分的比特率进行传输。而经典CAN格式的消息则严格限制,其最大有效载荷仅为8字节。
下图CAN消息格式中的位域展示了采用标准或扩展标识符的Classic帧与变速帧的消息格式。
CAN-FD 位域字段
通过CFG_MCR.FD_EN位,可实现对具有灵活数据速率消息的CAN总线的接收与发送功能。在标识符为11位的CAN帧中,若解码出隐性R0位;或在标识符为29位的CAN帧中,若解码出隐性R1位,则均被视作EDL位(而非保留位)。其中,具有灵活数据速率的CAN帧以隐性EDL位作为识别标志,而经典CAN帧则以显性EDL位进行识别。BRS位用于指示该帧是否在其数据阶段切换比特率。此外,长帧将根据DLC字段的值进行解码。
具有灵活数据速率的消息的CAN总线可采用两种不同的位速率进行传输。在具有灵活数据速率的CAN帧中,从帧起始位(SOF)到位速率切换位(BRS)之间的部分,即所谓的仲裁阶段,会以基于一组标称CAN位定时配置值的标称位速率进行传输;而从BRS位到CRC界定符位之间的第二部分,即数据阶段,则采用由另一组CAN数据位定时配置值所定义的数据位速率进行传输。最后,从CRC界定符位至间隔位期间,传输将重新恢复为标称位速率。在发生位速率切换的具有灵活数据速率的CAN帧中,若BRS位为隐性电平,则该帧内的位定时会在BRS位的采样点处发生变化。在BRS位之前的CAN仲裁阶段,将按照CFG_NBTR寄存器所定义的标称CAN位定时规则执行;而当检测到BRS位为隐性电平时,则改用CFG_DBTR寄存器所定义的数据CAN位定时规则。
具有灵活数据速率的消息的CAN总线可采用两种不同的位速率进行传输。在具有灵活数据速率的CAN帧中,从帧起始位(SOF)到位速率切换位(BRS)之间的部分,即所谓的仲裁阶段,会以基于一组标称CAN位定时配置值的标称位速率进行传输;而从BRS位到CRC界定符位之间的第二部分,即数据阶段,则采用由另一组CAN数据位定时配置值所定义的数据位速率进行传输。最后,从CRC界定符位至间隔位期间,传输将重新恢复为标称位速率。在发生位速率切换的具有灵活数据速率的CAN帧中,若BRS位为隐性电平,则该帧内的位定时会在BRS位的采样点处发生变化。在BRS位之前的CAN仲裁阶段,将按照CFG_NBTR寄存器所定义的标称CAN位定时规则执行;而当检测到BRS位为隐性电平时,则改用CFG_DBTR寄存器所定义的数据CAN位定时规则。
CFG_MCR.BRS_EN 使能了当所选 TX-BUFFER 中的 BRS 位被置位时,所有支持比特率切换的帧的发送功能。同时,若接收帧中 BRS 位被置位,则该位也使能了所有支持比特率切换的帧的接收功能。CFG_MCR.FD_EN 或 CFG_MCR.BRS 位可随时写入,但仅对下一帧的发送或接收操作生效。
标称位定时将在CRC分隔符位的采样点或检测到错误时恢复,以两者中先发生者为准。下图显示了具有灵活数据速率消息的CAN协议的比特率切换机制,描述了当BRS位为隐性时,进入和退出数据阶段的机制。
CAN-FD 变速模式波特率切换机制
CRC计算过程
不同CAN帧格式对应不同的CRC多项式:
第一个多项式CRC_15用于经典CAN格式中的所有帧。
第二项,CRC_17,用于具有灵活数据速率格式且数据字段最长可达十六字节的CAN帧。
第三种,CRC_21,用于具有灵活数据速率格式且数据字段长度超过十六字节的CAN帧。
每个多项式均产生6位的汉明距离。在帧开始时,三个CRC多项式会同时进行计算。待传输的CRC序列由EDL位和DLC位字段的值共同决定。接收消息时,CAN-FD会解码EDL和DLC,以选择合适的CRC多项式,从而检测CRC错误。
在具有灵活数据速率格式的CAN帧中,为了CRC计算,比特流中会包含填充位;而在经典CAN格式的帧中,则不包含这些填充位。对于具有灵活数据速率格式的CAN帧,为确保CRC序列符合规定,CAN位填充方法被调整,使填充位被插入到固定位置。当CAN-FD正在发送具有灵活数据速率格式的CAN帧时,即使前一字段的最后几位并未满足CAN的位填充条件,也会在CRC序列的第一个比特之前插入一个固定的填充位。此外,每经过CRC序列中的第四个比特后,还会额外插入一个填充位。这些固定填充位的值与其前一位的值互为反码。当CAN-FD接收具有灵活数据速率格式的CAN帧时,它会从比特流中移除这些固定填充位,以进行CRC校验。如果检测到固定填充位与其前一位的值相同,则判定为“填充错误”。
CAN-FD能够以与经典CAN帧相同的方式检测具有灵活数据速率帧的CAN错误。CFG_ESR寄存器中的错误计数器REC[7:0]和TEC[7:0]分别累计了接收和发送错误的数量,且对灵活数据速率帧与非灵活数据速率帧均无差别地进行统计。
当CAN-FD处于数据阶段,即正在传输或接收具有灵活数据速率的CAN消息时,若检测到错误,它会立即切换回仲裁阶段,并以标称速率重新启动错误标志。
仲裁失败
CAN-FD在检测到仲裁丢失后将进入总线集成状态,并在检测到空闲条件时退出总线集成状态。
总线集成是指在协议异常事件发生后,节点处于空闲状态的等待情况。
空闲状态的检测是连续采样到11个隐性位的序列。
过载帧
当CAN总线上检测到以下条件时,CAN-FD会发送过载帧:
检测中断期间第一/第二位中的主导比特。
检测帧结束字段(接收帧)第7位(最后一位)的主导比特。
检测错误帧界定符或过载帧界定符的第8位(最后一位)中的主导位。
帧间隔
帧间空间用作帧之间的隔离区。无论前一帧的类型(数据帧、远程帧、错误帧或过载帧)如何,数据帧和远程帧都必须以帧间空间与前一帧隔开。但需要注意的是,错误帧和过载帧则无需与前一帧保持间隔。
当CAN-FD用作接收器时,帧结束之后紧接着是帧间间隔。
当CAN-FD用作发射机时,发送完帧尾后,将发送帧间间隔。
收发器补偿机制
具有灵活数据速率的CAN协议允许在消息的BRS位被置位时,以高于仲裁阶段所用标称速率的更高比特率进行数据的发送与接收。这一特性使系统能够支持高达8 Mbps的传输速率。
在具有灵活数据速率帧的CAN总线的数据阶段,如果发送器无法在其位的采样点接收到自己最新发送的比特,则判定为发生比特错误。当启用比特率切换功能(BRS位被置位)时,数据阶段中CAN位时间的长度可能缩短至低于收发器的环路延迟,从而妨碍当前CAN位时间段内对发送比特与接收比特的正确比较。
CAN-FD支持可选的收发器延迟补偿(TDC)机制,该机制定义了一个辅助采样点,用于将发送的比特与接收的比特进行正确比较,从而检测比特错误。
TDC机制由CFG_MCR.TDC_EN位启用,仅在具有BRS位且采用灵活数据速率帧的CAN协议的数据阶段有效。对于非灵活数据速率帧,或虽采用灵活数据速率但以正常比特率传输的帧,TDC均不产生任何影响。TDC从BRS位的采样点开始,持续至CRC分隔符位的采样点结束,前提是当前传输的消息已设置了BRS位。当TDC处于激活状态时,系统会将实际接收到的比特与延迟发送的比特进行比较,而延迟时间则根据测得的收发器环路延迟计算得出。
CAN-FD 收发器环回延时测量
对于每个已传输且BRS位被置位的灵活数据速率帧,延迟测量由从隐性EDL位到显性R0位的跳变触发(如图收发器环路延迟测量所示)。环路延迟以CAN-FD内核时钟周期(CAN-FDCLK)为单位进行测量,即从发送的EDL-R0边沿到接收的EDL-R0边沿之间的时间差。二次采样点的位置由测得的环路延迟时间加上CFG_TRANS_DELAY_COMP寄存器中指定的偏移值来确定。CFG_PSR.TRANS_DELAY_COMP位字段则存储了这一计算结果。
错误信号
当CAN-FD检测到位错误、填充错误、格式错误或ACK错误时,相应节点应在下一个位启动错误标志。若在灵活数据速率帧的数据阶段检测到错误,该节点应先从数据位时间切换回仲裁阶段的标称位时间,然后再启动错误标志。
错误类型
CAN-FD中的总线错误可分为以下类型:
1.位错误
当节点发送一个比特值(即显性或隐性)时,却检测到相反的比特(例如,实际发送的是显性比特,但检测到的是隐性比特),即发生位错误。然而,如果发送的比特为隐性,并且位于仲裁字段、应答槽或被动错误标志中,则检测到显性比特将不被视为位错误。
2.填充错误
当检测到连续6个相同值的比特时,即违反了位填充编码规则,系统会检测到一个填充错误。
3.CRC错误
数据帧或远程帧的接收器会根据所接收到的比特位计算CRC校验码。如果接收器计算出的CRC校验码与接收到的数据帧或远程帧中的CRC序列不匹配,则表明发生了CRC错误。
4.格式错误
当报文的固定格式位字段包含非法比特时,将检测到格式错误。例如,r1 和 r0 字段必须为显性状态。
5.ACK错误
当发射机在ACK槽位未检测到显性位时,即发生ACK错误。
受限模式
CAN-FD实现可提供受限操作模式:在此模式下,CAN-FD应能接收DF和RF,并对有效帧返回ACK,但不得发送EF或OF。若检测到错误条件或过载状况,CAN-FD不应发出显性位,而应将其视为协议异常事件,并进入总线集成状态。在该状态下,CAN-FD将通过连续检测到11个隐性位而退出。当CAN节点处于受限操作模式时,错误计数器既不会递增,也不会递减。CAN-FD的受限操作模式可通过cfg_mcr寄存器中的restricted_operation位进行设置。
在受限运行模式下,CAN-FD 具备以下能力:
用于发送或接收数据帧
用于发送或接收远程帧
在接收模式下对有效帧进行确认
此模式不支持:
错误帧发送
过载帧发送
主要功能描述
CAN-FD消息描述符
消息RAM的宽度为32位。CAN-FD模块可配置为在消息RAM中分配最多2048个字。无需为CAN-FD消息RAM配置中列出的每个区域进行单独设置,且各区域的排列顺序亦无任何限制。
CAN-FD 消息RAM配置
CAN-FD和软件以32位字对齐方式访问消息RAM,而非单个字节。消息RAM中所有功能区域的起始地址均按32位字对齐。
注意:CAN-FD 不会检查消息 RAM 的配置是否错误。尤其需要注意的是,不同区域的起始地址以及各区域的元素数量的配置,必须谨慎操作,以避免数据被篡改或丢失。
传输过程
CAN-FD的Tx功能负责处理专用Tx缓冲区的传输请求。它控制着发送消息到CAN核心的转移过程,以及读取和写入索引。最多可设置32个Tx缓冲区用于消息传输。根据元素大小的配置(CFG_TXDSIZE),每个CAN消息的数据字段将使用2至16个32位字进行存储(CFG_TXDSIZE = 0…7)。
CFG_MCR[8] |
CFG_MCR[9] |
TX 缓冲区参考位 |
TX 缓冲区参考位 |
CAN 帧类型 |
|---|---|---|---|---|
(EDL 位) |
(BRS 位) |
(FDF 位) |
(BRS 位) |
|
0 |
x |
忽略 |
忽略 |
标准 CAN 帧(Classic CAN) |
1 |
0 |
0 |
忽略 |
标准 CAN 帧(Classic CAN) |
1 |
0 |
1 |
忽略 |
支持灵活数据速率的 CAN 帧(FD),无波特率切换 |
1 |
1 |
0 |
忽略 |
标准 CAN 帧(Classic CAN) |
1 |
1 |
1 |
0 |
支持灵活数据速率的 CAN 帧(FD),无波特率切换 |
1 |
1 |
1 |
1 |
支持灵活数据速率的 CAN 帧(FD),带波特率切换 |
当Tx缓冲区请求待处理寄存器 CFG_TXBAR被更新,或传输已启动时,Tx函数会启动一次Tx扫描,以检查优先级最高的待处理Tx请求(即消息ID最低的Tx缓冲区)。
专用发送缓冲区
专用发送缓冲区旨在由CPU完全控制下进行消息传输。每个专用发送缓冲区均配置有特定的消息ID。专用发送缓冲区的数量可通过CFG_TXBUF寄存器中的TXB_NUM[5:0]字段进行设置。每个专用发送缓冲区都配备了一个特定的标识符,以便仅存储一个数据元素。发送请求通过CFG_TXBAR寄存器的添加请求发出。这些请求的消息将与CAN总线上的其他消息进行外部仲裁,并按标识符最低者(优先级最高)的顺序依次发送。专用发送缓冲区所需的内存大小取决于缓冲区中单个元素的大小,而单个缓冲区元素的大小则决定了该缓冲区包含的数据字节数。
CAN-FD 发送缓冲区机制
专用的发送缓冲区在消息RAM中分配了(n+2)个32位字。其中,n代表由CFG_TX_DSIZE寄存器指定的数据大小,而2则表示ID和DLC各占两个字。因此,消息RAM中专用发送缓冲区的起始地址,是通过将n乘以发送帧数,再加上发送缓冲区索引(0至31),最后与TXBF_ADDR.CFG_TBUF寄存器中的发送缓冲区起始地址相加计算得出的。
CAN消息RAM中专用发送缓冲区的地址是通过以下公式计算的:
专用发送缓冲区地址 = CAN_message_RAM_base_address + CFG_TXBUF.TXBUF_ADDR[10:0] + 发送缓冲区索引(0~32)× 发送缓冲区元素大小。 Tx_buffer_element_size = (CFG_TXDSIZE.TXB_DSIZE[2:0] / 4) + 2。 以下流程图用于简化采用Tx缓冲机制的传输操作。
CFG_TXDSIZE[2:0] |
DATA FIELD (bytes) |
CAN 消息大小 (RAM 字数) |
|---|---|---|
000 |
8 |
4 |
001 |
12 |
5 |
010 |
16 |
6 |
011 |
20 |
7 |
100 |
24 |
8 |
101 |
32 |
10 |
110 |
48 |
14 |
111 |
64 |
18 |
BIT |
[31:24] |
[23:16] |
[15:8] |
[7:0] |
|---|---|---|---|---|
MB0 |
EDL,ID,RTR,ID[28:24] |
ID[23:16] |
ID[15:8] |
ID[7:0] |
MB1 |
RES[7:0] |
RES[1:0],ESI,BRS,DLC[3:0] |
Reserve |
Reserve |
MB2 |
DATA3[7:0] |
DATA2[7:0] |
DATA1[7:0] |
DATA0[7:0] |
MB3 |
DATA7[7:0] |
DATA6[7:0] |
DATA5[7:0] |
DATA4[7:0] |
… |
… |
… |
… |
… |
MB17 |
DATA63[7:0] |
DATA62[7:0] |
DATA61[7:0] |
DATA60[7:0] |
注意:
当RTR(MB0[29])= 1时,CAN-FD将根据ISO11898-1标准发送远程帧,即便CFG_MCR.FD_EN已启用CAN FD格式的传输功能。
发送缓冲区的ESI位与错误被动标志进行或运算,以决定所发送FD帧中ESI位的值。根据CAN FD协议规范的要求,错误主动节点可选择性地将ESI位发送为隐性状态,而错误被动节点则始终将ESI位发送为隐性状态。
BIT |
Description |
|---|---|
MB0[31] |
|
MB0[30] |
|
MB0[29] |
|
MB0[28:0] |
|
MB1[31:22] |
预留位,供未来使用 |
MB1[21] |
|
MB1[20] |
|
MB1[19:16] |
DLC: 数据长度码(若为 RTR 帧,DLC 由硬件配置为 4’b0) |
MB1[15:0] |
预留位,供未来使用 |
MB2[31:24] |
DATA BYTE3 |
MB2[23:16] |
DATA BYTE2 |
MB2[15:8] |
DATA BYTE1 |
MB2[7:0] |
DATA BYTE0 |
MB3[31:24] |
DATA BYTE7 |
MB3[23:16] |
DATA BYTE6 |
MB3[15:8] |
DATA BYTE5 |
MB3[7:0] |
DATA BYTE4 |
… |
… |
MB17[31:24] |
DATA BYTE63 |
MB17[23:16] |
DATA BYTE62 |
MB17[15:8] |
DATA BYTE61 |
MB17[7:0] |
DATA BYTE60 |
发送FIFO
Tx FIFO 操作通过写入 CFG_TXBUF.TXFIFO_NUM[5:0] 来配置。存储在 Tx FIFO 中的元素将从读指针所指向的元素开始传输,该读指针由 CFG_TXFIFO_STATUS.TXFF_RPTR[4:0] 指定。每次传输完成后,CFG_TXFIFO_STATUS.TXFF_RPTR[4:0] 会按循环方式递增,直至 Tx FIFO 缓冲区被清空。
Tx FIFO 能够按照元素被写入 Tx FIFO 的顺序进行传输。由于 FIFO 中最先/最旧的元素会被优先发送,因此传输过程与各标识符的优先级无关。
XCAN 通过 CFG_TXFIFO_STATUS.TXFF_ENTRY_NUM[5:0] 计算 Tx FIFO 缓冲区的空闲级别,即读指针(CFG_TXFIFO_STATUS.TXFF_RPTR[4:0])与写指针(CFG_TXFIFO_STATUS.TXFF_WPTR[4:0])之间的差值。该值表示可用(空闲)的 Tx FIFO 元素数量。 新的发送元素必须从写指针所指向的发送缓冲区开始,依次写入Tx FIFO。CAN消息RAM中下一个空闲Tx FIFO缓冲区的地址可通过以下公式计算得出: 专用发送缓冲区地址 = CAN_message_RAM_base_address + CFG_TXBUF.TXBUF_ADDR[10:0] + TX_FIFO写指针(0~32)× 发送缓冲区元素大小。 Tx_buffer_element_size = (CFG_TXDSIZE.TXB_DSIZE[2:0] / 4) + 2。
CAN-FD 发送FIFO机制
灵活的传输配置
高效的CAN-FD支持混合配置,以增强传输的灵活性,并充分发挥每种机制的优势。目前支持的混合配置为专用发送缓冲区 + 发送FIFO。
混合配置:专用发送缓冲区与发送FIFO
CAN-FD消息RAM的发送缓冲区部分可配置为混合模式:CAN-FD消息RAM中的发送缓冲区被划分为一组专用发送缓冲区和一个发送FIFO。 专用发送缓冲区的数量通过CFG_TXBUF.TXBUF_NUM[5:0]进行配置。分配给发送FIFO的发送缓冲区数量则通过CFG_TXBUF.TXFIFO_NUM[5:0]进行配置。
Tx 处理器会扫描所有已激活传输请求的专用 Tx 缓冲区,以及由读指针引用的、最久未处理的 Tx FIFO 缓冲区。标识符最低的缓冲区优先级最高,将被优先发送。
下图展示了一种使用混合专用发送缓冲区与发送FIFO的用例。
CAN-FD 混合模式发送实例
在本示例中,各元素按以下顺序传输(假设所有专用发送缓冲区请求均已启用):
Tx缓冲区索引6(因为它是标识符为0且在所有专用Tx缓冲区中优先级最高的最旧待处理Tx FIFO)
Tx缓冲区索引4(标识符 = 3):它是所有其他专用Tx缓冲区中优先级最高的,并且其优先级高于最久待处理的Tx FIFO缓冲区——Tx缓冲区7。
Tx缓冲区索引3(标识符 = 4):它在所有其他专用Tx缓冲区中具有最高优先级,并且其优先级高于最旧的待处理Tx FIFO:Tx缓冲区7。
Tx缓冲区索引7(因为它是标识符为6且在所有专用Tx缓冲区中优先级最高的最旧待处理Tx FIFO)
Tx缓冲区索引8(因为它是标识符为5且在所有专用Tx缓冲区中优先级最高的最旧待处理Tx FIFO)
Tx 缓冲区索引 2(标识符 = 7:在所有其他专用 Tx 缓冲区中优先级最高)
Tx 缓冲区索引 0(标识符 = 8:在所有其他专用 Tx 缓冲区中优先级最高)
Tx 缓冲区索引 5(标识符 = 15:在所有其他专用 Tx 缓冲区中优先级最高)
Tx 缓冲区索引 1(标识符 = 24:因为它是唯一待处理的专用 Tx 缓冲区)
传输暂停
该功能由CFG_MCR寄存器中的TXPAUSE位控制。若该位被置位,CAN-FD在每次成功发送消息后,将在开始下一次传输前暂停两个CAN位时间。这使得网络中的其他CAN节点即使其消息的优先级标识符较低,仍能继续发送消息。默认情况下,此功能处于禁用状态(CFG_MCR.TXPAUSE = 0)。 该功能可缓解来自单个节点的突发传输,并有效防止“口无遮拦”场景——即应用程序因错误而请求过多的传输。
传输取消
CAN-FD支持传输取消功能。要从专用发送缓冲区中取消已请求的传输,主机需向CFG_TXABORT_REQ寄存器的相应位(即Tx缓冲区编号)写入1。此传输取消功能不适用于Tx FIFO操作模式。 如果在发射缓冲区的传输正在进行时请求取消传输,此时对应的发射缓冲区将无法被取消,且相应的CFG_TXREQ_PENDING位将持续置位,直至传输完成。若传输成功完成,则相应CFG_TXB_TRANS位会被置位。
时间戳生成
CAN-FD 提供了一个16位循环计数器,用于生成时间戳。通过配置预分频器 CFG_TIME_DIV,可将计数器的时钟频率设置为CAN位时间的整数倍(1-16)。该计数器可通过寄存器 CFG_TIME_STAMP 进行读取。对寄存器 CFG_TIME_STAMP 的写入操作会将计数器重置为0。当时间戳计数器发生溢出时,中断标志 CFG_INT_STATUS.TIME_STAMP_WRAP_INT 将被置位。
当接收帧的dlc字段处理完毕后,前一帧的计数值会被存储到Rx缓冲区(RTS[15:0])元素的时间戳部分。 当帧完成接收或发送时,当前帧的计数值将被存储到cfg_time_stamp[15:0]寄存器中。
当帧完成接收或发送时,当前帧的计数值将被存储到cfg_time_stamp[15:0]寄存器中。
接收过程
CAN-FD接收功能负责控制接收滤波,并将接收到的消息传输至Rx缓冲区。
接收处理
Rx 处理器负责控制接收过滤、将接收到的消息传输至 Rx 缓冲区或两个 Rx FIFO 中的某一个,以及管理 Rx FIFO 的存取索引。
接收滤波器
CAN-FD 提供了配置两组接收滤波器的可能性,一组用于标准标识符,另一组用于扩展标识符。这些滤波器可分别分配至接收缓冲区、接收 FIFO 0 或接收 FIFO 1。对于每个接收到的 CAN 报文,系统将逐一检查所有滤波器列表中的元素。一旦找到首个匹配项,接收滤波即刻停止,后续的滤波器元素将不再对该报文进行评估。
主要特点如下:
每个滤波器元件均可配置为:
用于特定ID的–滤波器
经典位掩码滤波器
每个滤波器元件均可配置为执行通带或阻带滤波。
每个滤波器元件可单独启用/禁用
滤波器按顺序进行检查,一旦找到首个匹配的滤波元件,即停止执行。
相关的配置寄存器如下:
全局滤波器配置(CFG_GLOBAL_FILTER)
标准ID滤波器配置(CFG_ST_FILTER)
扩展ID滤波器配置(CFG_EX_FILTER)
标准ID与掩码(CFG_STIDM)
扩展的ID与掩码(CFG_EXIDM)
取决于具体情况,滤波器元件的结构形式(表6.5和6.7):匹配触发器会激活其中一个以下操作:
将接收到的帧存储于FIFO 0或FIFO 1中
将接收到的帧存储在接收缓冲区中
拒绝接收的帧
接收滤波在完整标识符被接收后启动。完成接收滤波后,若已找到匹配的接收缓冲区或接收FIFO,则消息处理器将开始以32位为单位,分批次地将接收到的消息数据写入对应的接收缓冲区或接收FIFO中。如果CAN协议控制器检测到错误条件(例如CRC错误),则会设置匹配接收缓冲区的新数据标志,此时接收缓冲区或接收FIFO将被新接收的数据填充。有关错误类型的详细信息,请参阅CFG_ESR寄存器。
经典模式掩码滤波器
经典位掩码滤波旨在通过屏蔽接收到的消息ID的单个比特,来过滤消息ID组。在经典位掩码滤波中,CFG_STIDM / CFG_EXIDM 用作滤波掩码。 滤波器掩码中的0位将屏蔽配置的ID滤波器相应位的位置,例如,该位位置上接收到的消息ID值与接受过滤无关。只有接收消息ID中对应掩码位为1的那些比特,才与接受过滤相关。 如果所有掩码位均为1,则只有当接收到的消息ID与消息ID滤波器完全相同时,才会发生匹配;若所有掩码位均为0,则所有消息ID均会匹配。
CAN-FD标准消息ID滤波元件
标准消息ID过滤
标准消息ID过滤器匹配序列:显示了标准消息ID(11位标识符)过滤的流程。
CAN-FD 标准ID过滤器匹配流程
根据全局滤波器配置(CFG_GLOBAL_FILTER)和标准ID滤波器配置(CFG_ST_FILTER)中的消息ID、远程传输请求位(RTR),以及接收到的帧的标识符扩展位(IDE),与已配置滤波器元素列表进行比较。
扩展的ID与掩码(CFG_STIDM)在执行滤波列表之前会先与接收到的标识符进行按位与运算。
最多可配置128个滤波器单元,用于11位标准ID。在访问标准报文ID滤波器单元时,其地址为滤波器列表的标准起始地址CFG_ST_FILTER.STFLT_ADDR加上该滤波器单元的索引(0-127)。
BIT |
Description |
|---|---|
[31:30] |
|
[29:28] |
|
[27] |
预留位,供未来使用 |
[26:16] |
标准过滤器 ID 1(SFID1) |
[15:11] |
预留位,供未来使用 |
[10:0] |
|
CAN-FD 扩展消息ID过滤元件
扩展消息ID过滤
扩展消息ID过滤器,匹配序列:展示了扩展消息ID的流程(29位标识符滤波)
CAN-FD 扩展ID过滤器匹配流程
根据全局滤波器配置(CFG_GLOBAL_FILTER)和扩展ID滤波器配置(CFG_EX_FILTER)中的消息ID,对接收到的帧的远程传输请求位(RTR)及标识符扩展位(IDE),与已配置的滤波器元素列表进行比较。
扩展的ID与掩码(CFG_EXIDM)在执行滤波列表之前会先与接收到的标识符进行AND运算。
最多可为29位扩展ID配置64个滤波器元件。在访问扩展消息ID滤波器元件时,其地址等于滤波器列表的扩展起始地址CFG_EX_FILTER.EXFLT_ADDR,再加上该滤波器元件索引的两倍(0至63)。
BIT |
Description |
|---|---|
[31:30] |
|
[29] |
预留位,供未来使用 |
[28:0] |
扩展过滤器 ID 1(EXFID1) |
BIT |
Description |
|---|---|
[31:30] |
|
[29] |
预留位,供未来使用 |
[28:0] |
|
专用接收缓冲区
CAN-FD最多支持64个专用接收缓冲区。专用接收缓冲区区域的起始地址通过CFG_RXBUF寄存器进行配置。
当接收到的消息被滤波器元件接受后,该消息将被存储到由滤波器元件引用的消息RAM中的接收缓冲区中。同时,中断寄存器中的标志位CFG_INT_STATUS.RXB_UPD_INT(表示消息已存储于专用的接收缓冲区)将被置位。此外,当匹配的接收消息的最后一字节被写入消息RAM后,寄存器CFG_RXDATL_RSP或CFG_RXDATH_RSP中对应的响应数据标志位也将被置位。
软件访问接收缓冲区处理
获取中断标志 CFG_INT_STATUS.RXB_UPD_INT
读取新数据寄存器
从消息RAM中读取消息
通过CFG_DATL_RSP或CFG_DATH_RSP清除已处理消息的传入数据标志
接收缓冲器结构 最多可在消息RAM中配置64个接收缓冲区。每个接收缓冲区段可配置为存储多达64条接收到的消息。 接收FIFO 0和接收FIFO 1可分别配置为最多容纳64个元素。这两个接收FIFO的配置通过寄存器CFG_RXFIFO0和CFG_RXFIFO1完成。 通过接收端验收滤波的消息将根据匹配滤波器元件的配置,被传输至Rx FIFO。
当CFG_RXFIFOn_STATUS.RXFFn_FULL信号指示Rx FIFO已满时,除非至少有一条消息被读出且Rx FIFO的读指针已递增,否则不会再向对应的Rx FIFO写入任何消息。如果在对应Rx FIFO处于满状态时仍接收到新消息,则该消息将被丢弃,并触发中断标志CFG_INT_STATUS.RXFn_LOST_INT。
为避免接收FIFO溢出,可使用接收FIFO水位线。当接收FIFO的填充级别达到由CFG_RXFIFOn.RXFFn_WM寄存器配置的接收FIFO水位线时,中断标志CFG_INT_STATUS.RXFn_WM_INT将被置位。
当软件从接收FIFO中读取数据并设置CFG_RXFIFOn_ACK.RXFn_ACK以发送确认信号时,接收FIFO的读指针将指向下一个条目位置。
接收FIFO阻塞模式
Rx FIFO 阻塞模式通过 CFG_RXFIFOn.RXFFn_OPM = 0 进行配置。这是 Rx FIFO 的默认工作模式。 当一个接收器先进先出完整条件是已达到(CFG_RXFIFOn_STATUS.RXFFn_WPTR= 当至少有一条消息被读出且Rx FIFO的读指针已递增后,才会向对应的Rx FIFO继续写入新消息。若Rx FIFO达到满状态,则由CFG_RXFn_STATUS.RXFn_FULL = 1信号指示;同时,中断标志CFG_INT_STATUS.RXFn_FULL_INT也被置位。
接收FIFO覆盖模式 Rx FIFO 阻塞模式通过 CFG_RXFIFOn.RXFFn_OPM = 1 进行配置。 当CFG_RXFn_STATUS.RXFn_FULL = 1 表示Rx FIFO已满时,下一个被接受写入FIFO的消息将始终覆盖FIFO中最早的那条消息。在此状态下,写指针和读指针均会各自递增1。如果此时已无新消息进入,剩余的Rx FIFO内容即可通过软件进行读取。
接收端元件结构
Rx缓冲区与FIFO元件的结构如图所示,RX缓冲区结构。
BIT |
[31:24] |
[23:16] |
[15:8] |
[7:0] |
|---|---|---|---|---|
MB0 |
Res,RTR,IDE,ID[28:24] |
ID[23:16] |
ID[15:8] |
ID[7:0] |
MB1 |
ANHF,HF[6:0] |
RES,ESI,EDL,BRS,DLC[3:0] |
RTS[15:8] |
RTS[7:0] |
MB2 |
DATA3[7:0] |
DATA2[7:0] |
DATA1[7:0] |
DATA0[7:0] |
MB3 |
DATA7[7:0] |
DATA6[7:0] |
DATA5[7:0] |
DATA4[7:0] |
… |
… |
… |
… |
… |
MB17 |
DATA63[7:0] |
DATA62[7:0] |
DATA61[7:0] |
DATA60[7:0] |
通过寄存器CFG_RXDSIZE,可配置用于存储最多包含64字节数据字段的CAN灵活数据速率消息的总消息缓冲区(MB)大小。
BIT |
Description |
|---|---|
MB0[31] |
预留位,供未来使用 |
MB0[30] |
|
MB0[29] |
|
MB0[28:0] |
|
MB1[31] |
|
MB1[30:24] |
HF: 命中过滤器索引 |
MB1[23] |
预留位,供未来使用 |
MB1[22] |
|
MB1[21] |
|
MB1[20] |
|
MB1[19:16] |
DLC: 数据长度码 |
MB1[15:0] |
RTS: 前一个 CAN 帧的时间戳 |
MB2[31:24] |
DATA BYTE3 |
MB2[23:16] |
DATA BYTE2 |
MB2[15:8] |
DATA BYTE1 |
MB2[7:0] |
DATA BYTE0 |
MB3[31:24] |
DATA BYTE7 |
MB3[23:16] |
DATA BYTE6 |
MB3[15:8] |
DATA BYTE5 |
MB3[7:0] |
DATA BYTE4 |
… |
… |
MB17[31:24] |
DATA BYTE63 |
MB17[23:16] |
DATA BYTE62 |
MB17[15:8] |
DATA BYTE61 |
MB17[7:0] |
DATA BYTE60 |
CAN-FD 进入低功耗模式
CAN-FD 扩展ID过滤器匹配流程
CAN-FD 可通过寄存器 CFG_MCR.CLK_STOP_REQ 上的时钟停止请求输入,被设置为睡眠模式(断电状态)。只要时钟停止请求处于激活状态,位 CFG_MCR.CLK_STOP_REQ 就会被读取为 1。当所有待处理的传输请求均已完成后,CAN-FD 将等待直至检测到总线空闲状态。此时,CAN-FD 会通过将 CFG_MCR.CLK_STOP_ACK 置 1 来确认其已准备好进入断电状态。在该状态下,模块时钟输入端(icb_clk 和 xkan_clk)可被关闭。
要退出电源关闭模式,应用程序必须在复位寄存器CFG_MCR.CLK_STOP_REQ之前先开启模块时钟。CAN-FD将通过复位CFG_MCR.CLK_STOP_ACK来确认此操作。随后,应用程序可通过设置配置寄存器重新启动CAN-FD通信。
测试模式
静默模式
CAN-FD可通过在CFG_TEST寄存器中设置SILM,进入静默模式。
在静默模式下,CAN-FD能够接收有效的数据帧和远程帧,但其仅向CAN总线发送隐性位,无法启动传输。如果CAN-FD需要发送显性位(ACK位、过载标志或主动错误标志),该位会通过内部路由重新定向,从而使CAN核心继续监控这一显性位,尽管此时CAN总线可能仍处于隐性状态。静默模式可用于分析CAN总线上的通信流量,而不会因显性位(应答位、错误帧)的发送而对其造成干扰。
CAN-FD 静默模式
环回模式
CAN-FD可通过设置CAN_TEST寄存器中的LBKM位,被配置为环回模式。在环回模式下,CAN-FD会将自身发送的消息视为接收到的消息,并将其存储到接收RAM缓冲区中(前提是这些消息通过了验收滤波)。
此模式用于自检功能。为确保与外部事件完全隔离,CAN核心在环回模式下会忽略应答错误(即在数据帧或远程帧的应答槽中未采样到显性位)。在此模式下,CAN-FD将其实时输出端口的信号通过内部反馈直接送入其接收输入端。CAN-FD_RX输入引脚的实际电平值会被CAN-FD忽略。此时,发送的消息可通过CAN-FD_TX引脚进行监控。
CAN-FD 环回模式
回环与静默模式相结合
此外,还可通过设置CAN_TEST寄存器中的LBKM位和SILM位,将环回模式与静默模式相结合。该模式可用于“热自检”,即CAN-FD可像在环回模式下一样进行测试,但不会对连接至CAN_TX和CAN_RX引脚的运行中CAN系统造成任何影响。在此模式下,CAN_RX引脚与CAN-FD断开连接,而CAN_TX引脚则保持隐性状态。
CAN-FD 回环与静默结合模式
时钟域与限制
CAN-FD模块具有两个彼此异步的时钟域:
icb总线时钟(icb_clk)用于寄存器配置。
内核时钟(xkan_clk)用于CAN协议的生成。
当两个时钟域分别连接到频率和/或相位不同的时钟时,两时钟域之间的频率关系将受到限制。在异步工作模式下,icb总线时钟(icb_clk)的频率必须始终高于内核时钟(xkan_clk)的频率。
注意:外设时钟与振荡器时钟之间不得采用1:1的异步运行模式。
比特定时生成
位定时逻辑监测串行总线线路,并通过在起始位沿同步以及在后续沿重新同步,实现采样点的采样与调整。
如图 CAN-FD位定时生成所示,其工作原理可简单地通过将位时间划分为三个时段来解释,具体如下:
同步段(SYNC_SEG):在此时间段内应发生一位变化,其固定长度为一个时间因子(1*tq)。
位段1(BS1):定义了采样点的位置。它包含CAN标准中的PROP_SEG和PHASE_SEG1,其持续时间可在1至16个时间因子之间编程设置,但为补偿网络中各节点频率差异导致的正向相位漂移,该段长度可自动延长。
位段2(BS2):定义了发送点的位置。它对应于CAN标准中的PHASE_SEG2,其持续时间可在1到8个时间因子之间进行编程设置,但也可自动缩短,以补偿负相位漂移。
CAN-FD 位域时序图
波特率是位时间的倒数(波特率 = 1/位时间),而位时间又由三个组成部分之和构成。CAN-FD位定时生成模块指出:位时间 = 同步段时间 + BS1段时间 + BS2段时间,其中:
对于标称位时间
tq = (CFG_NBTR.NBRP[8:0] + 1) * T_can_clk
tSyncSeg = 1 微秒
tBS1 = tq * (CFG_NBTR.NTSEG1[7:0] + 1)
tBS2 = tq * (CFG_NBTR.NTSEG2[6:0] + 1)
对于数据比特时间
tq = (CFG_DBTR.NBRP[4:0] + 1) × T_can_clk
tSyncSeg = 1 微秒
tBS1 = tq * (CFG_NBTR.NTSEG1[4:0] + 1)
tBS2 = tq * (CFG_NBTR.NTSEG2[3:0] + 1)
(重新)同步跳宽(SJW)定义了比特段延长或缩短量的上限,其可编程范围为1至4个时间因子。
有效边定义为在位时间内从显性总线电平到隐性总线电平的首次跃迁,但前提是控制器本身并未发送隐性位。
如果在BS1中检测到有效边沿而非SYNC_SEG,则将BS1最多延长SJW,以延迟采样点。
相反,如果在BS2中检测到有效边沿而非SYNC_SEG,则将BS2缩短最多SJW,以提前发送点的位置。
为防止编程错误,位定时寄存器的配置仅可在器件处于初始模式时进行。
中断
Interrupt source |
Enable control bit |
Description |
|---|---|---|
RX buffer update |
CFG_INT_EN[0] |
当专用 RX 缓冲区接收到新 CAN 消息时产生中断 |
RX cdc fifo overflow |
CFG_INT_EN[1] |
当 CAN-FD 处于接收模式时,RX CDC FIFO 发生溢出时产生中断 |
TX cdc fifo underflow |
CFG_INT_EN[2] |
当 CAN-FD 处于发送模式时,TX CDC FIFO 发生欠流时产生中断 |
Time stamp wrap around |
CFG_INT_EN[3] |
当时间戳计数器回绕时产生中断 |
Error detection |
CFG_INT_EN[4] |
当 CAN 总线上检测到错误时产生中断 |
Bus off |
CFG_INT_EN[5] |
当 CAN-FD 进入总线关闭状态时产生中断 |
Arbitration lost |
CFG_INT_EN[6] |
当 CAN-FD 丢失仲裁时产生中断 |
TX transmit complete |
CFG_INT_EN[7] |
当专用 TX 缓冲区的传输完成时产生中断 |
RX FIFO 0 new msg |
CFG_INT_EN[15] |
当新消息写入 Rx FIFO 0 时产生中断 |
RX FIFO 0 watermark |
CFG_INT_EN[16] |
当 RX FIFO 0 达到水位阈值时产生中断 |
RX FIFO 0 full |
CFG_INT_EN[17] |
当 RX FIFO 0 满时产生中断 |
RX FIFO 0 msg lost |
CFG_INT_EN[18] |
当 RX FIFO 0 消息丢失时产生中断 |
RX FIFO 1 new msg |
CFG_INT_EN[19] |
当新消息写入 Rx FIFO 1 时产生中断 |
RX FIFO 1 watermark |
CFG_INT_EN[20] |
当 RX FIFO 1 达到水位阈值时产生中断 |
RX FIFO 1 full |
CFG_INT_EN[21] |
当 RX FIFO 1 满时产生中断 |
RX FIFO 1 msg lost |
CFG_INT_EN[22] |
当 RX FIFO 1 消息丢失时产生中断 |
寄存器
寄存器及其对应偏移量
Offset |
Register Name |
Function Description |
|---|---|---|
0x0 |
CAN-FD_RELEASE |
CAN-FD 核心版本寄存器 |
0x4 |
CFG_MCR |
CAN-FD 主控寄存器 |
0x8 |
CFG_TEST |
CAN-FD 测试寄存器 |
0xC |
CFG_PSR |
CAN-FD 协议状态寄存器 |
0x10 |
CFG_MSR |
CAN-FD 主状态寄存器 |
0x14 |
CFG_GLOBAL_FILTER |
CAN-FD 全局过滤配置寄存器 |
0x18 |
CFG_ST_FILTER |
CAN-FD 标准 ID 过滤配置寄存器 |
0x1C |
CFG_EX_FILTER |
CAN-FD 扩展 ID 过滤配置寄存器 |
0x20 |
CFG_STIDM |
CAN-FD 标准 ID 和掩码寄存器 |
0x24 |
CFG_EXIDM |
CAN-FD 扩展 ID 和掩码寄存器 |
0x28 |
CFG_NBTR |
CAN-FD 名义比特定时寄存器 |
0x2C |
CFG_DBTR |
CAN-FD 数据比特定时寄存器 |
0x30 |
CFG_ISO_MODE |
ISO11898 模式寄存器 |
0x40 |
CFG_RXDATL_RSP |
CAN-FD Rx 低缓冲区 (0 to 31) 更新状态位 |
0x44 |
CFG_RXPATH_RSP |
CAN-FD Rx 高缓冲区 (32 to 63) 更新状态位 |
0x48 |
CFG_RXFIFO0 |
CAN-FD Rx FIFO 0 配置寄存器 |
0x4C |
CFG_RXFIFO0_STATUS |
CAN-FD Rx FIFO 0 状态寄存器 |
0x50 |
CFG_RXFIFO0_ACK |
CAN-FD Rx FIFO 0 应答寄存器 |
0x54 |
CFG_RXBUF |
CAN-FD Rx 缓冲区配置寄存器 |
0x58 |
CFG_RXFIFO1 |
CAN-FD Rx FIFO 1 配置寄存器 |
0x5C |
CFG_RXFIFO1_STATUS |
CAN-FD Rx FIFO 1 状态寄存器 |
0x60 |
CFG_RXFIFO1_ACK |
CAN-FD Rx FIFO 1 应答寄存器 |
0x64 |
CFG_RX_DSIZE |
CAN-FD Rx 缓冲区元素大小配置寄存器 |
0x70 |
CFG_TXBUF |
CAN-FD Tx 缓冲区配置寄存器 |
0x74 |
CFG_TXFIFO_STATUS |
CAN-FD Tx FIFO 状态寄存器 |
0x78 |
CFG_TX_DSIZE |
CAN-FD Tx 缓冲区元素大小配置寄存器 |
0x7C |
CFG_TXBAR |
CAN-FD Tx 缓冲区请求寄存器 |
0x80 |
CFG_TXABORT_REQ |
CAN-FD Tx 缓冲区中止请求寄存器 |
0x84 |
CFG_TXABORT_FINISH |
Tx 缓冲区中止完成寄存器 |
0x88 |
CFG_TXREQ_PENDING |
CAN-FD Tx 缓冲区请求挂起寄存器 |
0x8C |
CFG_TXB_TRANS |
CAN-FD Tx 缓冲区传输完成寄存器 |
0x90 |
CFG_TIME_STAMP |
时间戳寄存器 |
0x94 |
CFG_TIME_DIV |
时间戳计数器分频器 |
0x98 |
CFG_TRANS_DELAY_COMP |
发送延迟补偿寄存器 |
0x9C |
CFG_ESR |
CAN-FD 错误状态寄存器 |
0xA0 |
CFG_TRANS_ERR |
错误传输缓冲区编号 |
0xB4 |
CFG_INT_EN |
CAN-FD 中断使能寄存器 |
0xB8 |
CFG_INT_STATUS |
CAN-FD 中断状态寄存器 |
CAN-FD_RELEASE
Address offset: 0x0.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
VERSION |
31:0 |
RO |
0x0002_0200 |
版本号 |
CFG_MCR
Address offset: 0x4.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
ENABLE |
0 |
RW |
0x0 |
|
INITIAL_REQ |
1 |
RW |
0x0 |
|
SLEEP_REQ |
2 |
RW |
0x1 |
|
TDC_EN |
3 |
RW |
0x0 |
|
AUTO_RETRANS_EN |
4 |
RW |
0x0 |
|
Reserved |
5 |
/ |
0x0 |
/ |
TIMESTAMP_EN |
6 |
RW |
0x0 |
|
FD_EN |
7 |
RW |
0x0 |
|
BRS_EN |
8 |
RW |
0x0 |
|
TXPAUSE |
9 |
RW |
0x0 |
|
Reserved |
10 |
/ |
0x0 |
/ |
CLK_STOP_REQ |
11 |
RW |
0x0 |
|
CLK_STOP_ACK |
12 |
RO |
0x0 |
|
TX_PIN_PULL_UP |
13 |
RW |
0x1 |
|
RX_PIN_PULL_UP |
14 |
RW |
0x1 |
|
RESTRICTED_OPERATION |
15 |
RW |
0x0 |
|
BE_RECEIVER_IN_LOSS |
16 |
RW |
0x1 |
|
PROTOCOL_EXCEPTION_HANDLING |
18:17 |
RW |
0x1 |
|
Reserved |
31:19 |
/ |
0x0 |
/ |
CFG_TEST
Address offset: 0x8.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
LBKM |
0 |
RW |
0x0 |
|
SILM |
1 |
RW |
0x0 |
|
Reserved |
31:2 |
/ |
0x0 |
/ |
CFG_PSR
Address offset: 0xC.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
IDE |
0 |
W1C |
0x0 |
|
EDL |
1 |
W1C |
0x0 |
|
BRS |
2 |
W1C |
0x0 |
|
ESI |
3 |
W1C |
0x0 |
|
PXE |
4 |
W1C |
0x0 |
|
Reserved |
15:5 |
/ |
0x0 |
/ |
TRANS_DELAY_COMP |
22:16 |
RO |
0x0 |
|
Reserved |
31:23 |
/ |
0x0 |
/ |
CFG_MSR
Address offset: 0x10.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
TCB_FUNC_RESET_STATUS |
0 |
RO |
0x0 |
|
INITIAL_ACK |
1 |
RO |
0x0 |
|
SLEEP_ACK |
2 |
RO |
0x1 |
|
NORMAL_ACK |
3 |
RO |
0x0 |
|
WAKE_UP |
5 |
W1C |
0x0 |
|
TX_MODE |
6 |
RO |
0x0 |
|
RX_MODE |
7 |
RO |
0x0 |
|
RX_PREV_VALUE |
8 |
RO |
0x1 |
|
RX_BUS |
9 |
RO |
0x1 |
|
TX_BUF_IDX |
14:10 |
RO |
0x0 |
|
Reserved |
31:15 |
/ |
0x0 |
/ |
CFG_GLOBAL_FILTER
Address offset: 0x14.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
REJECT_EX_REMOTE |
0 |
RW |
0x0 |
|
REJECT_ST_REMOTE |
1 |
RW |
0x0 |
|
ACCEPT_MISS_EX_FRAME |
3:2 |
RW |
0x3 |
|
ACCEPT_MISS_ST_FRAME |
5:4 |
RW |
0x3 |
|
Reserved |
31:6 |
/ |
0x0 |
/ |
CFG_ST_FILTER
Address offset: 0x18.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
STFL_ADDR |
10:0 |
RW |
0x0 |
|
Reserved |
11 |
/ |
0x0 |
/ |
STFL_NUM |
19:12 |
RW |
0x0 |
|
Reserved |
31:20 |
/ |
0x0 |
/ |
CFG_EX_FILTER
Address offset: 0x1C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
EXFL_ADDR |
10:0 |
RW |
0x0 |
|
Reserved |
11 |
/ |
0x0 |
/ |
EXFL_NUM |
19:12 |
RW |
0x0 |
注意:每个扩展过滤器占用两个字(words)。 |
Reserved |
31:20 |
/ |
0x0 |
/ |
CFG_STIDM
Address offset: 0x20.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
SIDM |
10:0 |
RW |
0x7FF |
|
Reserved |
31:11 |
/ |
0x0 |
/ |
CFG_EXIDM
Address offset: 0x24.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
EIDM |
28:0 |
RW |
0xFFFFFFF |
|
Reserved |
31:29 |
/ |
0x0 |
/ |
CFG_NBTR
Address offset: 0x28.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
NBRP |
8:0 |
RW |
0x0 |
|
NTSEG1 |
16:9 |
RW |
0x3 |
|
NTSEG2 |
23:17 |
RW |
0x2 |
|
NSJW |
30:24 |
RW |
0x1 |
|
Reserved |
31 |
/ |
0x0 |
/ |
CFG_DBTR
Address offset: 0x2C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
DBRP |
4:0 |
RW |
0x0 |
|
DTSEG1 |
9:5 |
RW |
0x0 |
|
DTSEG2 |
13:10 |
RW |
0x0 |
|
DSJW |
17:14 |
RW |
0x0 |
|
Reserved |
31:18 |
/ |
0x0 |
/ |
CFG_ISO_MODE
Address offset: 0x30.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
ENABLE |
0 |
RW |
0x1 |
|
Reserved |
31:1 |
/ |
0x0 |
/ |
CFG_RXDATL_RSP
Address offset: 0x40.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
LOW |
31:0 |
W1C |
0x0 |
|
Reserved |
/ |
/ |
/ |
/ |
CFG_RXPATH_RSP
Address offset: 0x44.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
HIGH |
31:0 |
W1C |
0x0 |
|
Reserved |
/ |
/ |
/ |
/ |
CFG_RXFIFO0
Address offset: 0x48.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
RXFIFO0_ADDR |
10:0 |
RW |
0x0 |
|
Reserved |
11 |
/ |
0x0 |
/ |
RXFIFO0_NUM |
18:12 |
RW |
0x0 |
|
RXFIFO0_WM |
25:19 |
RW |
0x0 |
|
Reserved |
29:26 |
/ |
0x0 |
/ |
RXFIFO0_CLR |
30 |
WO |
0x0 |
|
RXFIFO0_OPM |
31 |
RW |
0x0 |
|
Reserved |
/ |
/ |
/ |
/ |
CFG_RXFIFO0_STATUS
Address offset: 0x4C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
Reserved |
0 |
/ |
0x0 |
/ |
RXFIFO0_ENTRY_NUM |
7:1 |
RO |
0x0 |
|
RXFIFO0_RPTR |
13:8 |
RO |
0x0 |
|
Reserved |
15:14 |
/ |
0x0 |
/ |
RXFIFO0_WPTR |
21:16 |
RO |
0x0 |
|
Reserved |
23:22 |
/ |
0x0 |
/ |
RXFIFO0_FULL |
24 |
RO |
0x0 |
|
RXFIFO0_LOST |
25 |
W1C |
0x0 |
|
Reserved |
31:26 |
/ |
0x0 |
/ |
RXFIFO0_ACK |
31 |
WO |
0x0 |
|
Reserved |
/ |
/ |
/ |
/ |
CFG_RXFIFO0_ACK
Address offset: 0x50.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
Reserved |
30:0 |
/ |
0x0 |
/ |
RXFIFO0_ACK |
31 |
WO |
0x0 |
|
Reserved |
/ |
/ |
/ |
/ |
CFG_RXBUF
Address offset: 0x54.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
RXBUF_ADDR |
10:0 |
RW |
0x0 |
|
Reserved |
31:11 |
/ |
0x0 |
/ |
CFG_RXFIFO1
Address offset: 0x58.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
RXFIFO1_ADDR |
10:0 |
RW |
0x0 |
|
Reserved |
11 |
/ |
0x0 |
/ |
RXFIFO1_NUM |
18:12 |
RW |
0x0 |
|
RXFIFO1_WM |
25:19 |
RW |
0x0 |
|
Reserved |
29:26 |
/ |
0x0 |
/ |
RXFIFO1_CLR |
30 |
WO |
0x0 |
|
RXFIFO1_OPM |
31 |
RW |
0x0 |
|
Reserved |
/ |
/ |
/ |
/ |
CFG_RXFIFO1_STATUS
Address offset: 0x5C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
Reserved |
0 |
/ |
0x0 |
/ |
RXFIFO1_ENTRY_NUM |
7:1 |
RO |
0x0 |
|
RXFIFO1_RPTR |
13:8 |
RO |
0x0 |
|
Reserved |
15:14 |
/ |
0x0 |
/ |
RXFIFO1_WPTR |
21:16 |
RO |
0x0 |
|
Reserved |
23:22 |
/ |
0x0 |
/ |
RXFIFO1_FULL |
24 |
RO |
0x0 |
|
RXFIFO1_LOST |
25 |
W1C |
0x0 |
|
Reserved |
31:26 |
/ |
0x0 |
/ |
CFG_RXFIFO1_ACK
Address offset: 0x60.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
Reserved |
30:0 |
/ |
0x0 |
/ |
RXFIFO1_ACK |
31 |
WO |
0x0 |
|
Reserved |
/ |
/ |
/ |
/ |
CFG_RX_DSIZE
Address offset: 0x64.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
F0_DSIZE |
20 |
RW |
0x0 |
|
Reserved |
3 |
/ |
0x0 |
/ |
F1_DSIZE |
6:4 |
RW |
0x0 |
|
RB_DSIZE |
10:8 |
RW |
0x0 |
|
Reserved |
31:11 |
/ |
0x0 |
/ |
CFG_TXBUF
Address offset: 0x70.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
TXBUF_ADDR |
10:0 |
RW |
0x0 |
|
Reserved |
31:11 |
/ |
0x0 |
/ |
CFG_TXFIFO_STATUS
Address offset: 0x74.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
TXFIFO_ADDR |
10:0 |
RW |
0x0 |
|
Reserved |
11 |
/ |
0x0 |
/ |
TXFIFO_NUM |
18:12 |
RW |
0x0 |
|
Reserved |
31:19 |
/ |
0x0 |
/ |
CFG_TX_DSIZE
Address offset: 0x78.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
TXB_DSIZE |
2:0 |
RW |
0x0 |
|
Reserved |
31:3 |
/ |
0x0 |
/ |
CFG_TXBAR
Address offset: 0x7C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
TXREQ |
31:0 |
WO |
0x0 |
|
Reserved |
/ |
/ |
/ |
/ |
CFG_TXABORT_REQ
Address offset: 0x80.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
REQ |
31:0 |
RW |
0x0 |
|
CFG_TXABORT_FINISH
Address offset: 0x84.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
FINISH |
31:0 |
W1C |
0x0 |
|
CFG_TXREQ_PENDING
Address offset: 0x88.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
REQ_PENDING |
31:0 |
W1C |
0x0 |
Note:该位仅对配置为 CFG_TXBC 的 Tx 缓冲区有效。 |
CFG_TXB_TRANS
Address offset: 0x8C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
TX_COMPLETE |
31:0 |
W1C |
0x0 |
|
CFG_TIME_STAMP
Address offset: 0x90.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
VALUE |
15:0 |
W1C |
0x0 |
|
Reserved |
31:16 |
/ |
0x0 |
/ |
CFG_TIME_DIV
Address offset: 0x94.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
DIV_NUM |
3:0 |
RW |
0x0 |
|
Reserved |
31:4 |
/ |
0x0 |
/ |
CFG_TRANS_DELAY_COMP
Address offset: 0x98.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
OPISFL_VALUE |
6:0 |
RW |
0x0 |
|
Reserved |
31:7 |
/ |
0x0 |
/ |
CFG_ESR
Address offset: 0x9C
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
TEC |
7:0 |
RO |
0x0 |
|
REC |
15:8 |
RO |
0x0 |
|
ERR_ACTIVE_FLAG |
16 |
RO |
0x1 |
|
ERR_PASS_FLAG |
17 |
RO |
0x0 |
|
BUS_OFF |
18 |
RO |
0x0 |
|
LEC |
21:19 |
W1C |
0x0 |
|
Reserved |
31:22 |
/ |
0x0 |
/ |
CFG_TRANS_ERR
Address offset: 0xA0
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
TX_NUM |
31:0 |
W1C |
0x0 |
|
Reserved |
/ |
/ |
/ |
/ |
CFG_INT_EN
Address offset: 0xB4
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
RXB_UPD_EN |
0 |
RW |
0x0 |
|
RXFF_OF_EN |
1 |
RW |
0x0 |
|
TXF_UF_EN |
2 |
RW |
0x0 |
|
TIME_STAMP_WRAP_EN |
3 |
RW |
0x0 |
|
ERROR_DET_INT_EN |
4 |
RW |
0x0 |
|
BUS_OFF_INT_EN |
5 |
RW |
0x0 |
|
ARBITRATION_LOST_INT_EN |
6 |
RW |
0x0 |
|
TX_TRANS_COMPLETE_EN |
7 |
RW |
0x0 |
|
Reserved |
14:8 |
/ |
0x0 |
/ |
RXP0_FILL_EN |
15 |
RW |
0x0 |
|
RXP0_WM_EN |
16 |
RW |
0x0 |
|
RXP0_FULL_EN |
17 |
RW |
0x0 |
|
RXP0_LOST_EN |
18 |
RW |
0x0 |
|
RXP1_FILL_EN |
19 |
RW |
0x0 |
|
RXP1_WM_EN |
20 |
RW |
0x0 |
|
RXP1_FULL_EN |
21 |
RW |
0x0 |
|
RXP1_LOST_EN |
22 |
RW |
0x0 |
|
Reserved |
31:23 |
/ |
0x0 |
/ |
CFG_INT_STATUS
Address offset: 0xB8
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
RXB_UPD_INT |
0 |
RO |
0x0 |
|
RXFF_OF_INT |
1 |
W1C |
0x0 |
|
TXF_UF_INT |
2 |
W1C |
0x0 |
|
TIME_STAMP_WRAP_INT |
3 |
W1C |
0x0 |
|
ERROR_DET_INT |
4 |
W1C |
0x0 |
|
BUS_OFF_INT |
5 |
W1C |
0x0 |
|
ARBITRATION_LOST_INT |
6 |
W1C |
0x0 |
|
TX_TRANS_COMPLETE_INT |
7 |
RO |
0x0 |
|
Reserved |
14:8 |
/ |
0x0 |
/ |
RXP0_FILL_INT |
15 |
W1C |
0x0 |
|
RXP0_WM_INT |
16 |
RO |
0x0 |
|
RXP0_FULL_INT |
17 |
RO |
0x0 |
|
RXP0_LOST_INT |
18 |
RO |
0x0 |
|
RXP1_WM_INT |
20 |
RO |
0x0 |
|
RXP1_FULL_INT |
21 |
RO |
0x0 |
|
RXP1_LOST_INT |
22 |
RO |
0x0 |
|
Reserved |
31:23 |
/ |
0x0 |
/ |