CAN总线笔记
起源
在没有CAN总线之前,所有外设和控制器都是单线连接,导致线布局和数量巨大,错综复杂。
总线的含义就是所有信息都在这根线上传输,当然,CAN总线是两根。
CAN协议概念
CAN是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。由德国电气商博世公司在1986 年率先提出。此后,CAN 通过ISO11898 及ISO11519 进行了标准化。现在在欧洲已是汽车网络的标准协议。
CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准,而ISO11519-2是针对通信速率为125Kbps以下的低速通信标准。
CAN具有很高的可靠性,广泛应用于:汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。
批注
can节点:挂载在can总线上的一个单元,如ABS
can message:can节点之间的通信方式,由多条signal组成。
can signal:一条信息。
数据长度代码又称DLC(Date Length Code),用于规定数据场的字节数,DLC的编码规则如表所示;最大为8字节,最小为0字节;
首先每个 ECU是一个网络节点,每个网络节点可收发一些 Message,每个Message 由CAN signals构成。每个 CAN signal利用一个或多个连续的2进制位来表示承载的信息。下面就来举个列子简要介绍如何理解 CAN signal的定义。
参考链接:
https://www.cnblogs.com/autogeek/p/5173085.html
Intel格式编码:信号的低位(lsb)将被放在低字节(LSB)的低位。信号的起始位就是低字节的低位,从低字节向高字节去排布信号。
Motorola格式编码 :信号的低位(lsb)将被放在高字节(MSB)的低位。这样,信号的起始位就是高字节的低位,从高字节向低字节去排布信号。
candb ++使用说明
https://www.cnblogs.com/yao-zhang/p/11649379.html
can协议
CAN协议的特点
①,多主控制。
总线空闲时,所有单元都可发送消息,而两个以上的单元同时开始发送消息时,根据标识符(ID,非地址)决定优先级。两个以上的单元同时开始发送消息时,对各消息ID 的每个位进行逐个仲裁比较。仲裁获胜(优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
②,系统柔软性。
连接总线的单元,没有类似“地址”的信息,因此,在总线上添加单元时,已连接的其他单元的软硬件和应用层都不需要做改变。
③,速度快,距离远。
最高1Mbps(距离<40M),最远可达10KM(速率<5Kbps)。
④ ,具有错误检测、错误通知和错误恢复功能。
所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
⑤,故障封闭功能。
CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
⑥,连接节点多。
CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。
正是因为CAN协议的这些特点,使得CAN特别适合工业过程监控设备的互连,因此,越来越受到工业界的重视,并已公认为最有前途的现场总线之一。
数据帧
数据帧由7个段组成:
①,帧起始。
表示数据帧开始的段。
②,仲裁段。
表示该帧优先级的段。
③,控制段。
表示数据的字节数及保留位的段。
④,数据段。
数据的内容,一帧可发送0~8个字节的数据。
⑤,CRC段。
检查帧的传输错误的段。
⑥,ACK段。
表示确认正常接收的段。
⑦,帧结束。
表示数据帧结束的段。
模式
工作模式
①初始化模式(INRQ=1,SLEEP=0),即初始化过程
②正常模式(INRQ=0,SLEEP=0),即工作过程
③睡眠模式(SLEEP=1),即低功耗待机形式
测试模式
①静默模式( LBKM=0,SILM=1 ),只收不发
②环回模式( LBKM=1,SILM=0 ),只发不收及自发自收
③环回静默模式(LBKM=1,SILM=1),不发不收
调试模式
标识符筛选器
筛选器可配置为:屏蔽位模式和标识符列表模式。
标识符=ID=优先级,ID越小,优先级越高.
can的标识符是自己设定的,接收方自己筛选需要接受哪些标识符
屏蔽位模式
掩码,一种屏蔽和筛选技术
ID为期待标识符,掩码为必须匹配的位。即接收一组标识符。
标识符列表模式
ID为期待标识符,掩码和ID一样,所有位必须匹配,即接收的是一个标识符。
举例
例:设置筛选器组0工作在:1个32位筛选器-标识符屏蔽模式,然后设置CAN_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00。其中存放到CAN_F0R1的值就是期望收到的ID,即(STID+EXTID+IDE+RTR)最好是:0XFFFF0000。而0XFF00FF00就是设置我们需要必须关心的ID,表示收到的映像,其位[31:24]和位[15:8]这16个位的必须和CAN_F0R1中对应的位一模一样,而另外的16个位则不关心,可以一样,也可以不一样,都认为是正确的ID,即收到的映像必须是0XFFxx00xx,才算是正确的(x表示不关心)。
收发流程
发送流程
程序选择1个空置的邮箱(TME=1)->设置标识符(ID),数据长度和发送数据->设置CAN_TIxR的TXRQ位为1,请求发送->邮箱挂号(等待成为最高优先级)->预定发送(等待总线空闲)->发送->邮箱空置。
接收流程
CAN接收流程为:
FIFO空->收到有效报文->挂号_1(存入FIFO的一个邮箱,这个由硬件控制,我们不需要理会)->收到有效报文->挂号_2->收到有效报文->挂号_3->收到有效报文->溢出。
位速率
位速率由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位一般可以分为如下四段:
-同步段(SS)
-传播时间段(PTS)
-相位缓冲段1(PBS1)
-相位缓冲段2(PBS2)
这些段又由可称为 Time Quantum(以下称为Tq)的最小时间单位构成。
1 位分为4 个段,每个段又由若干个Tq 构成,这称为位时序。
位时间=1/波特率,因此,知道位时间,我们就可以知道波特率。
1 位由多少个Tq 构成、每个段又由多少个Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。
CAN时序
STM32F103,设TS1=8、TS2=7、BRP=3,波特率=36000/[(9+8+1)*4]=500Kbps。
STM32F407,设TS1=6、TS2=5、BRP=5,波特率=42000/[(7+6+1)*6]=500Kbps。
整车can网络
https://blog.csdn.net/helaisun/article/details/80172911
https://wenku.baidu.com/view/a61a51a1988fcc22bcd126fff705cc1755275fd5.html
参考链接:
https://www.openedv.com/