CAN总线发送方每发送一位,接收方接收一位,但是当在非破坏性仲裁方式失利的情况下是否还能够正确接收数据呢?
仲裁失败的一方重新开始接收数据时,接收到的数据是完整的,但是仲裁阶段的数据无法被正确接收,但是因为仲裁位失败的位之后会立马转为接收模式,所以前面的数据是相同的,所以就知道了。
- 仲裁失败的节点在检测到仲裁失败后,会立即停止发送,并切换到接收模式。
详细解释
1. 仲裁阶段的本质
- 仲裁阶段仅比较标识符(ID):
- 在CAN通信中,仲裁阶段仅涉及消息标识符(ID)的逐位比较。
- 仲裁失败的一方在检测到自己的位与总线状态不一致时,会立即停止发送,并切换到接收模式。
- 仲裁阶段不传输有效数据:
- 仲裁阶段传输的是标识符位,而非有效数据。
- 仲裁失败的一方在仲裁期间并未进入“数据场”的传输阶段,因此不会接收到任何有效数据。
2. 仲裁失败后接收的数据完整性
- 仲裁失败后重新接收的数据是完整的:
- 一旦仲裁失败,节点会立即转为接收模式,开始监听总线。
- 当仲裁成功的节点开始传输数据场时,仲裁失败的节点会从数据场的起始位开始接收,确保接收到的数据是完整的。
- 示例:
- 假设节点A和B同时发送消息:
- 节点A的ID为
0x001
,节点B的ID为0x002
。 - 在仲裁阶段,节点B检测到自己的位与总线状态不一致,仲裁失败。
- 节点A的ID为
- 仲裁结果:
- 节点A获得总线控制权,开始传输数据场。
- 节点B从数据场的起始位开始接收,接收到节点A发送的完整数据。
- 假设节点A和B同时发送消息:
3. 仲裁阶段的数据无法被接收
- 仲裁阶段的数据不构成有效消息:
- 仲裁阶段传输的是标识符位,而非有效数据(特殊情况是扩展数据帧与标准遥控帧的仲裁,但是也不会产生错误,因为扩展数据帧没有结束仲裁,下一位IDE会仲裁失败给标准遥控帧)。
- 仲裁失败的一方在仲裁期间并未进入“数据场”的传输阶段,因此不会接收到任何有效数据。
- 仲裁阶段的总线状态:
- 在仲裁阶段,总线上传输的是所有参与仲裁节点的“逻辑与”结果。
- 仲裁失败的一方在仲裁期间无法解析出任何有意义的信息。
4. 总结
- 仲裁失败的一方:
- 在仲裁阶段无法接收到任何有效数据。
- 仲裁失败后,会立即转为接收模式,从数据场的起始位开始接收数据。
- 接收到的数据完整性:
- 仲裁失败的一方重新开始接收数据时,接收到的数据是完整的,因为仲裁阶段不传输有效数据。