一、接收方的数据采样:
由于CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间会使用约定好的波特率进行通讯。
并且CAN还会使用“位同步”的方式来对抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。
- CAN总线无时钟线,是通过约定波特率方式确定每一个数据位的时长
- 发送方以约定的位时长每隔一段固定时间输出一个数据位
- 接收方以约定的位时长每隔固定时间采样总线的电平,输入一个数据位
- 理想的采样点为数据位的中心
二、导致的问题:
- 接收方以约定的位时长进行采样,但是采样点没有对齐数据位的中心附件——————硬同步
- 接收方一开始正确,但时钟有误差,随者时间的增加,误差会越来越大,采样点就会产生偏移————再同步
三、位时序:灵活调整每个采样点的位置,每个段由Tq构成(系统时钟的预分频)
(在二进制的前提下,波特率=比特率)
- 同步段:一个位的输出从同步段开始,用于同步各个节点,跳变沿产生在此段内,固定长度-1个Time quantun
- 传播段:补偿信号通过网络和节点传播的物理延迟,传播的长度应能保证2倍的信号在总线延迟,长度可编程-1~8个Time quantun
- 相位缓存段:允许通过再同步对相位缓存段1加长或者相位缓存段2缩短(最大长度=SJW同步跳转宽度)、相位1末端进行采样、
长度可编程-1~8个Time quantun、加长和缩短是通过在同步补偿宽度值(SJW)=1~4Time quantun
位定时参数确定
四、同步规则:硬同步和再同步
- 一个位时间内只允许一种同步方式
- 任何一个“隐性”到“显性”的跳变都可以用于同步
- 硬同步发生在SOF,让所有接收节点调整各自当前位的同步段,使其位于发送的SOF位内。且只是当存在“帧起始信号”时起作用,无法确保后续一连串的位时序都是同步的。
- 再同步发生在一个帧的其他位场内,当跳变沿跳变沿落在了同步段之外。
- 在SOF到仲裁场有多个节点同时发送的情况下,发送节点对跳变沿不进行重新同步
硬同步:
- 每个设备都有一个位时序周期,当某个设备(发送方)先发送报文(此时的发送方已经是ss段),其他所有设备(接收方)收到SOF下降沿,接收方就会将自己位时序周期拨到SS段的位置,与发送方的位时序计时周期保持同步
- 只在SOF(帧起始)有效
- 硬同步后,所有的下降沿都在位时序的ss段,若没有误差,则后续所有的数据位的采样点必要对齐数据位的中心
以下为接收方的视角,红线为总线
再同步