一、CAN简介
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。can的发明最初是为了减少汽车上的线束,随着汽车上通讯节点的增多,使用总线形式的通讯网络可以大大减少各个节点线束的连接,因此,can技术孕育而生。can总线发展经历了can 2.0、can fd、can xl,分别于1991年发布can2.0标准,2015年发布can FD标准,2020年发布can XL标准
CAN通信有如下特点
1、它的电气特性和rs485一样采用差分信号,差分信号保证了can总线通讯的可靠性和远距离通讯。
2、can总线采用多主通讯模式,每个can节点都能自主收发数据,不像rs485和i2c采用主从模式。
3、can总线采用短报文形式,can2.0数据段最多8字节,can fd 数据段最大64字节。
4、有id仲裁机制,id小的优先级高,保证优先级高的数据实时传输。
5、can的通讯方式是异步半双工,通讯前双方要约定波特率。
6、距离在40m一下通信速度能达到1Mb/s,距离10km速度能达到5kb/s。一般汽车中用到的速度是250kb/s和500kb/s居多
CAN结构模型如下图
应用层为软件部分
数据链路层主要是实现CAN协议部分。主要由CAN控制器完成
CAN物理层主要是将数据链路层的TTL信号转换为CAN差分信号。主要有CAN收发器完成
二、CAN 2.0物理层
1.can总线的电气信号 如下图
CAN_H - CAN_L = 2V表示显性,代表逻辑0
CAN_H - CAN_L = 0V表示隐性,代表逻辑1
2、一般can总线两端会各加一个终端电阻以减少can总线上的反射,一般为120欧姆。如下图
三、CAN 2.0数据链路层
1.CAN帧报文种类有如下几种
1.数据帧:用于发送节点向接收节点传送数据。
2.远程帧:用于某个接收节点向某个发送节点请求数据
3.错误帧:用于当某节点检查出错误时向其它节点通知错误的帧
4.过载帧:用于接收节点向发送节点通知自身接收能力的帧
5.帧间隔;将数据帧或远程帧与前面的帧分离的帧
2.数据帧帧格式
数据帧可分为标准数据帧和扩展数据帧
标准帧帧ID长度是11位,帧ID范围是0x000 - 0x7FF
扩展帧帧ID长度是29位,帧ID范围是0x00000000 - 0x1FFFFFFF
can报文数据帧格式如下图
1.帧起始: 由一位显性位组成。can总线在空闲时为隐形
2.仲裁段:仲裁段可设置id过滤(各个细分位如下图)
3.控制段: 主要说明数据段的数据长度,长度可以是1~8个字节(普通CAN)CANFD格式最大64字节
4、数据段:普通can总线的数据段可以是1~8个字节。
5.CRC校验段:CRC段有16bit组成,1-15bit存放从起始到数据段的校验值,第16bit是CRC界定符占1bit为隐性电平(1)。
6.ACK段: ACK段有两个bit组成。第一个bit是应答结果,第二个bit是ACK界定符。
ACK应答位:对于发送节点发送隐性电平(逻辑1)。
ACK界定符: 接收正确的节点发送显性电平(逻辑0)。通过总线线与结果(1&0)为显性电平(逻辑0)。发送节点根据这个来判断发送是否成功。
7、帧结束:帧结束有连续7bit隐性位组成
四、CAN填充位和采样点
1.填充位
为减少波特率误差带来的通讯错误,can协议规定,在信号的跳变沿时刻进行同步,保证波特率的准确性。为解决数据出现连续的隐性位或者显性位,can协议规定当出现连续5个相同电平时就插入一个相反电平的填充位。比如出现了连续5个显性电平,就在5个显性电平后面插入一个隐性电平。接收端也按照这个规则过滤出去填充位。
2.can采样点
当CAN波特率位500kbps时,1bit电平的持续时间为2us。can协议中将1bit的电平分为四段:
1.同步段(sync_seg)
2.传播时间段(prop_seg)
3.相位缓冲段1(phase_Seg1)
4.相位缓冲段2(phase_Seg2)
若将1bit电平时间分为10等分,1等分称为1个Time Quantum(1Tq)。为方便编程。大部分厂家将prop_seg和phase_Seg1和一起称为TSEG1,phase_Seg2称为TSEG2。如下图所示
sync_seg通常是固定的1Tq。
设置TSEG1和TSEG2时需要遵循一定的规则:
1、TSEG1 > TSEG2
2、TSEG2 > SJW(同步跳转宽度)
3、一般采样点设置在85%位置左右。
采样点和波特率可以通过一些公式计算:
采样点=(1+TSEG1)/(1+TSEG1+TSEG2)
位时间 = (1+TSEG1+TSEG2)*Tq。
can波特率 = (can时钟频率)/(1+TSEG1+TSEG2)
例如:can时钟频率为8MHZ,要将波特率设置为500kbps,可以设置TSEG1=12,TSEG2=3.带入公式
采样点=(1+12)(1+12+3) = 81%
波特率 = (8*1000)/(1+12+3) = 500kbps
采样点可以参考链接:http://www.eepw.com.cn/article/202004/411611.htm
五、can协议中的字节解析顺序
can报文的字节顺序格式分为Intel格式和Motolola格式。
例如A向B发送0x12A0,对于Inter格式来说先发送0xA0再发送0x12。
对于Motolola格式则先发送0x12,再发送0xA0.
Inter模式相当于小端模式,Motolola模式相当于大端模式。
标签:通信协议,总线,电平,发送,介绍,波特率,数据,节点 From: https://blog.csdn.net/sinat_37508529/article/details/139673549