Thread 中讨论的其他器件:controlSUITE
我一直在使用 controlSUITE v202中 M3内核的 CAN_loopback 示例。
我已将其加载到我们的定制板上、该定制板具有连接到 ISO1050DUB 收发器的 CAN 模块。
我对设置环回的线路进行了注释、而是将它们连接在一起、形成 一个500kbps 的简单总线 、其中只有两个 CAN 模块作为节点。
因此、我有一个节点发送消息、另一个接收器接收消息。 工作正常。
但是、如果我拔下接收端、我看不到发送器的错误计数器递增。
我有一个示波器监控 总线上的 CAN_H - CAN_L 电压。
我附加了下面的注释屏幕截图(隐性位为高电平、显性位为低电平)。 请 µs、它的速率为500kbps、从而产生2 μ s 位、这对应 于示波器屏幕截图上的最小时间节拍。
可以看到帧起始(SoF)后跟四个初始 ID 位(全部为0、因为 ID 为0x10)、然后要求填充位1。 电平变化需要太长时间、导致被监控的位与被发送的位不同、并导致发送器发送一个错误帧(活动错误标志、6个显性位)。
这种情况本身不成问题、因为总线没有端接电阻器、所以就我所能说的那样、这种问题是可以预料的。
然后、我还可以从 CAN 2.0B 规范中了解发送器错误计数器未递增的原因:检测到填充错误、这会触发要发送的错误标志。 但是、这种情况发生在仲裁过程中、对于本应为隐性但被监控为显性的位、也会发生这种情况。
但是,该示例设置了一个中断,通过 CANStatusGet ()调用读取状态寄存器。 返回的值为4、表示"Bit1 Error":
在发送消息期间(仲裁域的触发) 、器 件希望发送一个隐性电平(逻辑值"1"的位)、但监控到的总线值为显性。 (SPRUH22I)
上面突出显示的异常与 CAN 2.0B 规范一致(如果在仲裁中发生隐性位传输期间监控显性位不是位错误)、这意味着如果我理解正确、LEC 应该读为1 ("填充错误")。 我是吗?