MCAN控制器内部环回模式、时间戳与接收过滤实战解析
1. MCAN模块内部环回模式深度解析在嵌入式系统尤其是汽车电子和工业控制领域CAN总线是连接各个电子控制单元的“神经系统”。作为这个系统的核心MCAN控制器模块的稳定性和可靠性直接决定了整个网络的通信质量。然而在系统集成或功能安全验证阶段我们常常面临一个难题如何在不影响实际运行的CAN网络即“在线系统”的前提下对MCAN模块自身进行彻底的功能测试这时内部环回模式就成为了一个至关重要的“安全沙箱”。1.1 内部环回模式的核心原理与价值内部环回模式本质上是一种硬件级的自测试机制。它的核心操作逻辑非常直接当MCAN模块被配置进入此模式后其内部的发送路径TX和接收路径RX会在芯片内部直接连接起来形成一个闭环。具体来说模块会物理上断开外部RX引脚与内部CAN核心的连接同时强制将外部TX引脚驱动为隐性电平逻辑‘1’对应CAN总线的空闲状态。这样从外部看MCAN模块对总线是“静默”的不会发送任何显性位去干扰总线上的其他节点。这个设计的精妙之处在于它完美地解决了“自测试”与“在线运行”之间的矛盾。工程师可以在实验室环境甚至在设备上电自检阶段通过软件命令MCAN进入环回模式然后主动发送一帧CAN报文。这帧报文不会出现在外部CAN总线上而是直接绕回模块内部的接收端。通过读取接收缓冲区或FIFO我们可以验证从报文组装、位时序处理、CRC校验到接收过滤、存储的整个数据通路是否完好无损。这就像在检查一台精密仪器时我们不是把它拆开而是启动它的自检程序所有测试都在内部完成对外部世界零干扰。1.2 配置与启用环回模式的实操步骤启用内部环回模式并非单一开关而是一个组合配置过程涉及两个关键寄存器位。根据技术手册必须同时设置MCAN_TEST[4] LBCK位和MCAN_CCCR[5] MON位为1。这里需要特别注意操作顺序和模式间的互斥关系。第一步进入初始化模式。在修改MCAN的核心配置寄存器如CCCR之前模块必须处于初始化状态。这是通过设置MCAN_CCCR[0] INIT位为1来实现的。在INIT1期间MCAN停止一切总线活动等待配置。第二步配置环回与监控模式。在INIT模式下安全地设置MCAN_CCCR[5] MON 1和MCAN_TEST[4] LBCK 1。MON位启用总线监控模式在此模式下MCAN可以接收报文但不允许发送这为环回测试提供了基础。LBCK位则具体触发内部环回连接。第三步退出初始化模式。完成上述配置后将MCAN_CCCR[0] INIT位清零。MCAN模块不会立即开始总线通信而是进入内部环回模式。此时你可以通过应用程序或测试脚本向TX缓冲区提交测试报文并观察RX缓冲区是否有数据回环。注意手册中明确警告测试模式包括环回模式仅用于自测试。因为软件对TX引脚的控制会干扰所有CAN协议功能。绝对禁止在最终应用程序中将模块长期置于环回模式否则将导致节点从实际网络中“消失”造成通信中断。1.3 环回模式下的引脚状态与测试设计要点在内部环回模式下外部引脚的状态是固定的TX引脚被内部硬件强制拉至隐性电平通常为高电平。这意味着你用示波器测量该引脚会看到一条稳定的高电平线没有任何波形。这是设计使然目的是确保不干扰总线。RX引脚与内部CAN核心断开。此时即使外部总线有活跃的报文MCAN模块也“听不见”。但你可以通过读取MCAN_TEST[7] RX位来采样RX引脚的实际电平这个功能可用于检查外部物理层的连接状态例如上拉电阻是否正常。基于此一个完整的环回测试案例应包含以下环节基础回环测试发送标准数据帧验证是否能正确接收并比对ID、DLC、数据内容是否一致。错误帧测试尝试发送格式错误如错误的CRC的帧验证错误检测逻辑是否能在环回路径中正确触发错误状态通过MCAN_PSR寄存器查看。过滤功能测试在环回模式下配置接收过滤器发送不同ID的报文验证过滤逻辑是否正常工作。这是验证接收路径前半部分过滤逻辑的好方法。性能压力测试以最高波特率连续发送报文检查FIFO或缓冲区是否溢出评估内部数据处理链路的吞吐能力。2. 时间戳计数器为CAN帧贴上“精确时标”在现代分布式系统中尤其是需要事件顺序分析或控制环路同步的场景如X-by-Wire线控系统、多电机协同仅仅知道“发生了什么”是不够的还必须知道“它精确地在什么时刻发生”。MCAN模块集成的时间戳计数器正是为了解决这个问题而生它为每一帧成功收发或发生事件的CAN报文打上一个精确的时间标签。2.1 内部时间戳计数器的工作原理MCAN内置了一个16位的环绕递增计数器作为其时间戳源。其时钟基准并非直接来自系统主频而是与CAN通信的“心跳”——CAN位时间紧密相关。通过配置MCAN_TSCC[19-16] TCP字段可以设置一个1到16之间的预分频值。例如若设置TCP 4则时间戳计数器每经过4个CAN位时间才递增1。这种设计使得时间戳的分辨率与通信波特率直接挂钩。假设CAN波特率为1 Mbps1位时间1微秒TCP1时时间戳分辨率为1微秒TCP4时分辨率则为4微秒。当一帧报文的传输或接收开始时具体为帧起始SOF位硬件会自动捕获此刻计数器的值并将其存入对应的报文存储单元中对于接收到的报文时间戳存入Rx Buffer或Rx FIFO元素的RXTS[15:0]字段。对于成功发送的报文时间戳存入Tx Event FIFO元素的TXTS[15:0]字段。你可以通过读取MCAN_TSCV[15:0] TSC寄存器来获取当前计数器的值。向该寄存器执行写操作通常写0会将计数器复位清零。当这个16位计数器从0xFFFF溢出回到0x0000时会置位MCAN_IR[16] TSW中断标志通知软件发生了环绕。2.2 外部时间戳计数器更高精度与系统同步对于CAN FD模式或需要纳秒级精度的应用内部基于位时间的计数器可能不够精确。因此MCAN支持外部时间戳计数器模式。在此模式下你可以将一个由外部时钟源通常是更高精度、更稳定的时钟如IEEE 1588 PTP时钟或系统高精度定时器驱动的16位计数值提供给MCAN核心。配置方法是将MCAN_TSCC[1:0] TSS字段设置为相应值以选择外部时间戳源。外部计数器使用接口时钟ICLK作为参考并通过一个24位的预分频器MCANSS_EXT_TS_PRESCALER来提供可编程的分辨率。例如如果ICLK为100 MHz预分频器设为1000则时间戳计数器的增量周期为10微秒。外部时间戳的使能通过MCANSS_CTRL[6] EXT_TS_CNTR_EN位控制。其中断逻辑相对复杂但更灵活当计数器溢出时会触发一个脉冲事件并置位MCANSS_IRS寄存器中的相应位。通过MCANSS_IE寄存器使能中断MCANSS_IES寄存器反映最终的中断电平状态。软件还可以通过写MCANSS_ISS寄存器来模拟一个溢出事件用于测试中断处理流程。操心得在汽车网关或域控制器中常常需要为来自不同总线的报文建立统一的时间基准。这时可以使用一个高精度的外部时钟如来自车载以太网的PTP时钟作为整个系统中所有MCAN模块的外部时间戳源。这样即使这些MCAN模块位于不同的芯片或板卡上它们为报文打上的时间戳也是基于同一个“世界时钟”极大地方便了跨网络、跨域的事件排序和故障诊断。2.3 超时计数器守护通信的“看门狗”除了记录“何时发生”MCAN还需要知道“是否在预期时间内发生”。这就是超时计数器的职责。它是一个16位的递减计数器主要用于监控Rx FIFO 0、Rx FIFO 1和Tx Event FIFO的状态。其时钟源与时间戳计数器共享同一个预分频器MCAN_TSCC[19:16] TCP。通过MCAN_TOCC[0] ETOC位使能并通过MCAN_TOCC[31:16] TOP字段设置超时周期即计数器初始值。当前计数值可从MCAN_TOCV[15:0] TOC字段读取。超时计数器有两种工作模式由MCAN_TOCC[2:1] TOS选择连续模式计数器从TOP值开始递减减到0后置位MCAN_IR[18] TOO中断标志然后立即重载TOP值并重新开始递减。此模式用于周期性检查。FIFO控制模式当关联的FIFO为空时计数器被预设为TOP值并暂停。当第一个元素存入FIFO时计数器开始递减。如果在减到0之前FIFO未被读取即Get Index未更新则触发超时中断。这非常适合用于监控“数据是否及时被处理”。例如设置Rx FIFO 0的超时为10ms如果应用程序在10ms内未能读取FIFO中的数据就会产生中断提示系统可能过载或出现故障。重要提示超时计数器仅在MCAN_CCCR[0] INIT 0即MCAN处于正常工作模式时才能启动。当MCAN进入总线关闭状态Bus_Off时INIT位会被自动置1超时计数器也随之停止。这符合逻辑因为总线关闭期间无法正常收发报文监控FIFO超时没有意义。3. ECC支持与接收过滤数据完整性与智能筛选的双重保障在安全至上的应用中数据的完整性不被篡改或损坏和有效性只处理需要的数据是两大基石。MCAN模块通过硬件ECC纠错码和高度可配置的接收过滤器为这两点提供了强有力的支持。3.1 ECC纠错机制内存的“自愈”能力MCAN的报文存储器Message RAM被一个ECC包装器所包裹。ECCError Correction Code能够提供单错纠正、双错检测的能力。这意味着如果存储器中某一个比特因电磁干扰等原因发生翻转单比特错误硬件可以自动发现并纠正它整个过程对软件透明。如果同时有两个比特出错双比特错误硬件能检测到错误但无法纠正此时会通过边带信号通知系统通常触发一个不可纠正错误中断如ECC_UE系统可采取复位或隔离等安全措施。更巧妙的是其“惰性写回”机制。当检测到一个可纠正错误时错误地址和数据会被记录在一个FIFO队列中。ECC逻辑并不立即去修复内存中的错误位而是等待一个“访问间隙”即主机CPU或CAN核心没有访问该内存区域时再将纠正后的数据写回。如果在写回完成前有新的事务要向这个出错地址写入新数据那么这次惰性写回就会被丢弃。这种设计避免了ECC纠错操作阻塞正常的内存访问优化了实时性能。注意事项ECC功能虽然强大但会增加少量的存储开销和访问延迟。在功能安全等级如ISO 26262 ASIL要求高的项目中必须使能ECC并监控其错误中断。在非安全关键或成本极度敏感的应用中可能需要评估是否关闭此功能以节省资源。3.2 接收过滤CAN网络的“智能门卫”CAN总线是广播网络一个节点会收到总线上所有的报文。如果让CPU处理每一帧报文将是巨大的负担。接收过滤器的作用就是充当一个硬件“门卫”只放行那些“有通行证”即符合过滤规则的报文进入CPU的视野。MCAN支持两套独立的过滤器列表一套用于11位标准ID一套用于29位扩展ID。3.2.1 过滤器类型详解每个过滤器元素都可以配置为三种类型之一其工作原理如下范围过滤器这是最简单的“区间过滤”。你设定一个起始IDSFID1/EFID1和一个结束IDSFID2/EFID2所有ID落在这个闭区间内的报文都会被匹配。对于扩展帧有一个特殊选项可以选择是否在应用范围过滤前先将接收到的ID与MCAN_XIDAM扩展ID与掩码寄存器进行“与”操作。这允许你只对ID的某一部分如前16位进行范围匹配更加灵活。特定ID过滤器用于精确匹配一个或两个特定的ID。将SFID1和SFID2或EFID1和EFID2设置为相同的值即匹配一个ID设置为两个不同的值则匹配两个ID。这是最常用的过滤方式用于订阅特定的关键报文。经典位掩码过滤器功能最强大的过滤方式。你需要配置两个值ID过滤器SFID1/EFID1和位掩码SFID2/EFID2。掩码中的‘1’表示“这一位必须严格匹配”‘0’表示“这一位我不关心”。例如过滤器ID 0x123 掩码 0x7FF (所有位为1)。结果只接收ID为0x123的报文。过滤器ID 0x120 掩码 0x7F0 (低4位为0)。结果接收ID从0x120到0x12F的所有报文相当于匹配了一个ID组。掩码 0x000。结果接收所有报文过滤器失效。3.2.2 过滤流程与配置策略过滤检查在接收到完整的报文ID后立即开始。过滤器列表按顺序检查一旦遇到第一个使能且匹配的过滤器元素过滤过程立即停止并执行该元素定义的动作存储到指定FIFO/Buffer或拒绝或触发高优先级中断。如果遍历完整个列表都没有匹配则根据MCAN_GFC寄存器中的ANFS/ANFE位决定是接受还是丢弃该非匹配帧。配置心得与避坑指南性能优先将最频繁接收的报文的过滤器放在列表最前面可以减少平均过滤时间。“拒绝”规则前置如果有需要明确拒绝的干扰ID例如调试工具发送的特定ID为其配置一个拒绝动作的过滤器并放在列表靠前位置。这可以防止不需要的报文占用宝贵的FIFO空间。小心远程帧通过MCAN_GFC的RRFS/RRFE位可以全局配置是接受还是拒绝远程帧。如果你的应用不需要处理远程帧建议直接全局拒绝以简化过滤逻辑。过滤与存储的映射每个过滤器元素都可以指定匹配的报文去往何处Rx FIFO 0、Rx FIFO 1或某个专用的Rx Buffer。你可以利用这一点实现报文分类。例如将高实时性的控制指令过滤到Rx FIFO 0将诊断报文过滤到Rx FIFO 1将某个关键传感器的报文固定存储到专用的Rx Buffer 0确保它不会被其他报文覆盖。4. 接收与发送处理机制实战详解理解了环回、时间戳、ECC和过滤这些基础能力后我们深入到MCAN最核心的数据流处理单元接收处理器和发送处理器。它们的配置直接决定了MCAN吞吐量、实时性和资源利用效率。4.1 接收路径FIFO与专用缓冲区的权衡MCAN提供了两种主要的接收数据存储方式Rx FIFO和专用Rx缓冲区。两者各有优劣适用场景不同。Rx FIFO先进先出队列是最常用的方式它像一个流水线新报文从一端Put Index存入应用程序从另一端Get Index按顺序读取。MCAN有两个独立的Rx FIFO0和1每个最多可配置64个元素。FIFO支持两种模式阻塞模式默认FIFO满时新报文被丢弃并触发“报文丢失”中断。这确保了数据的顺序性和完整性适用于不能容忍数据覆盖的场景。覆盖模式FIFO满时新报文覆盖最旧的报文Put Index和Get Index同时递增。这保证了总能读到最新的数据但会丢失历史数据。这里有一个关键陷阱在覆盖模式下当FIFO已满时如果主机CPU正在读取Get Index指向的元素而同时硬件正在写入Put Index指向的元素可能是同一个会导致读取数据不一致。手册建议的解决方案是读取时从Get Index N开始读其中N是一个偏移量例如2具体取决于CPU访问FIFO的速度。这虽然会丢弃一些报文但保证了读取数据的确定性。专用Rx缓冲区为特定ID的报文提供了“专属车位”。通过过滤器配置可以将某个ID的报文直接存储到指定的缓冲区如Buffer 0。只要该缓冲区的“新数据”标志位为1它就会被锁定不会被新报文覆盖直到软件显式清除该标志。这适用于处理最高优先级、必须确保不被丢失的报文。但缺点是每个缓冲区只能存储一帧报文如果该ID的报文发送频率很高而软件处理慢同样会导致报文丢失因为缓冲区被锁定新报文无法存入过滤器会继续向下匹配。配置建议对于常规的、周期性的数据流如传感器数据使用Rx FIFO。对于关键的事件触发型或安全报文如刹车信号、故障码使用专用Rx缓冲区并配合高优先级中断确保及时处理。4.2 发送路径缓冲区、FIFO与队列的抉择MCAN的发送端提供了更灵活的架构最多32个Tx缓冲区可以被配置为三种模式之一或其组合专用Tx缓冲区每个缓冲区有独立的控制权。软件将待发送报文填入指定缓冲区然后置位其“添加请求”位来触发发送。多个缓冲区可以配置相同的ID此时缓冲区编号小的优先发送。这种方式控制粒度最细适合非周期性的、需要精确控制发送时刻的报文。Tx FIFO所有缓冲区构成一个发送队列。报文按写入的顺序Put Index依次发送。即使报文ID不同也严格按FIFO顺序发送。这简化了软件队列管理但丧失了基于ID的优先级。适用于需要严格保证发送顺序的数据流。Tx队列这是功能最强大的发送模式。所有待发送报文按照其CAN ID的优先级进行仲裁ID值最小的优先级最高总是被优先发送。这与CAN总线本身的仲裁机制一致可以最大化利用总线带宽。AUTOSAR标准要求至少支持3个Tx队列缓冲区。此外MCAN还支持混合模式例如将一部分缓冲区如前8个配置为专用缓冲区用于发送高优先级或特殊的报文将剩余的缓冲区配置为Tx FIFO或Tx队列用于管理常规的数据流。这种混合配置通过MCAN_TXBC寄存器的NDTB专用缓冲区数量和TFQSFIFO/队列大小字段来实现。发送暂停功能是一个很实用的特性通过MCAN_CCCR[14] TXP位使能。启用后MCAN在成功发送每一帧报文后会主动暂停2个CAN位时间再开始下一次发送尝试。这为网络中优先级较低的节点提供了“抢占总线”的机会可以防止某个高优先级节点持续霸占总线从而改善网络通信的公平性和实时性。4.3 发送事件FIFO与发送取消发送事件FIFO是发送路径的一个重要辅助功能。每当一帧报文成功发送到总线上或发送失败其ID、时间戳以及一个“消息标记”会被记录到Tx Event FIFO中。这个“消息标记”是在发送时由软件写入Tx缓冲区的用于在事件中关联回原始的发送请求。通过读取Tx Event FIFO应用程序可以可靠地确认哪些报文已被成功发送并获取其精确的发送完成时间这对于诊断、日志和基于确认的通信协议至关重要。发送取消功能对于网关或复杂应用非常有用。软件可以通过设置MCAN_TXBCR[n] CRn位来取消一个尚未开始仲裁的发送请求。如果取消成功相应的MCAN_TXBCF[n] CFn位会被置1。需要注意的是如果取消请求发出时该报文已经开始在总线上发送即正在仲裁或正在传输数据场则取消操作无效报文会继续发送完毕。此外手册特别警告在取消一个即将开始的发送和另一个待发送报文获得机会之间存在一个极短的时间窗口可能导致本节点暂时不发送任何报文从而让总线上的其他节点即使是低优先级抢到发送权。5. 常见问题排查与实战技巧实录在实际开发和调试MCAN驱动的过程中会遇到各种各样的问题。以下是我根据多年经验总结的一些典型问题及其排查思路希望能帮你少走弯路。5.1 环回模式测试失败现象配置了环回模式发送了测试帧但读不到回环的数据。排查步骤确认模式是否真正进入首先检查MCAN_CCCR[0] INIT位是否已成功清零退出初始化模式。然后读取MCAN_TEST[4] LBCK和MCAN_CCCR[5] MON位确保两者都为1。检查发送请求确认已正确填写Tx缓冲区并置位了对应的MCAN_TXBAR[x] ARn位。可以检查MCAN_TXBRP寄存器看发送请求是否处于挂起状态。检查接收端配置即使环回模式是内部直连接收过滤器也必须配置为能够接受你发送的测试帧ID。一个常见的错误是接收过滤器配置为拒绝所有帧或过滤范围不匹配。建议在测试初期将接收过滤器配置为接受所有帧例如设置一个掩码全0的经典过滤器。检查中断或状态位使能接收中断或轮询MCAN_IR寄存器中的接收中断标志如RF0N。同时检查MCAN_PSR寄存器看是否有协议错误如格式错误导致报文在环回路径中被丢弃。5.2 接收不到外部总线报文现象MCAN无法接收到来自其他CAN节点的报文但用示波器或CAN分析仪确认总线上有数据。排查步骤确认退出环回/测试模式这是最容易被忽略的一点确保MCAN_TEST[4] LBCK位为0且MCAN_CCCR[5] MON位也为0除非你确实需要监听模式。检查波特率配置MCAN的波特率配置MCAN_NBTP,MCAN_DBTP等寄存器必须与总线其他节点严格一致。一个比特的偏差都可能导致无法同步。检查接收过滤器这是最常见的原因。确认你配置的过滤器ID、掩码、类型标准/扩展与总线上报文的ID匹配。可以使用“接受所有”的过滤器进行测试。检查RX引脚物理连接测量RX引脚电压在总线空闲时应为隐性高电平通常2.5V-3.3V有报文时应有明显的高低电平变化。如果没有检查CAN收发器、终端电阻和线路。检查MCAN工作模式确保MCAN_CCCR[0] INIT为0正常工作模式并且MCAN_CCCR[7] CCE为0禁止配置变更。如果MCAN处于总线关闭状态MCAN_PSR[2:0] LEC0x7需要等待其自动恢复或手动干预恢复。5.3 时间戳不准确或混乱现象获取到的时间戳值跳动很大或与预期的时间间隔不符。排查步骤检查预分频器配置确认MCAN_TSCC[19:16] TCP的值设置正确。如果使用外部时间戳检查MCANSS_EXT_TS_PRESCALER的配置是否与输入时钟频率匹配。注意计数器溢出16位计数器的最大值是65535。如果你的应用运行时间较长必须处理溢出中断MCAN_IR[16] TSW。在计算时间间隔时需要使用(current_ts - last_ts) 0xFFFF的方式来处理无符号环绕减法。外部时钟同步问题如果使用外部时间戳确保提供给MCAN的时钟信号是稳定且连续的。检查外部计数器的使能位MCANSS_CTRL[6] EXT_TS_CNTR_EN是否已置位。读取时机时间戳是在SOF帧起始时刻捕获的。确保你从Rx Buffer或Tx Event FIFO中读取的是RXTS或TXTS字段而不是去读实时变化的MCAN_TSCV寄存器。5.4 FIFO溢出或数据丢失现象应用程序来不及处理数据导致Rx FIFO满新报文被丢弃阻塞模式或旧数据被覆盖覆盖模式。解决方案与技巧合理设置FIFO大小和水位线根据报文频率和软件处理能力在MCAN_RXF0C/MCAN_RXF1C中配置足够的FIFO深度最大64。同时设置一个合理的水位线FnWM字段例如当FIFO填充到75%时触发中断给软件预留处理时间。使用DMA如果MCAN模块支持DMA强烈建议使用DMA将FIFO数据直接搬运到系统内存。这可以极大减轻CPU负担避免因中断延迟或任务调度导致溢出。优化软件处理流程在中断服务例程或任务中一次读取多个FIFO元素批量处理而不是每来一帧就处理一帧。读取后及时更新确认索引MCAN_RXFxA。覆盖模式下的安全读取如前所述在覆盖模式下读取时采用Get Index N的偏移策略。N的值需要通过测试确定原则是确保软件读取指针永远落后于硬件写入指针足够远避免冲突。一个保守的做法是N设置为FIFO深度的一半。5.5 发送延迟或无法发送现象发送请求已添加但报文迟迟发不出去或者发送失败。排查步骤检查总线状态首先确认CAN总线是否活跃有正确的终端电阻其他节点能正常通信。检查MCAN_PSR寄存器的BO,EP,EW位确认MCAN是否处于错误被动或总线关闭状态。检查发送缓冲区状态在专用缓冲区模式下检查MCAN_TXBRP寄存器确认你的发送请求位是否已置起。在FIFO/队列模式下检查MCAN_TXFQS寄存器的TFQFFIFO满和TFFL空闲缓冲区数量字段确保有可用的发送资源。检查仲裁丢失如果报文ID优先级较低可能会在总线仲裁中持续丢失。可以通过MCAN_IR中的仲裁丢失中断标志或MCAN_PSR中的LEC字段来确认。考虑优化ID分配策略。发送取消的影响如果你使用了发送取消功能检查MCAN_TXBCF寄存器看目标报文是否被成功取消。一个被取消的报文不会发送。配置冲突确认MCAN_CCCR寄存器中的FDOE,BRSE等位与待发送报文帧中的FDF,BRS位设置是否匹配。例如如果模块未使能FD模式FDOE0则尝试发送CAN FD帧FDF1会失败。调试MCAN是一个需要耐心和系统性的工作。我的习惯是在驱动层实现一个详细的寄存器状态和错误码打印函数在出现问题时第一时间将所有相关寄存器的值 dump 出来分析。同时配合一个可靠的CAN分析仪如Vector CANalyzer, PEAK-System PCAN等对比总线上的实际流量是定位硬件、软件还是配置问题的最有效手段。记住大部分问题都源于配置不当仔细阅读手册理解每个配置位的含义是成功应用MCAN的关键。