.. _ip_ls_intf_canfd: 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系统架构如图所示: .. figure:: /assets/images/canfd_arch.jpg :alt: canfd bus arch :height: 320px :align: center 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控制器建立高效的接口。 .. figure:: /assets/images/canfd_network.png :alt: canfd_network :height: 250px :align: center 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帧与变速帧的消息格式。 .. figure:: /assets/images/canfd_bit_fields.png :alt: canfd_bit_fields :height: 500px :align: center 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位为隐性时,进入和退出数据阶段的机制。 .. figure:: /assets/images/canfd_bit_rate_switching_mechanism.png :alt: canfd_bit_rate_switching_mechanism :height: 320px :align: center 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处于激活状态时,系统会将实际接收到的比特与延迟发送的比特进行比较,而延迟时间则根据测得的收发器环路延迟计算得出。 .. figure:: /assets/images/canfd_tx_loop_delay.png :alt: canfd_tx_loop_delay :height: 250px :align: center 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配置中列出的每个区域进行单独设置,且各区域的排列顺序亦无任何限制。 .. figure:: /assets/images/canfd_msg_ram_cfg.jpg :alt: canfd_msg_ram_cfg :height: 400px :align: center 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总线上的其他消息进行外部仲裁,并按标识符最低者(优先级最高)的顺序依次发送。专用发送缓冲区所需的内存大小取决于缓冲区中单个元素的大小,而单个缓冲区元素的大小则决定了该缓冲区包含的数据字节数。 .. figure:: /assets/images/canfd_txbuf_mechanism.png :alt: canfd_txbuf_mechanism :height: 500px :align: center 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] ================== ===================== ========================= ===================== ===================== 注意: 1. 当RTR(MB0[29])= 1时,CAN-FD将根据ISO11898-1标准发送远程帧,即便CFG_MCR.FD_EN已启用CAN FD格式的传输功能。 2. 发送缓冲区的ESI位与错误被动标志进行或运算,以决定所发送FD帧中ESI位的值。根据CAN FD协议规范的要求,错误主动节点可选择性地将ESI位发送为隐性状态,而错误被动节点则始终将ESI位发送为隐性状态。 ================== =================================================================== BIT Description ================== =================================================================== MB0[31] EDL: 扩展数据长度,该位用于区分 CAN 格式和 CAN FD 格式帧: - 0: 标准帧格式 - 1: 灵活数据速率帧格式 MB0[30] IDE: 扩展标识符: - 0: 11 位标准标识符 - 1: 29 位扩展标识符 MB0[29] RTR: 远程传输请求: - 0: 发送数据帧 - 1: 发送远程帧 MB0[28:0] 标识符: - [28:0]: 扩展标识符 - [28:18]: 标准标识符 MB1[31:22] 预留位,供未来使用 MB1[21] ESI: 错误状态指示器: - 0: 发送节点处于错误激活状态 - 1: 发送节点处于错误被动状态 MB1[20] BRS: 波特率切换: - 0: 帧接收时不进行波特率切换 - 1: 帧接收时进行波特率切换 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。 .. figure:: /assets/images/canfd_txfifo_mechanism.png :alt: canfd_txfifo_mechanism :height: 500px :align: center 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的用例。 .. figure:: /assets/images/canfd_txfifo_txbuf_mechanism.png :alt: canfd_txfifo_txbuf_mechanism :height: 150px :align: center CAN-FD 混合模式发送实例 在本示例中,各元素按以下顺序传输(假设所有专用发送缓冲区请求均已启用): 1. Tx缓冲区索引6(因为它是标识符为0且在所有专用Tx缓冲区中优先级最高的最旧待处理Tx FIFO) 2. Tx缓冲区索引4(标识符 = 3):它是所有其他专用Tx缓冲区中优先级最高的,并且其优先级高于最久待处理的Tx FIFO缓冲区——Tx缓冲区7。 3. Tx缓冲区索引3(标识符 = 4):它在所有其他专用Tx缓冲区中具有最高优先级,并且其优先级高于最旧的待处理Tx FIFO:Tx缓冲区7。 4. Tx缓冲区索引7(因为它是标识符为6且在所有专用Tx缓冲区中优先级最高的最旧待处理Tx FIFO) 5. Tx缓冲区索引8(因为它是标识符为5且在所有专用Tx缓冲区中优先级最高的最旧待处理Tx FIFO) 6. Tx 缓冲区索引 2(标识符 = 7:在所有其他专用 Tx 缓冲区中优先级最高) 7. Tx 缓冲区索引 0(标识符 = 8:在所有其他专用 Tx 缓冲区中优先级最高) 8. Tx 缓冲区索引 5(标识符 = 15:在所有其他专用 Tx 缓冲区中优先级最高) 9. 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位标识符)过滤的流程。 .. figure:: /assets/images/canfd_msg_id_match_sequence.jpg :alt: canfd_msg_id_match_sequence :height: 600px :align: center 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] 标准过滤器类型: - 00: 范围过滤器(从 SFID1 到 SFID2) - 01: 双 ID 过滤器(SFID1 或 SFID2) - 10: 经典过滤器(SFID1 = 过滤器,CFG_STIDM/SFID2[10:0] = 掩码) - 11: 预留,供未来使用 [29:28] 标准过滤器元素配置: - 00: 存储到 Rx FIFO 0(Rx FIFO0 应存在于 RAM 中) - 01: 存储到 Rx FIFO 1(Rx FIFO1 应存在于 RAM 中) - 10: 存储到 Rx 缓冲区(Rx Buffer 应存在于 RAM 中) - 11: 预留,供未来使用 [27] 预留位,供未来使用 [26:16] 标准过滤器 ID 1(SFID1) [15:11] 预留位,供未来使用 [10:0] 此位域的含义取决于 [29:28] 的配置: 1. 若消息存储到 Rx 缓冲区,[5:0] 定义了相对于 Rx 缓冲区起始地址 CFG_RXBUF_RXBUF_ADDR 的偏移量,用于存储匹配的消息。 - 寄存器 CFG_STIDM 用于标准过滤掩码。 - 因此,在 Rx 缓冲区模式下,标准过滤器类型 ([31:30]) 仅可为 2'b10。 2. 若消息存储到 Rx FIFO 0/1,[10:0] 定义了标准过滤器 ID 2(SFID2)或用于标准过滤掩码。 - 因此,在 Rx FIFO 模式下,标准过滤器类型 ([31:30]) 可为 2'b00、2'b01 或 2'b10。 ================== =================================================================== - CAN-FD 扩展消息ID过滤元件 扩展消息ID过滤 扩展消息ID过滤器,匹配序列:展示了扩展消息ID的流程(29位标识符滤波) .. figure:: /assets/images/canfd_msg_exid_match_sequence.jpg :alt: canfd_msg_exid_match_sequence :height: 600px :align: center 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] 扩展过滤器类型: - 00: 范围过滤器(从 SFID1 到 SFID2) - 01: 双 ID 过滤器(SFID1 或 SFID2) - 10: 经典过滤器(EXFID1 = 过滤器,CFG_EXIDM/SFID2[28:0] = 掩码) - 11: 预留,供未来使用 [29] 预留位,供未来使用 [28:0] 扩展过滤器 ID 1(EXFID1) ================== =================================================================== ================== =================================================================== BIT Description ================== =================================================================== [31:30] 扩展过滤器类型: - 00: 存储到 Rx FIFO 0(Rx FIFO0 应存在于 RAM 中) - 01: 存储到 Rx FIFO 1(Rx FIFO1 应存在于 RAM 中) - 10: 存储到 Rx 缓冲区(Rx Buffer 应存在于 RAM 中) - 11: 预留,供未来使用 [29] 预留位,供未来使用 [28:0] 此位域的含义取决于 [31:30] 的配置: 1. 若消息存储到 Rx 缓冲区,[5:0] 定义了相对于 Rx 缓冲区起始地址 CFG_RXBUF_RXBUF_ADDR 的偏移量,用于存储匹配的消息。 寄存器 CFG_EXIDM 用于扩展过滤掩码。 因此,在 Rx 缓冲区模式下,扩展过滤器类型 ([31:30]) 仅可为 2'b10。 2. 若消息存储到 Rx FIFO 0/1,[28:0] 定义了扩展过滤器 ID 2(SFID2)或用于扩展过滤掩码。 因此,在 Rx FIFO 模式下,扩展过滤器类型 ([31:30]) 可为 2'b00、2'b01 或 2'b10。 ================== =================================================================== - 专用接收缓冲区 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] RTR: 远程传输请求: - 0: 接收到的数据帧 - 1: 接收到的远程帧 MB0[29] IDE: 扩展标识符: - 0: 11 位标准标识符 - 1: 29 位扩展标识符 MB0[28:0] 标识符: [28:0]: 扩展标识符 [28:18]: 标准标识符 MB1[31] ANHF: 接受未命中帧: - 0: 接收到的帧匹配了某个 Rx 过滤器元素 - 1: 接收到的帧未匹配任何 Rx 过滤器元素 MB1[30:24] HF: 命中过滤器索引 MB1[23] 预留位,供未来使用 MB1[22] ESI: 错误状态指示器: - 0: 发送节点处于错误激活状态 - 1: 发送节点处于错误被动状态 MB1[21] EDL: 扩展数据长度,该位用于区分 CAN 格式和 CAN FD 格式帧: - 0: 标准帧格式 - 1: 灵活数据速率帧格式 MB1[20] BRS: 波特率切换: - 0: 帧接收时不进行波特率切换 - 1: 帧接收时进行波特率切换 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 进入低功耗模式 ---------------------- .. figure:: /assets/images/canfd_low_power_mode.png :alt: canfd_low_power_mode :height: 180px :align: center 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总线上的通信流量,而不会因显性位(应答位、错误帧)的发送而对其造成干扰。 .. figure:: /assets/images/canfd_silent_mode.jpg :alt: canfd_silent_mode :height: 250px :align: center CAN-FD 静默模式 ------------------- 环回模式 ------------------- CAN-FD可通过设置CAN_TEST寄存器中的LBKM位,被配置为环回模式。在环回模式下,CAN-FD会将自身发送的消息视为接收到的消息,并将其存储到接收RAM缓冲区中(前提是这些消息通过了验收滤波)。 此模式用于自检功能。为确保与外部事件完全隔离,CAN核心在环回模式下会忽略应答错误(即在数据帧或远程帧的应答槽中未采样到显性位)。在此模式下,CAN-FD将其实时输出端口的信号通过内部反馈直接送入其接收输入端。CAN-FD_RX输入引脚的实际电平值会被CAN-FD忽略。此时,发送的消息可通过CAN-FD_TX引脚进行监控。 .. figure:: /assets/images/canfd_loopback_mode.jpg :alt: canfd_loopback_mode :height: 250px :align: center CAN-FD 环回模式 ----------------------- 回环与静默模式相结合 ----------------------- 此外,还可通过设置CAN_TEST寄存器中的LBKM位和SILM位,将环回模式与静默模式相结合。该模式可用于“热自检”,即CAN-FD可像在环回模式下一样进行测试,但不会对连接至CAN_TX和CAN_RX引脚的运行中CAN系统造成任何影响。在此模式下,CAN_RX引脚与CAN-FD断开连接,而CAN_TX引脚则保持隐性状态。 .. figure:: /assets/images/canfd_loopback_silient_mode.jpg :alt: canfd_loopback_silient_mode :height: 250px :align: center 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个时间因子之间进行编程设置,但也可自动缩短,以补偿负相位漂移。 .. figure:: /assets/images/canfd_timing_gen.png :alt: canfd_timing_gen :height: 120px :align: center 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 XKAN 工作使能: - 0: XKAN 核心禁用 - 1: XKAN 核心使能 INITIAL_REQ 1 RW 0x0 初始化模式请求: 软件设置该位以请求 XKAN 硬件进入初始化模式, 用于初始化 XKAN 控制器。软件清除该位以切换硬件 进入正常模式。一旦连续监测到 11 个显性位, XKAN 硬件即被同步并准备进行发送和接收。 硬件通过清除 CFG_MSR 寄存器中的 INI_ACK 位来 通知该事件。 SLEEP_REQ 2 RW 0x1 睡眠模式请求: 该位由软件置位以请求 XKAN 硬件进入睡眠模式。 一旦当前 CAN 活动(发送或接收帧)完成,睡眠模式 即被启用。该位由软件清除以退出睡眠模式,或由硬 件在检测到 CFG_MSR.WAKE_UP 位被置位或接收到 SOF 位时清除。 TDC_EN 3 RW 0x0 收发器延迟补偿使能: - 0: 收发器延迟补偿禁用 - 1: 收发器延迟补偿使能 AUTO_RETRANS_EN 4 RW 0x0 自动重传使能: - 0: 禁用自动重传,未成功发送的消息(因仲裁丢失 或协议错误)不会被重发 - 1: 启用自动重传 Reserved 5 / 0x0 / TIMESTAMP_EN 6 RW 0x0 时间戳模式使能: - 0: 时间戳模式禁用 - 1: 时间戳模式使能 FD_EN 7 RW 0x0 灵活数据速率操作使能: - 0: 灵活数据速率操作禁用 - 1: 灵活数据速率操作使能 BRS_EN 8 RW 0x0 CAN 灵活数据速率切换: - 0: 发送时不进行波特率切换 - 1: 发送时进行波特率切换 TXPAUSE 9 RW 0x0 如果该位被置位,XKAN 在成功发送一帧后会暂停两个 CAN 比特时间,然后再开始下一帧的发送。 - 0: 禁用 - 1: 使能 Reserved 10 / 0x0 / CLK_STOP_REQ 11 RW 0x0 时钟停止请求: - 0: 不请求时钟停止 - 1: 请求时钟停止。当请求时钟停止时,首先置位 INIT,然后在所有挂起的传输请求完成后置位 CSA, 并且 CAN 总线处于空闲状态。 CLK_STOP_ACK 12 RO 0x0 时钟停止应答: - 0: 未确认时钟停止 - 1: XKAN 可能通过停止 icb 时钟和内核时钟 进入低功耗模式 TX_PIN_PULL_UP 13 RW 0x1 TX 引脚上拉使能: - 0: TX 引脚上拉禁用 - 1: TX 引脚上拉使能 RX_PIN_PULL_UP 14 RW 0x1 RX 引脚上拉使能: - 0: RX 引脚上拉禁用 - 1: RX 引脚上拉使能 RESTRICTED_OPERATION 15 RW 0x0 限制操作使能: - 0: 限制操作禁用 - 1: 限制操作使能 BE_RECEIVER_IN_LOSS 16 RW 0x1 仲裁丢失时进入接收模式: - 0: XKAN 将不接收当前帧,并保持 IDLE 状态 - 1: XKAN 将接收当前帧 PROTOCOL_EXCEPTION_HANDLING 18:17 RW 0x1 协议异常处理: 如果 XKAN 接收到一个 EDL 为隐性且 res (r0) 为隐性的帧, 其行为由本寄存器决定。 - 2'b00/1: XKAN 将此帧视为有效帧并确认 - 2'b01: XKAN 将此帧视为协议异常事件,但不确认 - 2'b10: XKAN 将此帧视为格式错误,并响应一个错误帧 Reserved 31:19 / 0x0 / =========================== ====== ======= ============= ==================================================================================================== - CFG_TEST Address offset: 0x8. ================== ====== ======= ============= =================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= =================================================================== LBKM 0 RW 0x0 回环模式使能: - 0: 回环模式禁用 - 1: 回环模式使能 SILM 1 RW 0x0 静默模式(调试): - 0: 正常操作 - 1: 静默模式 Reserved 31:2 / 0x0 / ================== ====== ======= ============= =================================================================== - CFG_PSR Address offset: 0xC. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== IDE 0 W1C 0x0 IDE 标志位,表示最后接收到的 CAN Flexible Data-Rate 消息是否设置了 IDE 位。 该位在检测到 IDE 时被置位,与接收过滤无关。 - 0: 最后接收到的 CAN 或 CAN FD 消息未设置 IDE 标志 - 1: 最后接收到的 CAN 或 CAN FD 消息设置了 IDE 标志 EDL 1 W1C 0x0 EDL 标志位,表示最后接收到的 CAN Flexible Data-Rate 消息是否设置了 EDL 位。 该位在检测到 EDL 时被置位,与接收过滤无关。 - 0: 自从该位被 CPU 清除后,尚未接收到任何 CAN FD 消息 - 1: 已接收到具有 EDL 标志的 CAN FD 消息 BRS 2 W1C 0x0 BRS 标志位,表示最后接收到的 CAN Flexible Data-Rate 消息是否设置了 BRS 位。 该位在检测到 BRS 时被置位,与接收过滤无关。 - 0: 最后接收到的 CAN FD 消息未设置 BRS 标志 - 1: 最后接收到的 CAN FD 消息设置了 BRS 标志 ESI 3 W1C 0x0 ESI 标志位,表示最后接收到的 CAN Flexible Data-Rate 消息是否设置了 ESI 位。 该位在检测到 ESI 时被置位,与接收过滤无关。 - 0: 最后接收到的 CAN FD 消息未设置 ESI 标志 - 1: 最后接收到的 CAN FD 消息设置了 ESI 标志 PXE 4 W1C 0x0 协议异常事件标志: - 0: 未发生协议异常事件 - 1: 发生了协议异常事件 Reserved 15:5 / 0x0 / TRANS_DELAY_COMP 22:16 RO 0x0 发送延迟补偿值: 定义次采样点的位置,由 XCAN_TX 到 XCAN_EX 的测量延迟 与 CFG_TRANS_DELAY_COMP_OFFSET_VALUE 的和决定。 SSP 位置(以时间量子 mq 为单位,mq 是 xkan 时钟的一个周期) 是从传输起始位到次采样点之间的数量。 有效值范围为 0 到 127 mq。 单位:一个 xkan_clk 周期 Reserved 31:23 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_MSR Address offset: 0x10. =========================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description =========================== ====== ======= ============= ==================================================================================================== TCB_FUNC_RESET_STATUS 0 RO 0x0 XKAN 功能复位状态: 由传输错误触发的硬件复位。 当功能单元(如 CAN 控制器)因未被确认的帧或传输中受干扰的帧而发生错误时, 将触发该时钟域的硬件复位。该位指示 XKAN 功能单元的状态。 - 0: XKAN 功能复位非激活 - 1: XKAN 功能复位激活 INITIAL_ACK 1 RO 0x0 初始化应答: 该位由硬件置位,通知软件 XKAN 硬件当前处于初始化模式。 该位响应软件在 CFG_MCR 寄存器中设置的 INITAL_REQ 位。 当 XKAN 硬件离开初始化模式(即在 CAN 总线上同步)后, 该位由硬件清除。 SLEEP_ACK 2 RO 0x1 睡眠应答: 该位由硬件置位,通知软件 XKAN 硬件当前处于睡眠模式。 该位响应软件在 CFG_MCR 寄存器中设置的 SLEEP_REQ 位。 当 XKAN 硬件离开睡眠模式(即在 CAN 总线上同步)后, 该位由硬件清除。 NORMAL_ACK 3 RO 0x0 正常模式应答: 该位由硬件置位,通知软件 XKAN 硬件当前处于正常模式。 该位在 XKAN 硬件离开正常模式后由硬件清除。 WAKE_UP 5 W1C 0x0 唤醒状态: 该位由硬件置位,表示在 XKAN 硬件处于睡眠模式期间检测到了 SOF 位。 该位由软件清除。 TX_MODE 6 RO 0x0 发送模式: XKAN 硬件当前是发送器。 RX_MODE 7 RO 0x0 接收模式: XKAN 硬件当前是接收器。 RX_PREV_VALUE 8 RO 0x1 RX 上一次值: 采样点采样的 RX 值(当前接收到的值)。 RX_BUS 9 RO 0x1 RX 总线状态: 监视 XKAN_RX 引脚的实际电平值。 TX_BUF_IDX 14:10 RO 0x0 TX 缓冲区索引: 当前传输的 TX 缓冲区索引(0~31)。 Reserved 31:15 / 0x0 / =========================== ====== ======= ============= ==================================================================================================== - CFG_GLOBAL_FILTER Address offset: 0x14. ========================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ========================== ====== ======= ============= ==================================================================================================== REJECT_EX_REMOTE 0 RW 0x0 拒绝扩展远程帧: - 0: 不拒绝 29 位扩展 ID 的远程帧 - 1: 拒绝所有具有 29 位扩展 ID 的远程帧 REJECT_ST_REMOTE 1 RW 0x0 拒绝标准远程帧: - 0: 不拒绝 11 位标准 ID 的远程帧 - 1: 拒绝所有具有 11 位标准 ID 的远程帧 ACCEPT_MISS_EX_FRAME 3:2 RW 0x3 接受未匹配的扩展帧(定义如何处理不匹配任何过滤列表元素的 29 位 ID 帧): - 2'b00: 接受并放入 Rx FIFO 0 - 2'b01: 接受并放入 Rx FIFO 1 - 2'b10: 被所有 FIFO 拒绝 - 2'b11: 被所有 FIFO 拒绝 ACCEPT_MISS_ST_FRAME 5:4 RW 0x3 接受未匹配的标准帧(定义如何处理不匹配任何过滤列表元素的 11 位 ID 帧): - 2'b00: 接受并放入 Rx FIFO 0 - 2'b01: 接受并放入 Rx FIFO 1 - 2'b10: 被所有 FIFO 拒绝 - 2'b11: 被所有 FIFO 拒绝 Reserved 31:6 / 0x0 / ========================== ====== ======= ============= ==================================================================================================== - CFG_ST_FILTER Address offset: 0x18. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== STFL_ADDR 10:0 RW 0x0 标准帧过滤器起始地址: 标准消息 ID 过滤列表的起始地址。 Reserved 11 / 0x0 / STFL_NUM 19:12 RW 0x0 标准帧过滤器数量(单位:字): - 0: 无标准消息 ID 过滤器 - 1~128: 标准消息 ID 过滤器元素数量 注意:每个标准过滤器占用一个字(word) Reserved 31:20 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_EX_FILTER Address offset: 0x1C. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== EXFL_ADDR 10:0 RW 0x0 扩展帧过滤器起始地址: 扩展消息 ID 过滤列表的起始地址。 Reserved 11 / 0x0 / EXFL_NUM 19:12 RW 0x0 扩展帧过滤器数量(单位:字): - 0: 无扩展消息 ID 过滤器 - 1~128: 扩展消息 ID 过滤器元素数量 注意:每个扩展过滤器占用两个字(words)。 Reserved 31:20 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_STIDM Address offset: 0x20. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== SIDM 10:0 RW 0x7FF 标准 ID 掩码: 用于标准帧的接收过滤。该掩码与接收到的帧的 ID 进行按位与操作, 只有当结果匹配预设的过滤值时,帧才被接受。 例如:若 SIDM = 0x7FF,则所有 11 位标准 ID 均通过过滤。 Reserved 31:11 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_EXIDM Address offset: 0x24. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== EIDM 28:0 RW 0xFFFFFFF 扩展 ID 掩码: 用于扩展帧的接收过滤。该掩码与接收到的帧的 ID 进行按位与操作, 只有当结果匹配预设的过滤值时,帧才被接受。 例如:若 EIDM = 0xFFFFFFF,则所有 29 位扩展 ID 均通过过滤。 Reserved 31:29 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_NBTR Address offset: 0x28. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== NBRP 8:0 RW 0x0 波特率预分频器: 这些位定义了名义时间量子(nominal time quanta)的长度。 tq = (NBRP[8:0] + 1) × ICAN_CLK NTSEG1 16:9 RW 0x3 名义时间段 1: 这些位定义了名义时间段 1 中的时间量子数量。 tBS1 = tq × (NTS1[7:0] + 1) NTSEG2 23:17 RW 0x2 名义时间段 2: 这些位定义了名义时间段 2 中的时间量子数量。 tBS2 = tq × (NTS2[7:0] + 1) NSJW 30:24 RW 0x1 名义比特重同步跳变宽度: NSJW[6:0] 应小于 NTSEG2[6:0]。 这些位定义了硬件允许拉长或缩短一个比特以实现再同步的最大时间量子数。 tRJW = tq × NSJW[6:0] Reserved 31 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_DBTR Address offset: 0x2C. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== DBRP 4:0 RW 0x0 数据比特预分频器: 这些位定义了数据时间量子(data time quanta)的长度。 tq = (DBRP[4:0] + 1) × ICAN_CLK DTSEG1 9:5 RW 0x0 数据时间段 1: 这些位定义了数据时间段 1 中的时间量子数量。 tBS1 = tq × (DTSEG1[4:0] + 1) DTSEG2 13:10 RW 0x0 数据时间段 2: 这些位定义了数据时间段 2 中的时间量子数量。 tBS2 = tq × (DTSEG2[3:0] + 1) DSJW 17:14 RW 0x0 数据比特重同步跳变宽度: DSJW[3:0] 应小于 DTSEG2[3:0]。 这些位定义了 CAN 硬件允许拉长或缩短一个比特以实现再同步的最大数据时间量子数。 tRJW = tq × DSJW[3:0] Reserved 31:18 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_ISO_MODE Address offset: 0x30. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== ENABLE 0 RW 0x1 ISO 11898 模式使能: - 0: CRC 计算遵循 BOSCH CAN with Flexible Data-Rate Specification Version 1.0; - 1: CRC 计算遵循 ISO 规范。 在 ISO 模式下: - CRC15 的初始值应为 (0,...,0),且单个 "1" 位于最高有效位位置; - 在 FD 帧中,3 位填充计数及其奇偶校验位应位于 CRC 字段的起始处; - 包括填充计数在内的比特流用于 CRC 计算。 在 BOSCH 模式下: - CRC15、CRC17 和 CRC21 的初始值均为 (0,...,0); - 在 FD 帧中,CRC 字段起始处无填充计数。 Reserved 31:1 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_RXDATL_RSP Address offset: 0x40. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== LOW 31:0 W1C 0x0 接收缓冲区低数据标志响应: 该寄存器保存接收缓冲区 0 至 31 的新数据标志。 当对应的 Rx 缓冲区被接收到的新帧更新时,对应标志位被置位。 标志位保持置位状态,直到主机将其清除。 通过向相应位写入 1 来清除标志。 写入 0 无效。硬复位将清除整个寄存器。 - 0: Rx 缓冲区未更新 - 1: Rx 缓冲区已从新到来的消息中更新 Reserved / / / / ================== ====== ======= ============= ==================================================================================================== - CFG_RXPATH_RSP Address offset: 0x44. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== HIGH 31:0 W1C 0x0 接收缓冲区高数据标志响应: 该寄存器保存接收缓冲区 31 至 63 的新数据标志。 当对应的 Rx 缓冲区被接收到的新帧更新时,对应标志位被置位。 标志位保持置位状态,直到主机将其清除。 通过向相应位写入 1 来清除标志。 写入 0 无效。硬复位将清除整个寄存器。 - 0: Rx 缓冲区未更新 - 1: Rx 缓冲区已从新到来的消息中更新 Reserved / / / / ================== ====== ======= ============= ==================================================================================================== - CFG_RXFIFO0 Address offset: 0x48. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== RXFIFO0_ADDR 10:0 RW 0x0 Rx FIFO 0 起始地址: 消息 RAM 中 Rx FIFO 0 的起始地址。 Reserved 11 / 0x0 / RXFIFO0_NUM 18:12 RW 0x0 Rx FIFO 0 大小: - 0: 无 Rx FIFO 0 - 1~64: Rx FIFO 0 元素数量 Rx FIFO 0 的元素索引范围为 0 到 FOS-1。 RXFIFO0_WM 25:19 RW 0x0 FIFO 0 水印: - 0: 水印中断禁用 - 1~64: Rx FIFO 0 水印中断触发级别 - >64: 水印中断禁用 Reserved 29:26 / 0x0 / RXFIFO0_CLR 30 WO 0x0 FIFO 0 清除: 当软件写入 "1" 到此位时,Rx FIFO 0 的状态将全部返回默认值。 RXFIFO0_OPM 31 RW 0x0 FIFO 0 操作模式: - 0: FIFO 0 阻塞模式 - 1: FIFO 0 覆盖模式 Reserved / / / / ================== ====== ======= ============= ==================================================================================================== - CFG_RXFIFO0_STATUS Address offset: 0x4C. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== Reserved 0 / 0x0 / RXFIFO0_ENTRY_NUM 7:1 RO 0x0 Rx FIFO 0 元素数量: 存储在 Rx FIFO 0 中的元素数量,范围 0 到 64。 RXFIFO0_RPTR 13:8 RO 0x0 Rx FIFO 0 读指针: Rx FIFO 0 的读索引指针,范围 0 到 63。 Reserved 15:14 / 0x0 / RXFIFO0_WPTR 21:16 RO 0x0 Rx FIFO 0 写指针: Rx FIFO 0 的写索引指针,范围 0 到 63。 Reserved 23:22 / 0x0 / RXFIFO0_FULL 24 RO 0x0 Rx FIFO 0 是否满: - 0: Rx FIFO 0 不满 - 1: Rx FIFO 0 已满 RXFIFO0_LOST 25 W1C 0x0 Rx FIFO 0 消息丢失: - 0: 无 Rx FIFO 0 消息丢失 - 1: Rx FIFO 0 消息丢失,可通过软件写入 "1" 清除 注意:此位可由两个源触发: - 当 Rx FIFO 0 处于阻塞模式时,若新 CAN 帧到达而 FIFO 为空,则该位被置位(表示“待处理”); - 当 Rx FIFO 0 处于覆盖模式且已满时,若新 CAN 帧到达,则最旧条目被覆盖,该位被置位。 Reserved 31:26 / 0x0 / RXFIFO0_ACK 31 WO 0x0 Rx FIFO 0 应答: 当主机从 RXFIFO0 中读取一条消息或一系列消息后,必须写入此位以确认。 此操作会将 RXFIFO0 的读指针(CFG_RXFIFO0_STATUS.RXFIFO0_RPTR)移动到下一个地址,并更新 Rx FIFO 0 的填充级别(CFG_RXFIFO0_STATUS.RXFIFO0_ENTRY_NUM)。 Reserved / / / / ================== ====== ======= ============= ==================================================================================================== - CFG_RXFIFO0_ACK Address offset: 0x50. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== Reserved 30:0 / 0x0 / RXFIFO0_ACK 31 WO 0x0 Rx FIFO 0 应答: 当主机从 RXFIFO0 中读取一条消息或一系列消息后,必须写入此位以确认。 此操作会将 RXFIFO0 的读指针(CFG_RXFIFO0_STATUS.RXFIFO0_RPTR)移动到下一个地址, 并更新 Rx FIFO 0 的填充级别(CFG_RXFIFO0_STATUS.RXFIFO0_ENTRY_NUM)。 Reserved / / / / ================== ====== ======= ============= ==================================================================================================== - CFG_RXBUF Address offset: 0x54. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== RXBUF_ADDR 10:0 RW 0x0 Rx 缓冲区起始地址: 消息 RAM 中 Rx 缓冲区部分的起始地址。 Reserved 31:11 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_RXFIFO1 Address offset: 0x58. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== RXFIFO1_ADDR 10:0 RW 0x0 Rx FIFO 1 起始地址: 消息 RAM 中 Rx FIFO 1 的起始地址。 Reserved 11 / 0x0 / RXFIFO1_NUM 18:12 RW 0x0 Rx FIFO 1 大小: - 0: 无 Rx FIFO 1 - 1~64: Rx FIFO 1 元素数量 Rx FIFO 1 的元素索引范围为 0 到 FOS-1。 RXFIFO1_WM 25:19 RW 0x0 FIFO 1 水印: - 0: 水印中断禁用 - 1~64: Rx FIFO 1 水印中断触发级别 - >64: 水印中断禁用 Reserved 29:26 / 0x0 / RXFIFO1_CLR 30 WO 0x0 FIFO 1 清除: 当软件写入 "1" 到此位时,Rx FIFO 1 的状态将全部返回默认值。 RXFIFO1_OPM 31 RW 0x0 FIFO 1 操作模式: - 0: FIFO 1 阻塞模式 - 1: FIFO 1 覆盖模式 Reserved / / / / ================== ====== ======= ============= ==================================================================================================== - CFG_RXFIFO1_STATUS Address offset: 0x5C. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== Reserved 0 / 0x0 / RXFIFO1_ENTRY_NUM 7:1 RO 0x0 Rx FIFO 1 元素数量: 存储在 Rx FIFO 1 中的元素数量,范围 0 到 64。 RXFIFO1_RPTR 13:8 RO 0x0 Rx FIFO 1 读指针: Rx FIFO 1 的读索引指针,范围 0 到 63。 Reserved 15:14 / 0x0 / RXFIFO1_WPTR 21:16 RO 0x0 Rx FIFO 1 写指针: Rx FIFO 1 的写索引指针,范围 0 到 63。 Reserved 23:22 / 0x0 / RXFIFO1_FULL 24 RO 0x0 Rx FIFO 1 是否满: - 0: Rx FIFO 1 不满 - 1: Rx FIFO 1 已满 RXFIFO1_LOST 25 W1C 0x0 Rx FIFO 1 消息丢失: - 0: 无 Rx FIFO 1 消息丢失 - 1: Rx FIFO 1 消息丢失,可通过软件写入 "1" 清除 注意:此位可由两个源触发: - 当 Rx FIFO 1 处于阻塞模式时,若新 CAN 帧到达而 FIFO 为空,则该位被置位(表示“待处理”); - 当 Rx FIFO 1 处于覆盖模式且已满时,若新 CAN 帧到达,则最旧条目被覆盖,该位被置位。 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 Rx FIFO 1 应答: 当主机从 RXFIFO1 中读取一条消息或一系列消息后,必须写入此位以确认。 此操作会将 RXFIFO1 的读指针(CFG_RXFIFO1_STATUS.RXFIFO1_RPTR)移动到下一个地址, 并更新 Rx FIFO 1 的填充级别(CFG_RXFIFO1_STATUS.RXFIFO1_ENTRY_NUM)。 Reserved / / / / ================== ====== ======= ============= ==================================================================================================== - CFG_RX_DSIZE Address offset: 0x64. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== F0_DSIZE 20 RW 0x0 Rx FIFO 0 数据字段大小: - 'b000: 8 字节数据字段 - 'b001: 12 字节数据字段 - 'b010: 16 字节数据字段 - 'b011: 20 字节数据字段 - 'b100: 24 字节数据字段 - 'b101: 32 字节数据字段 - 'b110: 48 字节数据字段 - 'b111: 64 字节数据字段 Reserved 3 / 0x0 / F1_DSIZE 6:4 RW 0x0 Rx FIFO 1 数据字段大小: - 'b000: 8 字节数据字段 - 'b001: 12 字节数据字段 - 'b010: 16 字节数据字段 - 'b011: 20 字节数据字段 - 'b100: 24 字节数据字段 - 'b101: 32 字节数据字段 - 'b110: 48 字节数据字段 - 'b111: 64 字节数据字段 RB_DSIZE 10:8 RW 0x0 Rx 缓冲区数据字段大小: - 'b000: 8 字节数据字段 - 'b001: 12 字节数据字段 - 'b010: 16 字节数据字段 - 'b011: 20 字节数据字段 - 'b100: 24 字节数据字段 - 'b101: 32 字节数据字段 - 'b110: 48 字节数据字段 - 'b111: 64 字节数据字段 Reserved 31:11 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_TXBUF Address offset: 0x70. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== TXBUF_ADDR 10:0 RW 0x0 发送缓冲区起始地址: 消息 RAM 中 Tx 缓冲区部分的起始地址。 Reserved 31:11 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_TXFIFO_STATUS Address offset: 0x74. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== TXFIFO_ADDR 10:0 RW 0x0 Tx FIFO 起始地址: 消息 RAM 中 Tx FIFO 的起始地址。 Reserved 11 / 0x0 / TXFIFO_NUM 18:12 RW 0x0 Tx FIFO 大小: - 0: 无 Tx FIFO - 1~32: Tx FIFO 元素数量 Tx FIFO 元素索引范围为 0 到 FOS-1。 Reserved 31:19 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_TX_DSIZE Address offset: 0x78. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== TXB_DSIZE 2:0 RW 0x0 Tx 缓冲区数据字段大小: - 'b000: 8 字节数据字段 - 'b001: 12 字节数据字段 - 'b010: 16 字节数据字段 - 'b011: 20 字节数据字段 - 'b100: 24 字节数据字段 - 'b101: 32 字节数据字段 - 'b110: 48 字节数据字段 - 'b111: 64 字节数据字段 Reserved 31:3 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_TXBAR Address offset: 0x7C. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== TXREQ 31:0 WO 0x0 发送请求: 向对应位写入 "1" 将触发对应 Tx 缓冲区或 Tx FIFO 条目的发送请求。 写入 "0" 无效。该寄存器为只写(WO),读操作返回未定义值。 Reserved / / / / ================== ====== ======= ============= ==================================================================================================== - CFG_TXABORT_REQ Address offset: 0x80. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== REQ 31:0 RW 0x0 每个 Tx 缓冲区拥有自己的取消请求位。 向对应位写入 "1" 将设置该缓冲区的取消请求; 写入 "0" 无影响。 当当前帧传输完成后,该位被自动清除。 - 0: 无取消请求 - 1: 取消请求待处理 Note: 1. 正在等待传输的帧(对应 CFG_TXREQ_PENDING 位)不能被中止。 2. 中止功能不适用于 Tx FIFO 操作。 ================== ====== ======= ============= ==================================================================================================== - CFG_TXABORT_FINISH Address offset: 0x84. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== FINISH 31:0 W1C 0x0 每个 Tx 缓冲区拥有自己的中止完成位。 通过 CFG_TXABORT_REQ 请求的位将在当前帧传输完成后被置位。 该位在以下情况被清除: - 发起新的传输请求(通过写入 CFG_TXBAR) - 或向对应位写入 "1" 到 CFG_TXABORT_FINISH 寄存器 - 或软件写 "1" 清除此位 - 0: 未完成中止操作 - 1: 中止操作已完成 ================== ====== ======= ============= ==================================================================================================== - CFG_TXREQ_PENDING Address offset: 0x88. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== REQ_PENDING 31:0 W1C 0x0 每个 Tx 缓冲区拥有自己的发送请求挂起位。 该位通过 CFG_TXBAR 寄存器设置。 当 CFG_TXBAR 被置位时,TX 扫描开始检查 CFG_TXBAR,从最高优先级(最低消息 ID)的 Tx 缓冲区开始扫描。 当某个缓冲区被选中后,其对应的 CFG_TXREQ_PENDING 位将被置位。 该位在以下情况被清除: - 发送请求完成 - 或软件写 "1" 到此位 - 0: 无发送请求挂起 - 1: 发送请求挂起 Note:该位仅对配置为 CFG_TXBC 的 Tx 缓冲区有效。 ================== ====== ======= ============= ==================================================================================================== - CFG_TXB_TRANS Address offset: 0x8C. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== TX_COMPLETE 31:0 W1C 0x0 每个 Tx 缓冲区拥有自己的传输完成位。 当一次成功的传输完成后,该位被置位(对应 CFG_TXBAR.TX_REQ 位)。 该位在以下情况被清除: - 发起新的传输请求(通过写入 CFG_TXBAR 对应位) - 或软件写 "1" 到此位 - 0: 未发生传输 - 1: 传输已成功完成 ================== ====== ======= ============= ==================================================================================================== - CFG_TIME_STAMP Address offset: 0x90. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== VALUE 15:0 W1C 0x0 该字段包含在帧传输结束(EOF)时捕获的 16 位定时器值。 软件可通过向该字段写入 0xFFFF 来清除此值。 Reserved 31:16 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_TIME_DIV Address offset: 0x94. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== DIV_NUM 3:0 RW 0x0 时间戳计数器分频器: 配置时间戳和超时计数器的时间单位为 CAN 比特时间的倍数。 - 0: div 1 - 1: div 2 - 2: div 3 - ... - 15: div 16 Reserved 31:4 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_TRANS_DELAY_COMP Address offset: 0x98. ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== OPISFL_VALUE 6:0 RW 0x0 发送延迟补偿偏移值: 定义从 XKAN_TX 到 XKAN_RX 的传输延迟与次采样点之间的距离。 单位:一个 xkan_clk 周期。 Reserved 31:7 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_ESR Address offset: 0x9C ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== TEC 7:0 RO 0x0 发送错误计数器: 实际的发送错误计数器状态,取值范围为 0 到 256。 REC 15:8 RO 0x0 接收错误计数器: 实际的接收错误计数器状态,取值范围为 0 到 128。 ERR_ACTIVE_FLAG 16 RO 0x1 错误激活标志: 当 XKAN 处于错误激活状态时,由硬件置位。 ERR_PASS_FLAG 17 RO 0x0 错误被动标志: 当 XKAN 处于错误被动状态时,由硬件置位。 BUS_OFF 18 RO 0x0 总线关闭标志: 当 XKAN 进入总线关闭状态时,由硬件置位。 该状态在 TEC > 255 时被触发。 总线关闭状态由软件通过复位或特定恢复流程解除。 LEC 21:19 W1C 0x0 最后错误代码: 此字段由硬件设置,保存在 CAN 总线上检测到的最后一次错误条件的代码。 若消息无错误地传输(接收或发送),此字段将被清零("0")。 LEC[2:0] 可由软件设置为 0b111 以更新当前通信状态。 各编码含义如下: - 'b000: 无错误 - 'b001: 填充错误 (Stuff Error) - 'b010: 格式错误 (Form Error) - 'b011: 确认错误 (Acknowledgment Error) - 'b100: 比特支配错误 (Bit recessive error, xkan send recessive bit, but read back is dominant bit) - 'b101: 比特主导错误 (Bit dominant error, xkan send dominant bit, but read back is recessive bit) - 'b110: CRC 错误 (CRC Error) Reserved 31:22 / 0x0 / ================== ====== ======= ============= ==================================================================================================== - CFG_TRANS_ERR Address offset: 0xA0 ================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ================== ====== ======= ============= ==================================================================================================== TX_NUM 31:0 W1C 0x0 发送缓冲区索引: 当对应的 Tx 缓冲区开始传输时,由硬件自动设置该位。 当软件向对应位写入 "1" 时,该位被清除。 此位用于指示当前正在传输的 Tx 缓冲区索引。 Reserved / / / / ================== ====== ======= ============= ==================================================================================================== - CFG_INT_EN Address offset: 0xB4 ============================== ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ============================== ====== ======= ============= ==================================================================================================== RXB_UPD_EN 0 RW 0x0 Rx 缓冲区更新中断使能: - 0: 中断禁用 - 1: 中断使能 RXFF_OF_EN 1 RW 0x0 Rx CDE FIFO 溢出中断使能: - 0: 中断禁用 - 1: 中断使能 TXF_UF_EN 2 RW 0x0 Tx CDE FIFO 下溢中断使能: - 0: 中断禁用 - 1: 中断使能 TIME_STAMP_WRAP_EN 3 RW 0x0 时间戳计数器回绕中断使能: - 0: 中断禁用 - 1: 中断使能 ERROR_DET_INT_EN 4 RW 0x0 错误检测中断使能: - 0: 中断禁用 - 1: 中断使能 BUS_OFF_INT_EN 5 RW 0x0 总线关闭中断使能: - 0: 中断禁用 - 1: 中断使能 ARBITRATION_LOST_INT_EN 6 RW 0x0 仲裁丢失中断使能: 当 XKAN 在消息传输过程中由于失去仲裁而导致消息发送失败时, 硬件会设置该标志位。 此中断可用于通知软件发生了仲裁丢失事件。 - 0: 中断禁用 - 1: 中断使能 TX_TRANS_COMPLETE_EN 7 RW 0x0 发送完成中断使能: - 0: 中断禁用 - 1: 中断使能 Reserved 14:8 / 0x0 / RXP0_FILL_EN 15 RW 0x0 Rx FIFO0 新消息写入中断使能: - 0: 中断禁用 - 1: 中断使能 RXP0_WM_EN 16 RW 0x0 Rx FIFO0 水位到达中断使能: - 0: 中断禁用 - 1: 中断使能 RXP0_FULL_EN 17 RW 0x0 Rx FIFO0 全满中断使能: - 0: 中断禁用 - 1: 中断使能 RXP0_LOST_EN 18 RW 0x0 Rx FIFO0 消息丢失中断使能: - 0: 中断禁用 - 1: 中断使能 RXP1_FILL_EN 19 RW 0x0 Rx FIFO1 新消息写入中断使能: - 0: 中断禁用 - 1: 中断使能 RXP1_WM_EN 20 RW 0x0 Rx FIFO1 水位到达中断使能: - 0: 中断禁用 - 1: 中断使能 RXP1_FULL_EN 21 RW 0x0 Rx FIFO1 全满中断使能: - 0: 中断禁用 - 1: 中断使能 RXP1_LOST_EN 22 RW 0x0 Rx FIFO1 消息丢失中断使能: - 0: 中断禁用 - 1: 中断使能 Reserved 31:23 / 0x0 / ============================== ====== ======= ============= ==================================================================================================== - CFG_INT_STATUS Address offset: 0xB8 ============================ ====== ======= ============= ==================================================================================================== Field Bit Access Reset Value Description ============================ ====== ======= ============= ==================================================================================================== RXB_UPD_INT 0 RO 0x0 Rx 缓冲区更新中断状态: - 0: 中断未发生 - 1: 中断已发生 RXFF_OF_INT 1 W1C 0x0 Rx CDE FIFO 溢出中断状态: - 0: 中断未发生 - 1: 中断已发生 注意:此位由硬件置位,软件写 "1" 清除。 TXF_UF_INT 2 W1C 0x0 Tx CDE FIFO 下溢中断状态: - 0: 中断未发生 - 1: 中断已发生 注意:此位由硬件置位,软件写 "1" 清除。 TIME_STAMP_WRAP_INT 3 W1C 0x0 时间戳计数器回绕中断状态: - 0: 中断未发生 - 1: 中断已发生 注意:此位由硬件置位,软件写 "1" 清除。 ERROR_DET_INT 4 W1C 0x0 错误检测中断状态: - 0: 中断未发生 - 1: 中断已发生 注意:此位由硬件置位,软件写 "1" 清除。 BUS_OFF_INT 5 W1C 0x0 总线关闭中断状态: - 0: 中断未发生 - 1: 中断已发生 注意:此位由硬件置位,软件写 "1" 清除。 ARBITRATION_LOST_INT 6 W1C 0x0 仲裁丢失中断状态: - 0: 中断未发生 - 1: 中断已发生 注意:此位由硬件置位,软件写 "1" 清除。 TX_TRANS_COMPLETE_INT 7 RO 0x0 发送完成中断状态: 当消息成功传输或由于错误、仲裁失败等原因终止时, 硬件会设置该标志。 - 0: 中断未发生 - 1: 中断已发生 Reserved 14:8 / 0x0 / RXP0_FILL_INT 15 W1C 0x0 Rx FIFO0 新消息写入中断状态: - 0: 中断未发生 - 1: 中断已发生 注意:此位由硬件置位,软件写 "1" 清除。 RXP0_WM_INT 16 RO 0x0 Rx FIFO0 水位到达中断状态: - 0: 中断未发生 - 1: 中断已发生 RXP0_FULL_INT 17 RO 0x0 Rx FIFO0 全满中断状态: - 0: 中断未发生 - 1: 中断已发生 RXP0_LOST_INT 18 RO 0x0 Rx FIFO0 消息丢失中断状态: - 0: 中断未发生 - 1: 中断已发生 RXP1_WM_INT 20 RO 0x0 Rx FIFO1 水位到达中断状态: - 0: 中断未发生 - 1: 中断已发生 RXP1_FULL_INT 21 RO 0x0 Rx FIFO1 全满中断状态: - 0: 中断未发生 - 1: 中断已发生 RXP1_LOST_INT 22 RO 0x0 Rx FIFO1 消息丢失中断状态: - 0: 中断未发生 - 1: 中断已发生 Reserved 31:23 / 0x0 / ============================ ====== ======= ============= ====================================================================================================