DCAN控制器核心机制解析:消息传输、中断处理与低功耗设计

发布时间:2026/7/18 11:34:34
DCAN控制器核心机制解析:消息传输、中断处理与低功耗设计 1. DCAN控制器核心工作机制与设计思路在嵌入式系统尤其是汽车电子和工业控制领域控制器局域网Controller Area Network, CAN总线是连接各个电子控制单元ECU的“神经系统”。而DCANDual CAN Controller作为德州仪器TI等厂商提供的一种CAN控制器IP核其设计精髓在于如何高效、可靠地管理这条“神经”上的信息流同时兼顾系统的实时响应与功耗控制。理解DCAN不能只停留在寄存器配置的层面更需要从系统设计者的角度去剖析其消息传输、中断处理与电源管理三大核心机制背后的逻辑。为什么需要如此复杂的机制想象一下一辆现代汽车从发动机控制、变速箱换挡到车窗升降数十个ECU需要实时交换数据。这些数据有的关乎安全如刹车信号要求极低的延迟和100%的可靠性有的则不那么紧急如空调温度设定可以适当容忍延迟。DCAN的设计目标就是在一个共享的、带宽有限的物理总线上优雅地处理这些优先级各异、实时性要求不同的通信任务。它通过“消息对象”这一抽象概念将复杂的网络通信简化为对内存中特定数据结构的配置与访问从而让CPU能够以接近操作本地内存的效率来管理复杂的网络通信。其核心设计思路可以概括为“硬件加速事件驱动状态可管”。硬件加速体现在消息的过滤、仲裁、发送和接收均由DCAN控制器硬件自动完成极大减轻了CPU负担。事件驱动则通过中断机制让CPU无需持续轮询总线状态仅在消息成功发送/接收、总线出错等关键事件发生时才被唤醒处理提高了系统效率。状态可管则通过精细的电源模式控制允许系统在空闲时进入低功耗状态并在总线活动时快速唤醒这对于依赖电池供电的汽车和物联网设备至关重要。接下来我们将深入这三个核心部分的每一个细节。2. 消息传输机制从对象配置到总线仲裁消息传输是DCAN最基础也是最核心的功能。与简单的UART“一发一收”不同CAN总线是多主、广播式的。DCAN通过一套基于“消息对象”的邮箱机制将复杂的网络协议处理对上层软件透明化。2.1 消息对象CAN通信的硬件邮箱消息对象Message Object是DCAN硬件中用于存储单条CAN报文所有信息的存储单元。你可以将其理解为一个预先配置好的硬件邮箱。每个消息对象包含以下关键部分仲裁区Arbitration存储CAN报文的ID标识符和IDE扩展标识符位。ID决定了报文的优先级和过滤条件。控制区Control包含DLC数据长度码、消息方向发送/接收、中断使能位TxIE, RxIE以及消息有效位MsgVal等。数据区Data最多存储8个字节的有效载荷数据。DCAN控制器通常提供32、64或128个这样的消息对象。初始化阶段软件需要为每一个需要使用的消息对象配置其仲裁和控制参数。例如将ID为0x100的消息对象配置为接收对象并启用接收中断RxIE1。一旦配置完成并置位MsgVal这个“邮箱”就激活了硬件会自动处理与之匹配的报文。注意消息对象的配置必须在初始化模式Init1且配置使能CCE1下进行。配置完成后清除Init位DCAN才会开始总线同步并参与通信。这是一个常见的“坑点”若未退出初始化模式就尝试通信会导致总线无任何活动。2.2 消息传输的两种CPU交互模式CPU如何知道一个消息对象是收到了新数据还是已经成功发送DCAN提供了两种模式中断模式和轮询模式。选择哪种取决于系统对实时性和CPU负载的权衡。中断模式是事件驱动型应用的标配。当某个使能了中断的消息对象完成事件如成功接收或发送后其IntPnd中断挂起位会被硬件自动置1。此时如果全局中断使能位IE0或IE1也已打开DCAN便会向CPU发出中断请求。CPU进入中断服务程序后通过读取中断寄存器INT可以快速获知是哪个消息对象触发了中断Int0ID或Int1ID字段的值即为消息对象编号从而进行针对性的处理。处理完毕后通常通过写IFx命令寄存器的ClrIntPnd位来清除该中断挂起标志。轮询模式则更适用于实时性要求相对宽松或CPU负载较轻的场景。在这种模式下CPU需要定期例如在主循环中查询一系列状态寄存器NewDat位位于消息对象控制段或汇总在NWDAT_X寄存器中。该位为1表示对应消息对象收到了新数据。TxRqst位位于消息对象控制段或汇总在TXRQ_X寄存器中。该位为1表示对应消息对象有数据等待发送通常由软件置位发送成功后由硬件清零。通过并行读取这些位状态寄存器CPU可以批量检查多个消息对象的状态。为了提高轮询效率一个实用的软件技巧是将所有的发送对象配置在编号较小的消息对象如1-16将所有的接收对象配置在编号较大的消息对象如17-32。这样在轮询时软件可以更有针对性地检查相关区域的状态位减少不必要的判断。2.3 自动重传与总线错误恢复CAN总线是可靠的但物理环境并非完美。电磁干扰、线路故障都可能导致传输错误。DCAN严格遵循ISO11898标准实现了完善的错误处理和恢复机制。自动重传是默认开启的DAR位为0。其逻辑是如果一帧报文因为丢失仲裁与其他更高优先级报文冲突或传输过程中被检测到错误而发送失败DCAN控制器会自动重新尝试发送该帧直到成功为止。这意味着对于发送方软件而言一旦置位了某个消息对象的TxRqst位就可以认为这帧数据“终将”被发送出去无需软件干预重试。只有在需要实现特定非标准通信模式如单次发送时才会通过置位DAR来禁用此功能。总线关闭Bus-Off与恢复是CAN节点最严重的错误状态。当某个节点的发送错误计数器累积超过255时该节点会进入“Bus-Off”状态自动与总线隔离停止一切发送活动以防止故障节点持续破坏总线通信。此时DCAN会自动将Init位置1。退出Bus-Off状态需要执行“Bus-Off恢复序列”。DCAN提供了两种方式手动恢复软件检测到Bus-Off后在适当时机手动清除Init位。自动恢复Auto-Bus-On通过置位控制寄存器中的ABO位使能。使能后DCAN在进入Bus-Off状态并等待一段由ABOTR寄存器定义的延时后会自动清除Init位发起恢复。无论哪种方式恢复序列本身是硬件严格定义的节点必须监听到总线连续出现129次总线空闲即129 x 11个连续的隐性位。这个过程是强制性的目的是确保故障节点在重新加入网络前总线已恢复稳定。在恢复期间每次检测到11个连续隐性位错误状态寄存器中的LEC字段会被更新软件可以通过轮询此位来监控恢复进度。3. 中断系统深度解析与编程实践中断是协调CPU与DCAN控制器高效工作的关键。DCAN的中断系统设计精细支持多路中断源复用和优先级管理理解其拓扑结构对于编写稳定的驱动程序至关重要。3.1 中断源与拓扑结构DCAN的中断源分为三大类它们通过一个内部的仲裁逻辑最终映射两个物理中断输出线DCAN0INT和DCAN1INT上。消息对象中断这是最常用的一类中断由各个消息对象的事件触发。每个消息对象都有IntPnd、TxIE发送中断使能和RxIE接收中断使能标志。当TxIE/RxIE使能且对应事件发生时IntPnd置位从而可能产生中断。关键特性在于每个消息对象的中断可以被独立地路由到DCAN0INT或DCAN1INT线这是通过中断复用寄存器INTMUXx来配置的。例如可以将高优先级的刹车信号消息对象中断路由到DCAN0INT连接CPU的高优先级中断线而将低优先率的诊断信息中断路由到DCAN1INT。状态改变中断这类中断与具体的消息对象无关而是反映DCAN控制器的整体状态变化包括WakeUpPnd从低功耗模式被总线活动唤醒。RxOk成功接收到一帧报文无论是否存入消息对象。TxOk成功发送一帧报文。LEC最近一次错误代码更新。 当控制寄存器的SIE位使能时每一帧CAN报文的成功发送或接收都会产生一次状态中断。这在调试总线通信、统计吞吐量时非常有用但在正常运行时通常关闭以避免过多中断开销。错误中断反映总线通信的错误状态包括PER协议错误如位填充错误、格式错误。BOff总线关闭状态。EWarn错误警告发送或接收错误计数器超过96。 通过使能控制寄存器的EIE位来开启。错误中断只能路由到DCAN0INT线。中断的优先级是固定的错误中断和状态中断的优先级最高当它们发生时中断寄存器INT中的Int0ID会被设置为0x8000。其次是消息对象中断其中消息对象1的优先级最高编号最大的消息对象优先级最低。3.2 中断处理流程与编程示例一个健壮的中断服务程序ISR流程如下// 假设中断线DCAN0INT触发 void DCAN0_ISR(void) { uint32_t int_status HW_REG(DCAN_BASE INT); // 读取中断寄存器 // 1. 判断最高优先级的中断类型 if ((int_status INT0ID_MASK) 0x8000) { // 错误或状态中断 uint32_t es_status HW_REG(DCAN_BASE ES); // 读取错误状态寄存器 if (es_status BOff_MASK) { // 处理总线关闭严重错误 handle_bus_off(); } else if (es_status PER_MASK) { // 处理协议错误可能是SECDED校验出错 handle_protocol_error(); } // ... 检查其他状态位如LEC, EWarn等 // 注意读取ES寄存器会清除LEC, RxOk, TxOk, WakeUpPnd等状态位 } else { // 消息对象中断 uint16_t msg_obj_number int_status INT0ID_MASK; // 获取触发中断的消息对象号 // 2. 使用IF寄存器快速访问该消息对象 // 先设置要访问的消息对象编号 HW_REG(DCAN_BASE IF1CMD) (msg_obj_number 16) | (1 15); // 假设使用IF1并设置ClrIntPnd位 // 然后通过IF1DATA等寄存器读取消息内容 // ... // 3. 清除该消息对象的中断挂起位通过ClrIntPnd位已在上面命令中设置 // 读取操作完成后硬件会自动清除IntPnd中断寄存器会指向下一个挂起的中断 } // 4. 如果中断线是电平触发需要确保中断源被清除否则会持续触发。 // DCAN的中断线会保持有效直到对应的Int0ID/Int1ID字段变为0即所有中断被处理。 }重要提示在状态中断中读取ES寄存器这个动作本身就会清除WakeUpPnd、RxOk、TxOk和LEC位。如果在全局低功耗模式下WakeUpPnd标志被读取清除后DCAN模块尚未被系统完全唤醒它可能会再次置位该标志导致产生第二次中断。在编写唤醒处理逻辑时需要考虑到这种可能性通常的做法是在ISR中只做标记唤醒后的主循环中再进行实际的模块上电和初始化操作。4. 电源管理模式详解与低功耗设计在电池供电或对功耗敏感的应用中DCAN的电源管理功能至关重要。它支持全局和本地两种低功耗模式理解其进入、退出条件和时序是设计可靠低功耗系统的关键。4.1 全局低功耗模式全局低功耗模式由系统级的电源管理单元如TI芯片中的PCR模块统一控制。当系统决定让DCAN进入休眠时会设置对应的电源关断位。进入流程电源管理单元设置PSPWRDWNSETx位。DCAN硬件感知到此请求会完成所有已挂起的发送请求。等待总线进入空闲状态检测到11个连续隐性位。自动将Init位置1表明已进入全局低功耗模式此时模块大部分电路可被断电。唤醒流程CAN总线活动检测电路如果使能检测到显性位置位WakeUpPnd位。若状态中断SIE使能则产生中断。在中断服务程序中软件需要做两件事 a. 清除电源管理单元的关断位PSPWRDWNCLRx。 b. 清除DCAN控制寄存器的Init位。DCAN模块上电等待129个总线空闲后恢复正常操作。核心限制在低功耗模式下CAN收发器必须保持供电以检测总线活动。唤醒DCAN的那一帧报文即触发总线活动的那一帧是无法被接收的。这意味着用于唤醒的网络管理报文或首帧数据报文会丢失。在实际网络设计中必须考虑此因素通常采用重复发送或握手协议来确保唤醒后的节点能同步到正确的网络状态。4.2 本地低功耗模式本地低功耗模式由DCAN自身的控制寄存器管理灵活性更高。通过置位控制寄存器的PDR位来请求进入。进入流程软件设置PDR 1。DCAN完成所有挂起的发送请求并等待总线空闲。硬件自动设置Init 1并设置状态寄存器中的PDA 1表明已进入本地低功耗模式。此时DCAN内部时钟关闭功耗显著降低。唤醒方式有两种软件主动唤醒软件清除PDR位然后清除Init位。总线活动自动唤醒使能WUBA位。当总线活动检测电路发现显性电平时硬件自动执行清除PDA和PDR位置位WakeUpPnd产生中断如果SIE使能最后清除Init位。之后同样等待11个连续隐性位后恢复活动。关键警告在本地低功耗模式下如果软件清除了Init位但PDR位仍为1那些配置为发送状态的消息对象可能会被意外发送出去因此正确的操作顺序必须是先清除PDR再清除Init。流程图清晰地表明了这一点编程时必须严格遵守。4.3 低功耗设计实践与避坑指南模式选择如果整个系统芯片都需要深度睡眠使用全局模式。如果只是希望CAN模块单独省电而CPU和其他外设仍在运行则使用本地模式。唤醒源管理使能WUBA总线活动唤醒是常见的做法。务必在初始化时配置好用于唤醒的消息对象通常是网络管理报文或特定ID的报文并确保其RxIE中断使能以便唤醒后能及时处理。第一丢失应对这是低功耗CAN节点的通用挑战。解决方案包括应用层协议容忍设计协议时让关键命令或数据支持重传。使用专用唤醒模式有些CAN收发器有独立的低功耗唤醒引脚和逻辑可以在不丢失第一帧文的情况下唤醒控制器但这需要硬件支持。软件补偿节点被唤醒后可以主动发送一个请求帧向网络请求最新的状态或数据。状态保存与恢复进入低功耗前如果消息对象RAM的内容需要保持需确保芯片支持该RAM区域的保持电压。唤醒后DCAN寄存器会复位需要软件重新初始化但消息对象RAM的内容如果未掉电则可能得以保留软件需要根据情况决定是复用旧数据还是重新配置。5. 高级功能与测试模式除了核心通信DCAN还提供了一系列用于调试、自检和特殊应用场景的高级功能。5.1 静默模式、环回模式与外部环回模式这些模式通过测试寄存器TEST控制主要用于产品测试、硬件验证和系统调试。静默模式Silent Mode置位Silent位进入。在此模式下DCAN可以正常接收报文但不会向总线发送任何显性位包括ACK位、错误帧等。它像一个“监听者”非常适合用于总线监控、分析网络流量而不干扰网络本身。这相当于ISO 11898-1标准中的“总线监控模式”。环回模式Loop Back Mode置位LBack位进入。发送端TX的输出在内部直接反馈到接收端RX完全忽略外部CAN_RX引脚的电平。发送的报文会被自己接收回来可用于测试DCAN控制器自身的发送、接收和过滤逻辑是否正常无需连接外部物理总线。在此模式下控制器会忽略ACK错误因为自己不会给自己回ACK。外部环回模式External Loop Back Mode置位ExL位进入注意LBack位必须为0。此模式将TX引脚输出连接到RX引脚输入包含了TX引脚驱动电路和RX引脚输入缓冲器的回路。这是对芯片I/O引脚电路进行功能测试的有效手段。静默环回组合模式同时置位Silent和LBack。这是“热自检”模式DCAN可以对自己进行完整的自发自收测试同时确保绝对不会向外部总线发送任何信号避免影响网络上的其他节点。操作禁忌当使用环回、静默等测试模式时必须确保在设置Init1进入初始化模式前所有正在进行的报文传输都已结束。否则可能会造成状态机混乱或报文丢失。5.2 SECDED机制保障数据完整性在安全性要求高的应用中内存数据的完整性至关重要。DCAN的SECDED单错纠正双错检测机制为消息对象RAM提供了硬件级的ECC纠错码保护。原理为每个消息对象136位计算并存储9位ECC校验位。每次写入时生成ECC每次读取时校验ECC。使能通过控制寄存器的PMD字段使能默认可能关闭需查具体型号数据手册。单比特错误如果使能了纠错ECCMODE默认开启硬件会自动纠正并在ECC状态寄存器中置位SEFLG标志。如果禁用了纠错则只检测不纠正会置位SEFLG和错误寄存器中的PER位并将对应消息对象的MsgVal位置0防止错误数据被发送。双比特错误无法纠正硬件会置位DEFLG和PER位同样将MsgVal清零。错误定位ECC_SERR寄存器会指示发生单比特错误的消息对象编号PERR寄存器则指示发生双比特错误的消息对象编号。SECDED测试可以通过诊断模式ECCDIAG寄存器主动注入错误验证ECC机制的可靠性。基本步骤是禁用SECDED - 进入诊断模式 - 写入错误数据或ECC位 - 启用SECDED并读取数据 - 检查错误标志是否被正确触发。5.3 调试/挂起模式当使用JTAG等调试器时调试/挂起模式允许外部调试单元访问DCAN的内部状态包括所有寄存器和消息对象RAM的内存映射视图。进入由调试系统请求。DCAN根据控制寄存器IDS位的设置决定是立即挂起还是等待当前报文传输完成后再挂起。状态进入后InitDbg标志位被置1。访问在此模式下消息对象RAM可以通过VBUSP接口被调试器直接读取但不能通过IFx接口寄存器访问。这为在线调试、分析实时报文数据提供了极大便利。注意在调试模式下写控制寄存器可能会影响CAN状态机需谨慎操作。此外一些寄存器的“读清零”自动功能会被禁用。6. 关键寄存器精讲与配置实战寄存器是软件与DCAN硬件交互的窗口。理解关键寄存器的每一位是进行精准控制和故障排查的基础。这里我们聚焦几个最核心的寄存器。6.1 控制寄存器CTL—— 大脑中的开关CTL寄存器是DCAN的总控制中心。除了之前提到的Init、CCE、IE0/1、SIE、EIE、DAR、ABO、PDR、WUBA外还有几个关键位Test(位7)进入测试模式的钥匙。必须置1才能写TEST寄存器配置静默、环回等模式。SWR(位15)软件复位。操作顺序极其重要先置Init1停止CAN通信再置SWR1。该位会在一个时钟周期后自动清零。IDS(位8)调试支持。决定调试模式请求时是立即挂起(1)还是等待当前传输完成(0)。DE1/DE2/DE3(位18-20)使能对应IF1/IF2/IF3接口的DMA请求。当与DMA控制器配合实现大数据量吞吐时这些位必须正确使能。6.2 接口寄存器IF1, IF2, IF3—— 高效数据通道IF寄存器是CPU或DMA访问消息对象RAM的“高速通道”。DCAN通常提供2到3组这样的接口寄存器IF1, IF2, IF3它们的功能相同可以并行操作从而允许CPU快速配置或读取多个消息对象而无需等待。使用IF寄存器访问消息对象的典型流程选择目标在IFxCMD寄存器中写入要操作的消息对象编号Message Number。设置命令在IFxCMD寄存器中设置操作类型读/写、要更新的区域仲裁/控制/数据、以及是否在操作后清除NewDat或IntPnd位。提供数据/掩码如果要写则将数据写入IFxDATA、IFxDATB将ID和掩码写入IFxARB和IFxMSK将控制参数写入IFxMCTL。触发传输对IFxCMD寄存器的写操作步骤2本身就是触发这次“接口传输”到消息对象RAM的动作。例如要更新32号发送对象的数据部分并请求发送// 使用IF1接口 HW_REG(IF1ARB) ...; // 设置ID如果不变可跳过 HW_REG(IF1MCTL) ...; // 设置DLC等控制位如果不变可跳过 HW_REG(IF1DATA) new_data_low; // 写入新数据低4字节 HW_REG(IF1DATB) new_data_high; // 写入新数据高4字节 // 关键一步写CMD寄存器指定对象32方向为写更新数据区并置位TxRqst HW_REG(IF1CMD) (32 16) | (1 8) | (1 2) | (1 0); // 位定义Bit0: Busy, Bit2: TxRqst, Bit8: DataA, Bit9: DataB, [16:24]: Message NumberIF3的观察模式IF3是一个特殊的只读接口它可以被配置为“观察”某个或某组消息对象的状态变化通过IF3UPDx寄存器配置而无需CPU干预。当被观察的消息对象更新时IF3寄存器的内容会自动刷新结合DMA可以极高效地实现数据记录功能。6.3 状态与中断寄存器 —— 系统健康仪表盘错误与状态寄存器ES这是诊断总线问题的第一现场。LEC字段记录了最近一次的错误代码0无错误1填充错误2格式错误等是分析通信故障的黄金指标。RxOk和TxOk计数器在调试阶段用于验证通信是否正常进行。中断寄存器INT如前所述Int0ID/Int1ID字段是中断服务程序的“导航仪”直接指向最高优先级的待处理中断源中断挂起寄存器INTPNDx与消息有效寄存器MSGVALx这些是位域寄存器每一位对应一个消息对象。INTPNDx可以快速查看哪些对象触发了中断MSGVALx则可以批量查看或设置哪些消息对象是激活的。在系统初始化或重置部分消息对象时操作这些寄存器比通过IF接口逐个操作效率高得多。7. 常见问题排查与实战心得在实际项目中DCAN的调试往往比配置更耗时。以下是我从多个车载项目实践中总结出的常见问题与排查思路。7.1 通信完全失败无收发检查物理层这是第一步也是最容易忽略的一步。用示波器测量CAN_H和CAN_L之间的差分信号。在空闲时差分电压应为0V隐性在发送显性位时应有明显的电压差通常约2V。如果没有信号检查终端电阻120欧姆总线两端各一个、线缆连接、收发器供电。检查初始化序列确认软件是否正确执行了初始化流程Init1-CCE1- 配置位时序BTR- 配置消息对象 -CCE0-Init0。一个常见错误是配置完消息对象后忘了清除Init位。检查位时序配置错误的波特率或采样点设置会导致根本无法同步。确保BTR寄存器的BRP波特率预分频、TSEG1、TSEG2、SJW等参数与目标波特率匹配并且与总线上其他节点一致。计算波特率时务必以模块的输入时钟VCLK为基准。检查消息对象有效性确认要使用的消息对象的MsgVal位已被置1。一个无效的消息对象不会参与任何收发过滤。7.2 能收不能发或发送失败检查发送请求确认软件正确置位了消息对象的TxRqst位。可以通过读取TXRQ_X寄存器来验证该位是否被成功设置。检查总线仲裁如果总线上有更高优先级的报文在持续发送低优先级的报文会一直丢失仲裁而无法发出。使用CAN总线分析仪查看总线实际流量确认报文的ID优先级设置是否合理。检查错误计数器与总线状态读取ES寄存器的LEC字段和ERRC寄存器的发送错误计数器TEC。如果TEC很高或LEC显示持续错误可能硬件连接有问题或者波特率不匹配导致位采样错误。如果进入Bus-Off状态需要等待恢复或手动处理。禁用自动重传测试作为调试手段可以尝试置位DAR位禁用自动重传。如果此时能发送一帧后停止说明硬件基本正常问题可能出在仲裁或错误处理上。7.3 中断不触发中断使能金字塔确保中断触发条件满足一个完整的使能链消息对象级TxIE或RxIE使能。控制器级全局中断IE0或IE1使能。中断线配置对于消息对象中断还需通过INTMUXx寄存器将其路由到正确的物理中断线DCAN0INT/1INT。CPU级在微控制器层面需要配置NVIC使能对应的外部中断线并设置正确的中断优先级。检查中断标志在中断服务程序中第一时间读取INT寄存器确认Int0ID/Int1ID的值。如果为0可能中断已被其他代码提前清除或者是其他中断源触发。电平触发与边沿触发确认微控制器端中断引脚配置的模式与DCAN中断输出特性匹配。DCAN的中断线在有待处理中断时为高电平中断处理完后变低。如果MCU配置为边沿触发可能需要特别注意。7.4 低功耗模式无法唤醒唤醒源配置在进入低功耗前是否使能了WUBA总线活动唤醒用于唤醒的报文ID是否已配置为有效的接收消息对象第一帧丢失如前所述唤醒的第一帧报文会被硬件丢弃。确保网络协议能容忍这一点或者使用专用的、重复发送的唤醒报文。唤醒处理顺序在唤醒中断服务程序中是否按照正确的顺序清除了PDR和Init位是否处理了可能出现的WakeUpPnd标志二次置位问题收发器状态在低功耗模式下CAN收发器必须保持供电以检测总线活动。检查硬件设计确保在芯片低功耗模式下收发器的VCC没有断电。7.5 数据一致性问题当CPU和DCAN消息处理器同时访问同一个消息对象时需要通过IF寄存器的“锁”机制来保证数据一致性。软件在通过IF寄存器读写消息对象时硬件会暂时锁定该对象。一个重要的实践是在更新一个用于多次发送的消息对象时例如周期发送的转速信号应先更新数据区最后再置位TxRqst。如果先置位TxRqst可能在数据更新完成前消息处理器就开始了发送导致发送出旧数据或错误数据。最后善用静默模式进行总线监听是排查复杂网络问题的利器。将问题节点设置为静默模式它不会干扰总线但可以接收所有报文通过读取其接收到的报文可以判断是它发送有问题还是根本接收不到网络上的数据从而快速定位问题是出在发送端、接收端还是网络本身。