This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CAN协议基础

Guru**** 2455360 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/595328/can-protocol-basics

大家好,

由于我是CAN协议的新用户,我在学习期间有以下疑问,是否有人能帮助我理解这些疑问。

1.为什么显性比特在CAN协议中具有高优先级?

2.是否可以为两条消息分配相同的CAN ID? 如果是,那么仲裁如何处理此问题?

3.如果数据帧和具有相同消息ID的远程帧同时开始传输,则哪个帧(数据或远程)赢得总线?

4.总线中连接的节点具有不同的波特率,同步是如何发生的?

5.如何计算以 512 kbps的11位标识符传输CAN消息所需的时间?

6. UC如何知道接收的位是显性还是隐性?

提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Prakash,

    下面是一些有用的CAN物理层和协议概述,您可以参考:

    www.ti.com/.../sloa101a.pdf
    www.kvaser.com/.../

    要回答您的问题:

    1.显性位据说具有优先权,因为它们由CAN收发器强力驱动,而隐性位则不是驱动的。 这意味着,任何收发器处于主导地位时,整个CAN总线处于主导地位。 如果所有CAN收发器均为隐性,则CAN总线仅为隐性。

    2.否,仲裁要求发送消息的每个节点都有唯一的标识符字段。

    3.标识符后面的RTR位对于远程帧是隐性的,对于数据帧是显性的,因此在这种情况下,数据帧将赢得仲裁。

    4.总线上的每个节点都应配置为具有相同的波特率。 (如果使用CAN FD协议,仲裁部分和数据部分可能有单独的波特率,但在这种情况下,波特率配置仍需要保持节点到节点的兼容性)。

    5.每个比特所需的时间是波特率的倒数时间。 然后,消息的总时间将是传输的比特数乘以每比特时间加上网络中发生的任何传播延迟(例如,由于收发器延迟,电缆连接等)。

    6. CAN收发器(PHY)用于将显性/隐性总线状态转换为MCU可检测到的高/低逻辑状态。 显性位由逻辑低表示,隐性位由逻辑高表示。

    此致,
    最大
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Max,

    感谢您的回复。 请您详细解释一下CAN的计时计算。

    [报价用户="Max Robertson"]5. 每个位所需的时间是波特率的倒数时间。 然后,消息的总时间将是传输的比特数乘以每比特时间加上网络中发生的任何传播延迟(例如,由于收发器延迟,电缆连接等)。[/QUOT]

    例如,如果您考虑UART协议,则传输单个字节所需的时间也包括起始和停止位计时。 在同一个CAN中,位数较多,因此对于11位标识符和29位标识符,以512kbps的速度传输消息所需的时间将有所不同。 如果您知道任何关于CAN协议定时的详细说明页面,请告诉我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    普拉卡什

    是的,您说得对- CAN协议在其帧结构中引入了额外的开销位(如标识符字段),这使得整个帧所需的时间比仅数据部分所需的时间长。 只要您知道构成框架的不同字段,就可以计算总时间-您可以在我在上面的帖子中提供的链接中找到此信息。

    我希望这一点很清楚;如果您有疑问,请告诉我。

    最大
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Robertson,

    感谢您的回复。 能否提供一个示例计算,说明如何计算在CAN协议中以512kBit发送字节所需的时间?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Prakash,

    发送CAN数据包所需的时间为:
    (位时间)(位数)+(tPHR)+电缆延迟-通常为5ns/m +(tPLD)

    因此,在您的情况下,使用TCAN1.042万从CAN控制器到CAN控制器的计算结果为:
    (1.95us)(1字节= 8位)+ 75ns +电缆延迟-通常为5ns/m + 55ns

    CAN数据包的长度不是一个字节。 典型的CAN帧长度可能为108位,因此在这种情况下,通过10米电缆以512kbps的速率传输CAN数据包的时间为:
    (1.95us)(108)+ 75ns +(5ns/m)(10 m)+ 55ns = 210.7us (从CAN控制器到CAN控制器)。

    以下是一份应用报告,可帮助您更好地理解CAN协议: www.ti.com/.../sloa101b.pdf

    如果您还有其他问题,请告诉我。