你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【ST学习小组】STM32F103的CAN 通信之通讯协议

[复制链接]
fxw451 发布时间:2012-6-26 10:56
CAN总线的通信模式
CAN是一种有效支持分布式控制[3]或实时控制的串行通信网络,可实现全分布式多机系统;可以用点对点,一点对多点以及全局广播几种方式传送和接受数据;CAN总线直接通信距离最远可达10Km(此时传输速率可能达到5Kb/s),通信速率最高可达1Mb/s(此时传输距离可能达到40m);且理论上CAN总线通信网络的节点数不受限制(实际上受CAN收发器芯片驱动能力的限制)。CAN总线基于下列5条基本规则进行通信协调:
1.总线访问:CAN是共享媒体总线,他对媒体的访问机制类似于以太网的媒体访问机制,机采用载波监听多路访问的方式。CAN控制器只能在总线空闲时发送,并采用硬同步,所有CAN控制器同步位于帧起始的前沿。为避免异步时钟因累积误差而产生错位,CAN总线中用硬同步后满足一定条件的跳变进行重同步。所谓总线空闲,就是网络上至少存在3个空闲位(隐性位)时网络的状态,也就是CAN节点在侦听到网络上出现至少3个隐性位时,才开始发送。
2.仲裁:当总线空闲时呈隐性电平,此时任何一个节点都可以向总线发送一个显性电平作为一个帧的开始。如果有两个或两个以上的节点同时发送,就会产生总线冲突。CAN总线解决总线冲突的方法比以太网的CSMA/CD方法有很大的改进。以太网是碰撞检测方式,即一旦检测到两个或多个节点同时发送信息帧时,即所有发送节点都退出发送,待随机时间后再发送。而CAN是按位对标识符进行仲裁:各发送节点在向总线发送电平的同时,也对总线上得电平进行读取,并与自身发送的电平进行比较,如果电平相同则继续发送下一位,不同则说明网络上有更高优先级的信息帧正在发送,即停止发送,退出总线竞争。剩余的节点则继续上述过程,直达总线上只剩下一个节点发送的电平,总线竞争结束,优先级最高的节点获得了总线的使用权,继续发送信息的剩余部分直至全部发送完毕。
3.编码/解码:帧起始域、总裁域、控制域,数据域和CRC序列均使用位填充技术进行编码。在CAN总线中,每连续5个同状态的电平插入一位与它相补的电平,还原时每5个相同状态的电平后的相补电平被删除,从而保证了数据的透明。
4.出错标注:当检测到位错误、填充错误、形式错误或应答错误时,检测出错条件的CAN控制器将发送一个出错标志。
5.超载标注:一些CAN控制器会发送一个或多个超载帧以延迟下一个数据帧或远程帧的发送。
在进行数据传送时,发出报文的单元成为该报文的发送器。该单元在总线空闲会丢失仲裁前始终为发送器。如果一个单元不是报文发送器,并且总线不处于空闲状态,则该单元就是接收器。
对于报文发送器和接收器,报文的实际有效时刻是不同的。对于发送器而言,如果知道帧的结束末尾一直未出错,则对于发送器报文有效。如果报文受损,将允许按照优先权顺序自动发送。为了能同其他报文进行总线访问竞争,总线一旦空闲,重发送立即开始。对于接收器而言,如果知道帧结束的最后一位一直未出错,则对于接收器报文有效。
构成一帧的帧起始、仲裁场、控制场和CRC序列均借助位填充规则进行编码。当发送器在发送的位流中检测到5位连续的相同数值时,将自动地在实际发送的位流中插入一个补码位。数据帧和远程帧的其余位场采用固定格式,不进行填充。出错帧和超载帧同样是固定格式,也不进行位填充
报文中的位流按照非归零吗(NRZ)方法编码,这意味着一个完整的位电平要么是显性要么是隐性。
CAN的分层结构
为了使设计透明和执行灵活,遵循ISO/OSI标准模型,CAN分为数据链路层(包括逻辑链路层LLC和媒体访问控制层MAC)和物理层,在CAN技术规范2.0A的版本中,数据链路层的LLC和MAC子层的服务和功能被描述为“目标层”和“传输层”。如图2-1为CAN的分层结构和功能示意图。
逻辑链路子层LLC子层的主要功能是报文滤波、超载通知和恢复管理。
媒体访问控制子层MAC子层的功能主要是传送规则,以及控制帧结构、执行仲裁、错误检测、出错标定和故障界定。MAC子层也要确定为开始一次新的发送,总线是否开放或者是否马上开始接收,位定时也是MAC子层的一部分。物理层的功能是有关全部电气特性不同的节点间位的实际传送。
1.jpg


图1 CAN的分层结构和功能

CAN总线报文的帧结构
报文传送有4种不同类型的帧表示和控制:数据帧携带数据由发送器至接收器;远程帧通过总线单元发送,以请求发送具有相同标示符的数据帧;出错帧有检测出总线错误的任何单元发送;超载帧用于提供当前的和后续的数据帧的附加延迟。数据帧和远程帧借助帧间空间与前帧分开。
1.数据帧
数据帧由7个不同的位场组成,即帧起始、仲裁场、控制场、数据场、CRC场、应答场和帧结束,数据长度可为0。CAN技术规范2.0B数据帧的组成如图2所示。
2.jpg



图2 数据帧的组成


在CAN技术规范2.0B中存在两种不同的帧格式,其主要区别在于标识符的长度,具有11位标识符的帧称为标准帧,而包括29位标识符的称为扩展帧。标准格式和扩展格式的数据帧结构如图3、图4所示。SRR:替代远程请求,IDE:标识位扩展位,RTR:远程发送请求位。

3.jpg

图3标准格式的数据帧



4.jpg

图4 扩展格式的数据帧


CAN技术规范2.0B对报文滤波特别加以描述,报文滤波器以整个标识符位基准[6]。屏蔽寄存器可用于选择一组标识符,以便映像至接收缓存器中,屏蔽寄存器每一位都必须是可编程的,它的长度可以是整个标识符,也可以仅是其中一部分。
(1) 帧起始(SOF)标志数据帧和远程帧的起始,它仅由一个显性位构成,只有在总线处于空闲状态时,才允许单元开始发送。所有单元都必须同步于首先开始发送的那个单元的帧起始前沿。
(2) 仲裁场由标识符和远程发送请求位(RTR)组成,如图5所示。

5.jpg

图5仲裁场组成


对于CAN技术规范2.0A,标识符的长度为11位,这些位一从高位到低位的顺序发送,最低位为ID.0,其中最高7位不能全为隐性。如图2-7为CAN技术规范2.0A数据帧格式。RTR位在数据帧中必须为显性,而在远程帧中必须为隐性对于CAN技术规范2.0A,标识符的长度为11位,这些位一从高位到低位的顺序发送,最低位为ID.0,其中最高7位不能全为隐性。RTR位在数据帧中必须为显性,而在远程帧中必须为隐性。
6.jpg



图6 CAN技术规范2.0A数据帧


对于CAN技术规范2.0B,标准格式和扩展格式的仲裁场不同,在标准格式中,11位标识符和远程发送请求位RTR组成,标识符位为ID.28--ID.18;RTR位在数据帧中必须为显性,而在远程帧中必须为隐性。
为区别标准格式和扩展格式,将CAN技术规范2.0A中的r1改记为IDE位。对于CAN技术规范2.0B,在扩展格式中,仲裁场:29位标识符ID.28--ID.0;替代远程请求SRR位(隐性位);标识位扩展位IDE(隐性位);远程发送请求位RTR。
SRR的全称是替代远程请求位[7](Substitute Remote Request BIT),SRR是一隐性位。它在扩展格式的标准帧RTR位上被发送,并代替标准帧的RTR位。因此,如果扩展帧的基本ID和标准帧的识别符相同,标准帧与扩展帧的冲突是通过标准帧优先于扩展帧这一途径得以解决的。
IDE的全称是“识别符扩展位(Identifier Extension Bit)”,对于扩展格式,IDE位属于仲裁场;对于标准格式,IDE位属于控制场。标准格式里的IDE位为显性,而扩展格式里的IDE位为隐性。通过判别SRR和IDE是否均为隐性识别为扩展格式,而不是标准格式的数据帧或远程帧。
CAN2.0B的扩展帧和CAN2.0A和CAN2.0B的标准帧一样,在数据帧中RTR位必须为显性,而在远程帧中必须为隐性。

收藏 评论9 发布时间:2012-6-26 10:56

举报

9个回答
fxw451 回答时间:2012-6-26 10:58:04

RE:【ST学习小组】STM32F103的CAN 通信之通讯协议

太多图片太麻烦了,直接上传文件,内容肯定比一般的要好。
fxw451 回答时间:2012-6-26 10:59:23

回复:【ST学习小组】STM32F103的CAN 通信之通讯协议

  CAN通讯协议.pdf (416.09 KB, 下载次数: 369)
莫寒尘 回答时间:2012-6-26 13:17:06

回复:【ST学习小组】STM32F103的CAN 通信之通讯协议

学习下 ~~
fxw451 回答时间:2012-6-26 16:25:30

回复:【ST学习小组】STM32F103的CAN 通信之通讯协议

回复第 4 楼 于2012-06-26 13:17:06发表:
学习下 ~~
 

有不对的地方还请指正!!
CSSTM32 回答时间:2012-8-22 22:56:22

回复:【ST学习小组】STM32F103的CAN 通信之通讯协议

学习学习
lhlvcitory 回答时间:2013-2-21 16:43:51

RE:【ST学习小组】STM32F103的CAN 通信之通讯协议

太好了,学习
落月枫情 回答时间:2014-3-3 10:50:47

回复:【ST学习小组】STM32F103的CAN 通信之通讯协议

多谢楼主分享多谢楼主分享多谢楼主分享
小桥流水 回答时间:2014-4-5 19:23:35

回复:【ST学习小组】STM32F103的CAN 通信之通讯协议

很好呀,学习了。
abclsl 回答时间:2014-11-28 12:33:44
SRR现在想改成dominant 怎么实现,现在我控制别人的can驱动器,别人的是接收不是recessive ,怎么办?有没有好的办法,更改硬件或者软件?

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版