微信链接网站怎么做,网站ping值,淄博网站网站建设,佛山网站建设787881 帧格式
帧格式可理解为定义了传输的数据#xff08;叫报文#xff09;应该“长什么样”来传输#xff0c;也为后续设定一些规则如错误检查机制提供了思路。 首先#xff0c;帧格式可分为以下5种类型#xff1a; PS#xff1a;CAN总线任意一个设备可当收也可当发#…1 帧格式
帧格式可理解为定义了传输的数据叫报文应该“长什么样”来传输也为后续设定一些规则如错误检查机制提供了思路。 首先帧格式可分为以下5种类型 PSCAN总线任意一个设备可当收也可当发CAN总线有两种数据传输方式广播式和请求式。
广播式CAN其中一个设备其不断地发送报文到总线上连接到总线上的其他设备“想收就收”。
请求式CAN中哪个设备有收数据的需求向发数据方发送一个请求发数据方收到请求后才发送报文到总线上。 1.1 数据帧
数据帧有两种格式标准格式和扩展格式。
图上的数字代表每一段对应的所占的位数不是点电平逻辑黑色粗线才是逻辑电平
颜色解释看图的最底下无论是标准格式还是扩展格式灰色代表逻辑0白色代表逻辑1紫色代表可0可1ACK位槽特殊情况白色灰色各占一半规定发送方必须白色即发送逻辑1接收方必须发送逻辑0。 1.1.1 标准格式
1SOF段之前段帧起始前总线空闲上一章提到高速CAN空闲为1黑色粗线为逻辑电平1。
2SOF帧起始必须为0表示开始发送了要与帧之前空闲时1区别故必须为0
3ID报文ID共11位紫色则视具体情况而定
4RTR远程请求标志位用于区分数据帧为0还是遥控帧为1现在是数据帧如必须为0
5IDE用于区分标准格式为0还是扩展格式为1这里为标准格式故必须为0
6r0保留位还未用到为了以后可能升级用目前先固定设为0。
7DLC表示数字段的长度数据段要多少字节
8DATA就是传输的数据
9CRC校验算法会对SOF到DATA的数进行自动检验得到一个检验码存在这个位置。
10CRC界定符设定为逻辑1
11ACK段ACK槽——ACK界定符ACK槽为发送方必须白色即发送逻辑1接收方必须发送逻辑0同时ACK界定符设定为逻辑1。理解这段可认为是发送方和接收方操作总线权力短暂交接的过程ACK段前后都是发送方在操作总线ACK段则是接收方在操作总线目的是为了让发送方方知道有设备接收了ACK槽前后要留有权力交接的时间故设定了CRC界定符和ACK界定符CRC界定符为逻辑1发送方释放总线若有设备接收了那么ACK槽就会接收方拉下总线故会出现逻辑0这样发送方就知道有设备接收到了接收方发出应答后又要交出总线的控制权故接收方在ACK界定符上要发逻辑1释放总线。
PS
数据的应答是一位一位进行的而不是等所有数据传输完接收方才来应答。ACK段可多个设备同时拉下总线。
13EOF帧结束设定为7个逻辑1表示帧结束了。
1.1.2 扩展格式
扩展格式是因为ID段不够用用了所以要加ID段的位数。 扩展格式为了要与标准格式的兼容再碰到IDE位前系统也不知道是标准格式还是扩展格式因此IDE前的两种格式的解析方式位数等必须一致除了帧起始扩展格式没有遇到IDE后则可分标准格式解析还是扩展格式解析即两种格式可以不一样了。 所以看到红色框内即遇到IDE前先都是11位ID。
此后标准格式为RTR位IDE为了与之一样扩展格式位SSRIDE其实SSR是无用的强制设定为1为的是与标准格式的RTR位对应。
遇到IDE位后扩展格式加进了18位ID后与标准格式RTR位开始完全一致。 1.2 遥控帧 看结构遥控帧无数据段DATARTR为隐性电平1与数据帧区分其他部分与数据帧相同。
这样理解遥控帧是请求式说明接收方向发送方请求发送那自然没有数据故没有数据段。
而当是请求式时需要数据帧和遥控帧配合先遥控帧配有一个ID发出给发送方发送方收到后以相同ID报文且用数据帧来发送数据根据后续仲裁规则当具有相同ID数据帧和遥控帧同时发送时数据帧优先则接收方可以收到数据。 1.3 错误帧
总线上所有设备都会监督总线的数据错误”或“格式错误”或“应答错误”这些设备便会发出错误帧来破坏数据同时终止当前的发送设备 设备默认处于主动错误状态当某设备处于主动状态时发生的错误太多就会进入被动错误状态。但无论是哪种状态但是设备不会乱发错误帧是当某设备检测出有错误时该设备才会发出错误帧即图示错误帧的波形。
设备处于主动状态时发出的错误帧的波形为6个显性位逻辑06个显性位逻辑0【用于延迟】错误界定符固定8个逻辑1
理解当总线上某一个设备处于主动状态发现错误时发出6个0相当于拉下总线当总线上的传输的数据有1时就会被破换掉因为0强于1之前提到那么最终其他设备收到的数据就被破换掉了。 设备处于被动错误状态时发出的错误帧波形为6个隐性位逻辑16个隐性位逻辑1【用于延迟】错误界定符固定8个逻辑1
理解当总线上某一个设备处于被动状态发现错误时发出6个1相当于放开总线就相当于自己这个设备自己破坏自己发的数据但不破坏总线上别人发的数据因为总线上数据是1的话就没影响是0的话0强于1也没影响。 两种错误帧都有6位用于延迟是因为当某一设备发出错误帧时可能会引起其他设备也出现错误那么其他设备也可能发错误帧相当于给一个延迟时间在来通过界定符来表示结束。有的同学可能回想主动发出的错误帧时发出了六个0如果刚好总线上的数据也是6个0那不是没有破换掉数据或者说不知道是错误帧还是数据这种情况其实是不可能发生的连续出现6个0或者6个的情况只能是错误帧因为CAN还设定了位填充规则文章末尾。 1.4 过载帧
当接收方收到大量数据而无法处理时其可以发出过载帧延缓发送方的数据发送以平衡总线负载避免数据丢失。
可以这样理解因为发送方的发送频率是其自己决定的当接收方接收不过来的时候接收方就可以发出一个过载帧来破坏掉这个数据过载帧和错误帧类似连续发送了6个0我们说错误帧的时候提到过这样会破坏数据发送方的数据没被收到那么发送方就会重试那么破坏和重试这个过程所用的时间就相当于给接收方延迟让它有机会慢点收数据。或者如果发送方有相应的处理机制收到过载帧后就会调整发送频率。 过载帧形式6个显性逻辑0延迟一部分未确定具体多少位0过载界定符8个1。 1.5 帧间隔
帧间隔的作用是将数据帧和远程帧与前面的帧分离开。
比如当设备连续发送数据帧时需要有帧间隔把这些数据帧分离开。 帧间隔也分主动状态和被动状态。
图上方为主动状态3位隐性电平逻辑1 总线空闲n位逻辑1
图下方为被动状态3位隐性电平逻辑1 延迟传送8位逻辑1 总线空闲n位逻辑1 2 位填充
数据帧和遥控帧发送到总线前其实是进行了位填充再发送到总线上的。
位填充规则发送方每发送5个相同电平后自动追加一个相反电平的填充位接收方检测到填充位时会自动移除填充位恢复原始数据。 以下通过下图几个例子来理解:
“即将发送”表示设备要发出去的数据”移除填充后”是接收方实际接受到的数据可以看到以下三个例子这两项都是对应一样的。
第一组
要发送的数据是100000110根据位填充规则连续发送了5个0后要在他后面追加一个相反电平1如“实际发送”/“实际接收”所示接收方最终接收的数据又会把这个追加的1移除。
第二组
要发的是10000011110同样连续5个0后补1得到100000111110发现补了一个1后又出现了连续5个1的情况则在后续再追加一个0得到1000001111100最后实际接收会把这两个填充位都移除。即位填充插入的数据位要和原始数据后续的数据位合并进行新的位填充判定。
第三组
要发011111111110连续5个1后补0得到0111110111110根据第二组得到的规则追加的0要和后续的位数一起进行为位填充规则判定发现无连续0但原始数据中又出现5个10111110111110故补0得到01111101111100同样最后实际接收会把这两个填充位都移除。 位填充作用:
增加波形的定时信息利于接收方执行“再同步”防止波形长时间无变化导致接收方不能确掌握数据采样时机。将正常数据流与“错误帧”和“过载帧”区分开标志“错误帧”和“过载帧”的特异性。就是我们前面讲错误帧时提到的不可能在总线上传输的数据出现连续6个相同电平如果出现必是错误帧或过载帧保持CAN总线在发送正常数据流时的活跃状态防止被误认为总线空闲。CAN总线规定当出现11个1后表示CAN总线处于空闲状态由上面例子的第三组可以看到传输的数据不可能是连续11个1的情况出现了则必是表示CAN总线处于空闲状态。 注以上均是通过学习参考文献、哔哩哔哩网站上江协科技官方号以及网络资源所得的个人经验如有侵权请联系我欢迎指正。