历史上的今天
今天是:2024年10月08日(星期二)
2019年10月08日 | STM32 CAN总线通信学习笔记(一)
2019-10-08 来源:eefocus
一、CAN总线简介
CAN 是控制器局域网络(Controller Area Network, CAN)的简称。CAN采用数据块编码的方式,数据块根据帧的类型,能够让挂载在总线上的不同节点接收到相同的数据,再根据每个节点的配置对信息进行选择性处理(处理or丢弃)。CAN总线具有以下特点:
1. 多主控制
在总线空闲时,所有的单元都可以发送消息;具有CSMA/CA机制,即最先访问总线的单元可获得发送权;多个单元同时发送消息时,优先级高的标志(ID)单元可获得发送权,其中ID并不是发送的目的地址,而是表示访问总线的消息的优先级,仲裁机制会对消息ID的每个位继续比较,仲裁为高优先级的单元可继续发送消息,仲裁失败的单元则停止发送而进行接收工作。此处对CAN组网编程十分重要!!!
2. 系统柔软性
由于与总线相连的单元没对应的地址信息,因此在编程时比较方便,增加总线上的单元,已连接的其他的单元的软硬件以及应用层都不需要改变。
3. 通信速度
在通信距离小于40m时,速度最高1Mbps,最远可达10km,此时速率小于5Kbps。同一个网络中,所有的单元必须设定为同一个通信速度,类似于串口中要设置为相同的波特率。
4. 错误检测功能、错误通知功能、错误恢复功能
(1)所有的单元都可以检测错误;
(2)检测出错误的单元会立即同时通知其他所有单元;
(3)正在发送消息的单元一旦检测出错误,会强制结束当前的发送。被强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止。
5. 故障封闭
CAN总线可以判断出错误的类型是总线上暂时的数据错误(如外部噪声干扰)还是持续的数据错误(如单元内部故障、断线等),由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
6. 远程数据请求
可通过发送“遥控帧”,请求其他单元发送数据。
7. 连接节点
可连接的单元理论上没有限制,但连接单元数增加,应降低通信速度。
CAN 协议经ISO 标准化后有ISO11898 标准和ISO11519-2 标准两种。ISO11898 和ISO11519-2 标准对于数据链路层的定义相同,但物理层不同。

图 1 ISO11898、ISO11519-2 的物理层特征
由上图可以看出,在ISO11898中,CAN_H与CAN_L之差约为2.5V,对应显性电平逻辑0,CAN_H与CAN_L之差为0V,隐性电平对应逻辑1。在ISO11519中,CAN_H与CAN_L之差约为3V,对应显性电平逻辑0,CAN_H与CAN_L之差为1.5V,隐性电平对应逻辑1。
二、CAN协议
1、帧的种类
CAN协议包括下列表格中的五种类型的帧,其中数据帧和遥控帧有标准格式和扩展格式,标准格式有11bit的ID,扩展格式有29bit的ID。

2、帧的构成
(1)数据帧
格式如下:

图 2 数据帧的构成

上图中D表示显性电平,R表示隐性电平。标准格式中标识符(ID)有11bit,从ID28到ID18被依次发送,禁止高7位都为隐性(禁止设定:ID = 1111 111X XXX);扩展格式的ID有29bit,基本ID从ID28到ID18,扩展ID由ID17到ID0表示,禁止高7位都为隐性(禁止设定:ID = 1111 111X XXX)。
RTR位用于标识是否是远程帧(0:数据帧;1:远程帧);IDE位用于标识符选择位(0:使用标准标识符;1:使用扩展标识符);SRR位代替远程请求位,为隐性位,代替了标准帧中的RTR位。
(2)遥控帧
接收单元向发送的单元请求发送数据使用的帧,与数据帧的区别在于没有数据段。其他帧在后面很少会用到,这里不作过多描述。遥控帧格式如下:

图 3 遥控帧的构成
(3)优先级的决定
在总线空闲态,最先发送消息的单元获得优先发送权。当多个单元同时发送消息时,各个发送单元从仲裁段的第一位开始进行仲裁,连续输出显性电平最多的单元可继续发送。仲裁过程如下:

数据帧和遥控帧的优先级,具有相同ID的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权可继续发送。仲裁过程如下:

标准格式与扩展格式的优先级,标准格式ID与具有相同ID的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的RTR 位为显性位的具有优先权可继续发送。仲裁过程如下:

以上介绍CAN通信的特点以及主要两个帧组成,仲裁过程等,对CAN通信有了大概的了解。以上如有不足之处,望有识之士给予指正!
史海拾趣
|
我用 2416 的MCU 在修改 HIVE 注册表的时候 系统启动到 Windows CE Kernel for ARM (Thumb Enabled) Built on Jun 16 2009 at 10:08:15 INFO:OALLogSetZones: dpCurSettings.ulZoneMask: 0xb DCache: 128 sets, 4 ways, 32 line size, 16384 si ...… 查看全部问答> |




