CAN协议
- 协议定位:异步 差分 半双工(收发数据分时进行)
- 协议分类
- 闭环总线网络 最大40m 最高1Mbps 并联120欧电阻
- 开环总线网络 最长1km 最高125kbps 串联2,2k欧电阻
- 电气标准
- 显性电平(高电平)代表逻辑0(强制规定)
- 隐性电平(高电平)代表逻辑1
- 如果总线上同时出现显性电平和隐性电平, 总线的状态会被置为显性电平,显性电平指的是高电平
当CAN收发器从CAN_Tx线接收到来自CAN控制器的低电平信号时(逻辑0),
它会使CAN_High输出3.5V,同时CAN_Low输出1.5V,
CAN的电路设计使得当总线中有一个从机处于CAN_H > CAN_L这种状态的时候,整体都将处于处于这种状态,
这就是为什么要将这种状态下表示为显性电平(dominant)
将显性电平定义为逻辑0的时候,这样发送的数据就会呈现线与的功能,1&0=0
这也就是为什么can的帧ID越小,帧的优先级越大,直接原因是逻辑0代表显性(dominant)功能,根本原因是电路实现的线与功能
因此在CAN中提到显性位则代表逻辑1,隐形位代表逻辑0
在分析can的报文的时候,我们更关心总线冲突的问题,因此多提显隐性的概念,由于逻辑1代表使能,这就能理解为什么RTR在使能的时候,给的是隐性电平
4.can中的每个数据位都由SS+PTS+PBS1+PBS2组成,主要目的是调节各段的长度以对采样点进行偏移调整
SS: sync segment 固定1tq 同步段 如果信号在首tq值中未能同步完成 会标记为错误帧
PTS: propogation time 1-8tq 传播时间段 补偿网络的物理延时时间
PBS1: phase buffer segment 1 1-8tq 相位缓冲段1 补偿边沿阶段误差
PBS2: phase buffer segment 2 2-8tq 相位缓冲段2 补偿边沿阶段误差
RSJW:ReSyncJumpWidth:3tq左右 重新同步跳转宽度 stm32中限制重新同步的单次调整值,可以多次小步调整当控制器设置的SJW极限值较大时,可以吸收的误差加大,但通讯的速度会下降。
5.CAN中的报文种类
数据帧
遥控帧
错误帧
过载帧
帧间隔
数据帧详解:(用于发送数据)
1.SOF start of frame:显性电平,通知即将传输
2.仲裁段:数据帧的ID(标准11位,扩展29位)
3.RTR(Remote Transmission Request Bit):远程传输请求位,数据帧内为显性电平,逻辑0,代表禁止
4.IDE位(Identifier Extension Bit):标识符扩展位,数据帧内为显性电平,逻辑0,代表禁止
5.SRR位(Substitute Remote Request Bit):替代标准格式中的RTR位,标准数据帧中SRR为逻辑0,代表禁止
标准帧结构:
1位sof + 11位ID + 1位RTR(逻辑0) + 1位IDE(逻辑0) + 1位R0+4位DLC + 0-8ByteDATA + 15位CRC+1位CRC界定符(隐性位) + ACK槽位+ACkK界定符+帧结束(7个隐性位)
扩展帧结构:
sof+11位ID+SRR(逻辑0)+IDE(逻辑1)。。。