![]() |
1
0
CAN总线绝对不能保证接收到发送的帧。总线上可能存在CAN错误,阻止发送某些帧。 汽车工程师需要通过CAN网络发送文件以实现 软件更新 。要做到这一点,他们需要发送远大于8字节的帧。他们定义了一个 传输协议 在罐的顶部: ISO-15765 ,通常命名为 ISO-TP 。 在这个协议中,帧是按组发送的。组中元素的数量在交换期间定义,并且在帧传输期间可能会发生变化。 给您一个通信流程的示例:
为了识别正在传输的帧的哪一部分,一个字节被用作帧计数器。这是一个滚动计数器,目的是确保数据的完整性。如果没有按正确的顺序接收到帧,这无关紧要,因为软件能够确定没有丢失帧。
此传输层通常是非常通用的,经常可以看到它作为CAN工具提供商提供的库提供。你也可以找到一些 Open Source implementations 。
事实上,CAN总线在物理级别上有自己的CRC,对于大多数情况应该足够了。但如果要添加自定义校验和,只需定义其长度并将其前置或附加到数据中即可。然后,接收器可以在传输完成后重新计算CRC。 |
![]() |
2
0
此代码有几个原因值得怀疑。
您可能需要CRC32这样的东西来确保文件没有损坏。对于CAN传输本身,您不需要CRC,因为CAN内置CRC-15。 但请注意,如果使用外部CAN控制器的硬件解决方案不好,可能需要在CAN数据中使用CRC。这种遗留解决方案涉及一个公开的SPI总线,它没有内置的错误控制。现代电子技术 只有 使用外部CAN控制器,以防因其他原因而必须使用的一些外来MCU被卡住,但它没有随附CAN芯片。 |