CAN总线与485通信
以下部分来源野火教程、普中教程和百度的内容,实现功能要紧,后期有时间再整理。
1.差分信号
1.概述
差分信号,又叫差模信号,通过两根信号线上的电压差值来表示逻辑0和逻辑1。表示逻辑时,这两个信号线的振幅相等,相位相反。
2.优点
- 抗干扰能力强,当外界存在噪声干扰时,几乎会同时耦合到两条信号线上,而接收端只关心两个信号的差值,所以外界的共模噪声可以被完全抵消
- 能有效抑制它对外部的电磁干扰,同样的道理,由于两根信号的极性相反,他们对外辐射的电磁场可以相互抵消,耦合的越紧密,泄放到外界的电磁能量越少。
通信的时候一般使用的是双绞线,其内部有两根信号线缠绕在一起。 - 时序定位精确,差分信号的开关变化是位于两个信号的交点,不同于普通信号依靠高低两个阈值电压判断,因而受工艺、温度的影响小,能降低时序上的误差,同时也更适合于低幅度信号。
由于差分信号线具有这些优点,所以在 USB 协议、485 协议、以太网协议及 CAN 协议的物理层中,都使用了差分信号传输
3.缺点
2.CAN协议
1. 概述
- CAN是控制器局域网络的简称,由研发和生产汽车产品著称的德国BOSCH公司开发。国际标准为ISO11519,是应用最广泛的现场总线之一。
- CAN具有高可靠性和良好的错误检测能力而被广泛的应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强及振动大的工业环境中。
- CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车量设计的J1939协议。
2.CAN物理层
1. 概述
CAN总线是通过差分信号来进行通信,其波特率和串口一样,需要提前约定好。CAN总线一下两种:
1.闭环网络
遵循ISO11898标准的高速、短距离网络、它的总线长度为40M,速度最高为1Mbps。总线两端要求有一个120欧的电阻
2.开环网络
CAN开环遵循ISO11519-2标准的低速、远距离网络,最大传输距离是1KM,速率为125kbps,两根总线独立,但要求每根总线串联一个2.2k欧的电阻
2.通信节点
CAN节点不同于I2C,不对节点进行地址编码,而是对数据内容进行编码,只要总线负载足够,节点理论不受限制。可以通过中继器增强负载。
3.CAN中的差分信号
1.高速CAN
也就是闭环网络。
逻辑1叫做隐形电平,两根线都是2.5V,即差值为0V。
逻辑0叫做显性电平,高电平3.5V,低电平1.5V,差值为2V。
类似于I2C的线与特性,当总线上一个输出逻辑1,一个输出逻辑0,则逻辑0可以认为具有优先的意味,显性电平的名字也是这样来的
。由此也说明CAN通信是半双工通信。
2.低速CAN
也就是开环网络。
逻辑1:1.75-3.25=-1.5V
逻辑0:4.0-1.0 = 3.0V
3.CAN协议层
1.概念
CAN使用位同步来实现总线电平的正确采样,确保通讯正常。
CAN协议把每一个数据位的时序分解成SS段、PTS段、PBS1段、PBS2段。这四段加起来即为一个CAN数据位的长度。分解会的最小时间单位为Tq,一个完整的位由8-25个Tq组成。
1.SS段
同步段,若通讯节点检测到总线上信号的跳变沿被包含在SS段的范围之内,则表示节点与总线的时序是同步的,当节点与总线同步时,采样点采集到总线电平即可被确认为该位的电平。大小固定未1TQ
2.PTS段
传播时间段,用来补偿网络的物理延时时间,是总线上输入比较器和输出驱动器延时总和的两倍。虽然这么说,但实际很难测试出这个值的大小,一般随便给个值,各个节点间确认好采样点在70%的位置就差不多了。
PTS的大小为1-8Tq,但STM32中没有这个段,这个段直接包含到了PBS1段中。
3.PBS1
用于补偿边阶段的误差,时间长度在重新同步的时候可以加长。初始大小可以为1-8Tq.
PBS2 的初始大小为2-8tq
由上,可以确定CAN的波特率,比如1tq=1us,则1s / 19tq = 52631.6bps
2.CAN报文
报文就是在数据段的前面加上传输起始标签、片选标签和控制标签,在数据的尾段加上CRC校验标签、应答标签和传输结束标签。
这样的报文被称为CAN的数据帧。
1. 数据帧 发送数据
1.概述
数据帧以显性位开始,7个连续的隐形位结束,在这之间有仲裁段、控制段、数据段、CRC段和ACK段
2.帧起始
帧起始信号只有一个数据位,是一个显性电平,它用于通知各个节点将有数据传输,其他节点通过帧起始信号的电平跳变沿来进行硬同步。
所谓硬同步,就是每个节点内部本身存在一个时序,当检测到总线上的的帧起始信号时,会与自身内部时序的位置进行比较,如果自身也处于起始位置,则说明自身与总线的时序是同步,否则,就需要将当前的时序位置设置为起始帧位置。
3.仲裁段
仲裁段主要由本帧数据的所属ID组成,分为长度11位的标准格式长度29位的扩展格式。在CAN中,ID除了决定接受者的地址,同时也决定着该帧的优先级。总所周知,CAN协议是广播。当同时有两个报文被发送时,总线会根据仲裁段的内容决定使用线与的特性哪个数据包能被传输,首先出现隐形电平的报文将失去总线的占有权,这也是其名称的由来。
4.RTR位
远程传输请求位,用来区分数据帧和请求帧的。显性电平表示数据帧,隐形电平表示遥控帧。所以数据帧的优先级大于遥控帧。
IDE位
标识符扩展位,用于区分标准格式和扩展格式,显性电平电平标准格式,隐形电平表示扩展格式。所以标准格式的优先级大于扩展格式。
5.SRR位
用于扩展模式中替代RTR位的,好像没有其他特殊作用。
6.控制段
R0和R1位保留位,默认为显性位。DLC为数据长度码,占4个数据位,表示一次最多传输8个字节。
7.数据段
要发送的数据,MSB先行。
8.CRC段
一段15位的校验码,一旦接受节点远处的CRC与收到的CRC不同,将会向发送节点反馈一个错误帧来请求重新发送。CRC部分一般由CAN控制器硬件来完成,出错时的处理则由软件控制最大重发数。
9.ACK段
包含一个ACK槽位和ACK界定符。类似I2C总线,在ACK槽位中发送接节点发送的是隐形位,接收节点在这一位中发送显性位表示应答。在ACK槽和帧结束之间由ACK界定符隔开。
10.帧结束
由发送节点发送的7个隐形位表示结束
2. 遥控帧 请求数据
3. 错误帧
4. 过载帧
5. 间隔帧
其他可以读一下CAN协议文档
4.STM32中的CAN开发
1.外设说明
1.概述
STM32的CAN外设
STM32中有bxCAN控制器,理解为基本的CAN控制器,支持CAN的2.0A和2.0B,也就是开环模式和闭环模式。最大速率为1Mb/s。可以自动的收发CAN报文,支持标准ID和扩展ID模式。具有三个发送邮箱,发送报文的优先级可以使用软件控制,还可以记录发送的时间。具有2个3级深度的FIFO,还可使用过滤功能只接收或不接收某些ID的报文,可以配置自动重发。但不支持DMA进行数据收发。
2.工作模式
STM32提供了4种工作模式,正常模式、静默模式、回环模式、静默模式。
静默模式可以理解为进行监听,只有数据1可以被发送,数据0将传输到自己的接收端
回环模式,传输到总线上和内部进行回环,可以用来自检。
回环静默数据 静默模式和回环模式的结合。可以用于热自检,即自我检查的时候不会干扰总线
3.控制器
STM32中CAN控制分为控制内核、发送邮箱、接收FIFO、验收筛选器、整体控制逻辑。STM32可以作为主设备和从设备。但只有主设备模式可以控制存储器访问控制器,所以作为从设备的时候也要打开主设备的时钟。
1.控制内核
1.说明
2.寄存器分析
2.发送邮箱
1.说明
2.寄存器分析
3.接收FIFO
1.说明
2.寄存器分析
4.筛选器
1.说明
STM32有28个少筛选器。每个筛选器可以设置为掩码模式和列表模式,每个筛选器有两个32位寄存器用作筛选数据,根据地址位寄存器可以配置为16位或者32位筛选ID。
列表模式为接收ID,可以筛选2个或者4个ID;
掩码模式为1个或者两个ID,另外32位为1个或2个掩码值,掩码值为1,ID号对应位可随意设置,否则消息的ID必须和ID保持一致。
注意,掩码16位模式下,设置顺序为ID1 ID2 MK1 MK2,这一点可以通过阅读库函数源码得知