脚本宝典收集整理的这篇文章主要介绍了CAN的一些知识,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
根据STM32开发手册的一些笔记记录
CAN是一种异步通讯,只有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。
CAN物理层的形式主要有两种:闭环总线网络和开环总线网络
CAN节点是指能够挂载在CAN总线上的单元,并能够通过CAN总线实现各个节点间的通信,以实现复杂的控制过程。
连接多节点时,降低通信速率 ,可连接的节点增加;提高通信速率,则可连接的节点数量减少。
CAN通信节点由一个CAN控制器及CAN收发器组成,控制器和收发器之间通过普通的类似TTL逻辑信号来连接,CAN_Low和CAN_High是一对差分信号线。
CAN控制器用于实现CAN总线的协议底层以及数据链路层,用于生成CAN帧并以二进制的方式发送,在此过程中进行位填充、添加CRC校验、应答检测等操作;将接收到的二进制码进行解析并接收,在此过程中进行收发比对、去位填充、执行CRC校验等操作。
此外还需要进行冲突判断、错误处理等诸多任务。
CAN收发器(有时也叫做驱动器),用于将二进制码流转换为差分信号发送,将差分信号转换为二进制码流接收。
当CAN节点需要发送数据时,控制器把要发送的二进制编码通过CAN_Tx线发送到收发器,然后由收发器把这个普通的逻辑电平信号转换成差分信号,通过差分线CAN_High和CAN_Low线输出到CAN总线网络。
而通过收发器接收总线上的数据到控制器时,是相反的过程。
差分信号又称差模信号。CAN通信是半双工的,收发数据需要分开来进行。
显性电平对应逻辑“0”,隐形电平对应逻辑“1”。
CAN通信是半双工的,收发数据需要分开来进行。公用总线的缘故,整个网络中,同一时刻只能由一个通讯节点发送信号,其余节点在该时刻只能接收。
CAN通信异步通信,没有时钟线,需约定好波特率。
CAN协议将每个数据位的时序分解成4段,即:SS段、PTS段、PBS1段、PBS2段,4段加起来就是一个CAN数据位的长度。分解后的最小时间单位是Tq,一个完整的位由8~25个Tq组成。
下图是总线电平下每个位分解,位时序分解图:
假设1Tq=1us,19个Tq,则传输一位数据需要的实际为19us,这样每秒可以传输的数据位个数为:1*10^6 / 19 = 52631.58(bps),即为波特率。
硬同步和重同步。
CAN总线的位同步只有在节点检测到"隐性位"到“显性位”的跳变沿时才会产生。
相位误差:同步段需要跳变沿,当跳变沿不处于此同步段时,就会产生相位误差,该相位误差就是跳变沿与同步段结束位置直接的距离。
CAN使用两条差分信号线,因而只能表示一个信号,于是为了实现完整的传输信号功能,CAN协议便对数据、操作命令以及同步信号进行打包,打包后的内容便称为报文。
CAN规定5种类型的帧:数据帧、遥控帧、错误帧、过载帧、帧间隔
数据帧和遥控帧有标准格式和扩展格式两个,唯一不同时标识符(ID)不同。
帧类型 | 帧用途 |
---|---|
数据帧 | 发送单元通过此帧向接收单元发送信息 |
遥控帧 | 接收单元通过此帧向具有相同ID的发送单元请求数据 |
错误帧 | 当检测到错误时,向其他单元通知检测到错误 |
过载帧 | 接收单元用来通知它还没有准备好接收帧 |
间隔帧 | 用来将数据帧或遥控帧同前面的帧隔开 |
数据帧以一个显性位(逻辑0)开始,以一个7个连续隐性位(逻辑1)结束。
在开始和结束之间分为:仲裁段、控制段、数据段、CRC段、ACK段。加开始和结束一共有7个段。
标准帧和扩展帧都是通过一个显性电平表示帧起始,作用:通知各个节点将有数据传输,其他节点通过帧起始信号的电平跳变沿来进行硬同步。
表示优先级的段,主要内容为数据帧的ID信息。数据帧有标准格式和扩展格式两种,具体区别是ID信息的长度,标准格式的ID为11位,扩展格式的ID为29位。
通过显性电平的优先权和隐性电平的包容性进行仲裁:若两个节点同时竞争CAN总线的占有权,当它们发送报文时,若首先出现隐性电平,则会失去去总线的占有权,进入接收状态。
CAN协议中,ID决定着数据帧的优先级,也决定着其他节点是否也会接收这个数据帧。重要的信息,打包一个优先级高的ID,使他能够及时发送出去,因此使得CAN的扩展性大大加强,在总线上增加和减少节点并不会影响其他设备。
r1和r0为保留段,默认置为显性,它最主要的是由4位组成的DLC段,MSB先行(高位先行),DLC段表示的数字为0~8.
数据帧的核心内容,它是节点要发送的原始信息,由0~8个字节组成,MSB先行。
15位的CRC检验码,在CRC检验后,有一个CRC界定符,为隐性,将CRC检验码与后面的ACK段分隔开。
包括一个ACK槽位和ACK界定符,在ACK槽位中,发送端发送的为隐性位,接收端在这一位中发送显性位以表示应答,在ACK界定槽和帧结束之间由ACK界定符分隔开。
由发送节点发送7个隐性位表示结束。
以上是脚本宝典为你收集整理的CAN的一些知识全部内容,希望文章能够帮你解决CAN的一些知识所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。