目录
1. CAN(Controller Area Network 控制器 域 网络)
2. UART(Universal Asychronous Receiver Transmitter)
1. CAN(Controller Area Network 控制器 域 网络)
1.1 CAN简介
异步半双工串行通信协议
1.1.1 总线制
(1)CAN由一对差分对(两条线)CANH和CANL组成
(2)CANH电压比CANL高视为逻辑0(显性电平),否则为逻辑1(隐形电平)
显性电平与阴性电平
(3)多个设备可以连接到同一条CAN上
(4)总线设备通过ID号区分
(5)ID号长度为11位(标准长度)或29位(拓展长度)
1.1.2 CAN2.0b标准
(1)最大速率1Mbps
(2)一组数据称作一帧,分为数据帧和远程帧(不常用),远程帧不传输数据
(用来告诉设备,马上发送数据)
(3)数据帧最多传输8个字节的数据
(4)每一帧都有CRC校验
1.1.3 CAN FD 标准
(1)最大速率可达8Mbps
(2)数据帧最多可传输64字节数据
1.1.4 CAN的层(传输层、数据链路层、物理层)
ISO/OSI基本参照模型
ISO/OSI基本参照模型和CAN协议
CAN RX/CAN TX需要经过CAN收发器(Transceiver)才能被转换为对应的差分电平(CAN H/CAN L)。
一般CAN差分信号的电压为0~5V,也可以0~3.3V(不建议,兼容性差)
1.1.5 ISO 标准化的CAN 协议
(1)ISO11898
ISO11898 是通信速度为125kbps-1Mbps 的CAN 高速通信标准。
(2)ISO11519
ISO11898 是通信速度为125kbps-1Mbps 的CAN 高速通信标准。
ISO标准化的CAN协议
ISO11898 与ISO11519-2 的物理层的规格不同,每种规格需要有专门的驱动IC与之相对应。
1.2 CAN的总线结构
CAN有两个120Ω终端电阻,位于CAN布线两端
1.2.1 CAN总线特点
1、具有实时性强、传输距离较远、抗电磁干扰能力强、成本低等优点;
2、采用双线串行通信方式,检错能力强,可在高噪声干扰环境中工作;
3、具有优先权和仲裁功能,多个控制模块通过CAN 控制器挂到CAN-bus 上,形成多主机局部网 络;
4、可根据报文的ID决定接收或屏蔽该报文;
5、可靠的错误处理和检错机制;
6、发送的信息遭到破坏后,可自动重发;
7、节点在错误严重的情况下具有自动退出总线的功能;
8、报文不包含源地址或目标地址,仅用标志符来指示功能信息、优先级信息。
1.3 CAN时序
1. CAN每一位会被分成数个Time Quanta(Tq),一般在10个以上
2. CAN通信以Tq为基本时间单位
3. 每一位的时间长度可以调整以保证同步
4. 每一位被分为3段:同步段,BS1(图中Prop+Phase 1)和BS2
5. BS1和BS2中间会进行接收的采样
6. CAN的实际工作频率会比通信速率更高
1.4 CAN的帧
1.4.1 数据帧
数据帧的构成
(1)帧起始:表示帧开始的段,1个位的显性位
数据帧(帧起始)
注:a. 总线上的电平有显性电平和隐性电平两种。
b.总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。
c.“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强)
(2)仲裁段:表示数据的优先级的段,标准格式与扩展格式在此构成有所不同
数据帧(仲裁段)
ID号:ID号长度为11位(标准长度)或29位(拓展长度)
注: a. ID标准格式的ID 有11个位。从ID28 到ID18 被依次发送。禁止高7 位都为隐性。
(禁止设定:ID=1111111XXXX)
b. 扩展格式的 ID 有29 个位。基本ID 从ID28 到ID18,扩展ID 由ID17 到ID0 表示。基本ID 和标准格式的ID 相同。禁止高7 位都为隐性。
(禁止设定:基本ID=1111111XXXX)
RTR位:区别远程帧(1)与数据帧(0)
仲裁
由于CAN定义2条信号线的电压差代表逻辑0和1,CAN两条信号线实质等效于串口一条线,且发送和接收不能同时进行。
当总线上连续3位的时间为1且没有正在传输的帧时,视为空闲状态,此时设备才能进行发送。
如果有2个或以上设备同时启动了发送,则会进入仲裁(Arbitration);
发送0更多的设备会赢得仲裁并继续发送。
由于CAN时序的规定,仲裁很难进入,只有2个设备在同一Tq内启动发送才会进入仲裁。
在总线空闲态,最先开始发送消息的单元获得发送权。
多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。
仲裁过程
(3)控制段
控制段由 6 个位构成,表示数据段的字节数。
标准格式和扩展格式的构成有所不同。
注:a. 保留位(r0、r1)
保留位必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平。
b. 数据长度码(DLC)
数据的字节数必须为 0~8 字节。但接收方对DLC = 9~15 的情况并不视为错误。
IDE位:区别ID号长度,11位(0),29位(1)
DLC(Data Link Control)位:数据长度
(4)数据段(标准、扩展格式相同)
数据段可包含 0~8 个字节的数据。从MSB(最高位)开始输出。
数据帧(数据段)
(5)CRC段(标准、扩展格式相同)
CRC 段是检查帧传输错误的帧。由15个位的CRC 顺序和1个位的CRC 界定符(用于分隔的位)构成。
注:CRC 顺序是根据多项式生成的CRC 值,CRC 的计算范围包括帧起始、仲裁段、控制段、数据段。接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。
(6)ACK段
ACK 段用来确认是否正常接收。由ACK 槽(ACK Slot)和ACK 界定符2个位构成。
数据帧(ACK段)
注:发送单元的ACK段:发送单元在 ACK 段发送2 个位的隐性位。
接收单元的ACK段:接收到正确消息的单元在ACK 槽(ACK Slot)发送显性位,通知发送单元正常接收结束。这称作“发送ACK”或者“返回ACK”。
发送ACK 的是在既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元(发送单元不发送ACK)。所谓正常消息是指不含填充错误、格式错误、CRC 错误的消息。
(7)帧结束
帧结束是表示该该帧的结束的段。由 7 个位的隐性位构成。
数据帧(帧结束)
注:Stuff bit连续的5个以上相同位中间会插入一个相反位(除结尾外)
1.4.2 遥控帧
遥控帧的构成
1. 数据帧和遥控帧的不同
遥控帧的RTR 位为隐性位,没有数据段。
没有数据段的数据帧和遥控帧可通过RTR 位区别开来。
2. 遥控帧没有数据段,数据长度码该如何表示?
遥控帧的数据长度码以所请求数据帧的数据长度码表示。
3. 没有数据段的数据帧有何用途?
e.g. 可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况下。
1.4.3 错误帧
错误界定符由 8 个位的隐性位构成。
过载帧:过载帧是用于接收单元通知其尚未完成接收准备的帧。
过载帧由过载标志和过载界定符构成。
(1)过载标志
6 个位的显性位。
过载标志的构成与主动错误标志的构成相同。
(2)过载界定符
8 个位的隐性位。
过载界定符的构成与错误界定符的构成相同。
1.4.4 帧间隔
帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。
过载帧和错误帧前不能插入帧间隔。
(1) 间隔
3 个位的隐性位。
(2) 总线空闲
隐性电平,无长度限制(0 亦可)。
本状态下,可视为总线空闲,要发送的单元可开始访问总线。
(3) 延迟传送(发送暂时停止)
8 个位的隐性位。只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。
附:推荐瑞萨科技的CAN入门书
2. UART(Universal Asychronous Receiver Transmitter)
2.1 UART简介
即通用异步收发器,是一种通用的串行、异步通信总线。总线共有两条数据线,可以实现全双工的发送和接收。
单工通信(A→B)
双工通信
半双工 全双工
半双工(A-B、B-A不能同时进行),全双工(A-B、B-A同时进行)
波特率:
波特率用于描述UART的通信速度,单位bps(bit per second)即每秒钟传送的bit数量。
2.2 UART数据帧格式
2.2.1 帧格式
每次一个字节,避免累计误差过大(异步通信 )。
空闲位:空闲时数据线为高电平状态,代表无数据传输。
起始位:发送1位逻辑0(低电平),开始传输数据。
数据位:5~8位的数据,先低位后高位,一般8位(1个字节)。
校验位(可无):奇偶校验,偶校验(传输数据包含校验位中1的个数为偶数,则校验位为“ 0”),奇校验(传输数据包含校验位中1的个数为偶数,则校验位为“1”)。
停止位:停止位是数据传输结束的标志,可以是1/1.5/2位的逻辑1(高电平)。
空闲位:高电平。
硬件连接
UART控制器
一般情况下处理器中都会集成UART控制器, UART进行通信时候只需对其内部的相关寄存器进行设置即可。
2.2.2 串口通信校验方式
串口通信过程中有五种校验方式:奇校验(ODD)、偶校验(EVEN),1校验(MARK) 、 0校验(SPACE),无校验(NONE)。
奇校验:每个字节传送整个过程中bit为1的个数是奇数个(校验位调整个数)。
偶校验:每个字节传送整个过程中bit为1的个数是偶数个(校验位调整个数)。
e.g. 如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。
如果是奇校验,校验位为1,这样就有3个逻辑高位。
1校验:校验位一直为1。
0校验:校验位一直为0。
无校验:没有检验位。
优缺点:
1. 奇偶校验的检错率只有50%,因为只有奇数个数据位发生变化能检测到,如果偶数个数据位发生变化则难以发现。
2. 奇偶校验每传输一个字节都需要加一位校验位,对传输效率影响很大。
3. 奇偶校验只能发现错误,但不能纠正错误。
2.3 UART存在的问题
(1)电气接口不统一
UART只是对信号的时序进行了定义,而未定义接口的电气特性;
UART通信时一般直接使用处理器使用的电平,即TTL电平,但不同的处理器使用的电平存在差异, 所以不同的处理器使用UART通信时一般不能直接相连;
UART没有规定不同器件连接时连接器的标准,所以不同器件之间通过UART通信时连接很不方便。
(2)抗干扰能力差
UART一般直接使用TTL信号来表示0和1, 但TTL信号的抗干扰能力较差,数据在传输过程中很容易出错
(3)通信距离极短
TTL信号的抗干扰能力较差,所以其通信距离也很短,一般只能用于一个电路板上的两个芯片之间的通信
3. RS232协议(基于UART,电气标准化)
3.1 RS232简介
RS232协议是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家、计算机终端生产厂家共同制定的用于串行通讯的标准; 该标准规定采用一个标准的连接器,标准中对连接器的每个引脚的作用加以规定,还对信号的电平加以规定。
3.2接口
该标准规定采用一个25引脚的DB-25连接器,标准中对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定; 后来IBM的PC机将RS232简化成了DB-9连接器,现在工业控制的RS-232接口一般只使用RXD、TXD、GND三条线。
3.3 电平信号
该标准规定逻辑“1”的电平为-5V到-15V,逻辑“0”的电平为+5V 到+15V,选用该电气标准的目的在于提高抗干扰能力,增大通信距离,其传送距离一般可达15m。
电平转换
虽然很多处理器中都会集成UART控制器,但处理器产生的信号一般都是TTL信号并不是符合RS232标准的信号,所以一般我们还需要在处理器外部去添加电路对信号的电平进行转换;
3.4 RS232存在的问题
1) 接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容,所以需要使用电平转换芯片才能与TTL电路连接
2) 通信速度较低
3) 易产生共模干扰,抗噪声干扰性弱
4) 传输距离较短(15m)
4. RS485协议(基于UART,电气标准化)
4.1 RS485简介
该标准由电信行业协会和电子工业联盟定义;使用该标准的通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号;该标准允许连接多个收发器,即具有多站能力,这样可以利用单一的RS485接口方便地建立起一个设备网络。
4.2 接口
RS485采用两线制(RS422四线制),这种接线方式为总线式拓扑结构,在同一总线上可以同时存在多个节点;因为采用两线制,数据的发送和接收都要使用这对差分信号线,发送和接收不能同时进行,所以只能采用半双工的方式工作,编程时也需要加以处理。
4.3 电平信号
RS485标准规定采用差分信号进行数据传输,两线间的电压差为+2V到+6V表示逻辑“1”,两线间的电压差为-2V到-6V表示逻辑“0”;使用差分信号能有效地减少噪声信号的干扰,延长通信距离,RS485的通信距离可以达到1500m;RS485接口信号的电平比RS232降低了,所以不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便地与TTL电路连接。
电平转换
虽然很多处理器中都会集成UART控制器,但处理器产生的信号一般都是TTL信号并不是符合RS485标准的信号,所以一般我们还需要在处理器外部去添加电路将TTL信号转换成差分信号。
4.4 RS485优势
接口的信号电平值较低,不易损坏接口电路的芯片,且与TTL电平兼容,可方便地与TTL电路连接通信速度快、抗噪声干扰性强、传输距离较远(1500m)、可实现多节点组网。
5. IIC总线
5.1 IIC简介
IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线;主要用于近距离、低速的芯片之间的通信;IIC总线有两根双向的信号线一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用。
IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误产生;每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;IIC总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器。
5.2 IIC总线通信过程
5.2.1 IIC通信过程
1.主机发送起始信号启用总线
2.主机发送一个字节数据指明从机地址和后续字节的传送方向
3.被寻址的从机发送应答信号回应主机
4.发送器发送一个字节数据
5.接收器发送应答信号回应发送器
… … (循环步骤4、5)
n.通信完成后主机发送停止信号释放总线
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
从机地址 | R/~W |
step4/5的发送器、接收器的确定由一个字节数据的最后一位决定,且确定后传送方向始终不变。
(主机起始信号 – 主机发送一个字节,寻址+方向 – 从机应答 – 发送器发送一个字节 – 接收器应答 – 发送器发送一个字节 – 接收器应答… - 主机停止信号)
IIC总线上传送的数据是广义的,既包括地址,又包括真正的数据
主机在发送起始信号后必须先发送一个字节的数据,该数据的高7位为从机地址,最低位表示后续字节的传送方向,'0'表示主机发送数据,'1'表示主机接收数据;总线上所有的从机接收到该字节数据后都将这7位地址与自己的地址进行比较,如果相同,则认为自己被主机寻址,然后再根据第8位将自己定为发送器或接收器。
5.2.2 起始信号和停止信号
SCL为高电平时,SDA由高变低表示起始信号
SCL为高电平时,SDA由低变高表示停止信号
起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态
停止信号产生后总线处于空闲状态
IIC总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后接收器必须发送1位应答位来回应发送器即一帧共有9位。
5.2.3 写与读,应答
IIC总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生变化,时钟线SCL为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定。
字节的传送与应答
IIC总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后接收器必须发送1位应答位来回应发送器即一帧共有9位
5.2.4 典型IIC时序
1.主机向从机发送数据
S | 从机地址 | 0 | A | 数据 | A | 数据 | A/~A | P |
2.从机向主机发送数据
S | 从机地址 | 1 | A | 数据 | A | 数据 | A/~A | P |
3.主机先向从机发送数据,然后从机再向主机发送数据
S | 从机地址 | 0 | A | 数据 | A/~A | S | 从机地址 | 1 | A | 数据 | ~A | P |
注:阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送;A表示应答, A非表示非应答,S表示起始信号,P表示终止信号
6. SPI总线
6.1 SPI简介
SPI(Serial Peripheral Interface)是串行外设接口的缩写,SPI是一种高速的、全双工、同步的串行通信总线;SPI采用主从方式工作,一般有一个主设备和一个或多个从设备; SPI需要至少4根线(3根线半双工),分别是MISO(主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、CS(片选)SPI使用引脚较少且布线方便,越来越多的芯片集成了这种通信协议。
寻址方式
当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(高电平或者低电平,根据从机而定)表示选中该从设备。
6.2 SPI通信
6.2.1 SPI通信过程
SPI总线在进行数据传送时,先传送高位,后传送低位;数据线为高电平表示逻辑‘1’,低电平表示逻辑‘0’;一个字节传送完成后无需应答即可开始下一个字节的传送; SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送。
6.2.2 极性和相位
SPI总线有四种不同的工作模式,取决于极性(CPOL)和相位(CPHL)这两个因素。
CPOL表示SCLK空闲时的状态
CPOL=0,空闲时SCLK为低电平
CPOL=1,空闲时SCLK为高电平
CPHA表示采样时刻
CPHA=0,每个周期的第一个时钟沿采样
CPHA=1,每个周期的第二个时钟沿采样
(1)CPOL = 0, CPHA = 0
(2)CPOL = 0, CPHA = 1
(3)CPOL = 1, CPHA = 0
(4)CPOL = 1, CPHA = 1
需要说明的是,对于一个特定的从设备来说,一般在出厂时就会将其设计为某种特定的工作模式;我们在使用该设备时就必须保证主设备的工作模式和该从设备保持一致,否则是无法进行通信的;所以一般我们需要对主设备的CPOL和CPHA进行配置。
6.3 IIC、SPI的异同
6.3.1 相同点
1.均采用串行、同步的方式
2.均采用TTL电平,传输距离和应用场景类似
3.均采用主从方式工作
6.3.2 不同点
1.IIC为半双工,SPI为全双工
2.IIC有应答机制,SPI无应答机制
3.IIC通过向总线广播从机地址来寻址,SPI通过向对应从机发送使能信号来寻址
4.IIC的时钟极性和时钟相位固定,SPI的时钟极性和时钟相位可调