目录
- 前言
- 通信协议分类
- 1.串行与并行通信
- 2.同步与异步通信
- 3.串行通信数据传送方向
- 常见通信方式分类
- 不同分类协议需要额外处理的问题
- 各通信协议详解
- 一、UART(通用异步收发器)
-
- 二、IIC(集成电路总线)
- 1.接口连接方式
- 2.帧格式
- I2C总线仲裁与时钟发生
- 三、SPI(串行外围设备接口)
-
- 四、CAN(ISO国际标准化串行通信协议)
- 1.接口连接方式
- 2.两种总线标准
- ISO11898 标准---闭环总线网络
- ISO11519-2 标准---开环总线网络
- 3.差分信号
- 4.帧格式
- 1. 数据帧
- (1)帧起始(标准、扩展格式相同)
- (2)仲裁段(标准、扩展格式不同)
- (3)控制段(标准、扩展格式不同)
- (4)数据段(标准、扩展格式相同)
- (5)CRC段(标准、扩展格式相同)
- (6)ACK段(标准、扩展格式相同)
- (7)帧结束(标准、扩展格式相同)
- 2. 遥控帧(远程帧)
- 3. 错误帧
- 4. 过载帧
- 5. 帧间隔
- CAN优先级
- 位填充
- 位时序
前言
本篇文章仅为个人笔记,不是教程,其中一些图片引用于其他博客
更新中······
本文参考以及学习内容推荐
STM32F103标准库开发—目录
STM32F103标准库开发----Uart串口通信实验----初始化配置
STM32F103标准库开发----IIC主控实验----普通I/O口模拟----基本原理
STM32F103标准库开发----SPI实验----基本原理
STM32F103标准库开发----CAN总线通信实验----基本原理
通信协议分类
1.串行与并行通信
- 并行通信:数据的各位同时在多根数据线上发送或接收。
并行通信特点:控制简单,传输速度快;由于传输线较多,适用于短距离通信。 - 串行通信:数据的各位在同一根数据线上逐位发送和接收。
串行通信特点:控制复杂,传输速度慢;只需要一根数据线,适用于远距离通信。
2.同步与异步通信
- 同步通信:发送端和接收端必须使用同一时钟,是一种连续传送数据的通信方式。
特点:必须有同步时钟,传输信息量大,传输速率高,但是传输设备则为复杂,技术要求高。 - 异步通信:发送和接收端使用的是各自的时钟,是一种不连续的传输通信方式。
特点:不需要同步时钟,通信实现简单,设备简单。但是传输速率不高。
3.串行通信数据传送方向
- 单工:是指数据传输仅能沿一个方向,不能实现反向传输。
- 半双工:是指数据传输可以沿两个方向,但需要分时进行传输。
- 全双工:是指数据可以同时进行双向传输。
常见通信方式分类
通讯方式 | 串并行 | 同异步 | 单双工 | 主从模式 |
---|
UART | 串行 | 异步 | 全双工 | 对等 |
USART | 串行 | 同步异步 | 全双工 | 对等 |
IIC | 串行 | 同步 | 半双工 | 多主多从 |
SPI | 串行 | 同步 | 全双工 | 一主多从 |
CAN | 串行 | 异步 | 半双工 | 多节点 |
USB2.0 | 串行 | 异步 | 半双工 | 对等 |
USB3.0 | 串行 | 异步 | 全双工 | 对等 |
不同分类协议需要额外处理的问题
- 同异步:当没有时钟线(异步通信)时,要进行数据传输则需要实现同步,如uart的波特率,can的位时序等
- 主从模式:当主从模式为多节点或多主多从时,可能出现多方同时传输数据,造成数据冲突,这里需要进行仲裁,如iic的总线仲裁,can的数据优先级等
各通信协议详解
一、UART(通用异步收发器)
1.接口连接方式
2.帧格式
每个字符帧,包含起始位、数据位,校验位和停止位。
起始位 | 数据位 | 校验位 | 停止位 |
---|
1bit | 5~9 bit | 0~1 bit | 1~2 bit |
- 空闲位: 处于逻辑“1”状态,即高电平,每个字符之间都会有一段空闲位,表示当前线路上没有数据传输。
- 起始位: 处于逻辑”0”状态,即低电平,表示数据传输的开始。因为总线空闲时为高电平所以开始一次通信时先发送一个明显区别于空闲状态的信号,即低电平。
- 数据位: 起始位之后就是要传输需要传输的数据,数据可以是5,6,7,8,9位构成一个字符,一般都是8位。先发送最低位最后发送最高位,使用低电平表示0,高电平表示1,完成数据位的传输。
- 校验位: 数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。校验方法:奇校验(odd)、偶校验(even)以及无(noparity)。
- 停止位: 一个字符帧数据的结束标志,可以是1位、1.5位、2位的高电平,表示数据传输的结束。
波特率
波特率:每秒钟传输的数据位数(bit)。因UART通信为异步通信,故在进行传输之前,双方一定要设置同一个波特率。
二、IIC(集成电路总线)
1.接口连接方式
2.帧格式
- 空闲状态:数据线SDA和时钟线SCL都是处于上拉电阻状态。
- 起始信号:当时钟线SCL为高期间,数据线SDA由高到低的跳变。
- 停止信号:当时钟线SCL为高期间,数据线SDA由低到高的跳变。
- 应答信号:发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。
- 应答信号为低电平时,规定为有效应答位(ACK),表示接收器已经成功地接收了该字节;
- 应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
- 对于反馈有效应答位ACK的要求是:接收器在第9个时钟脉冲之前的低电平期间将数据线SDA拉低,并且确保在该时钟的高电平期间为稳定的低电平。 如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放数据线SDA,以便主控接收器发送一个停止信号P。
- 时序要求
- 数据有效性
IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定;只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
即:数据在时钟线SCL的上升沿到来之前就需准备好。并在在下降沿到来之前必须稳定。
- 延时时间
- 数据传送
主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。
A、主机向从机发送数据,数据传送方向在整个传送过程中不变。
有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。
B、主机在第一个字节(寻址字节)后,立即由从机读数据。
在从机产生响应时,主机从发送变成接收,从机从接收变成发送。之后,数据由从机发送,主机接收,每个应答由主机产生,时钟信号仍由主机产生。若主机要终止本次传输,则发送一个非应答信号(A),接着主机产生停止条件。
C、在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相 。
(A表示应答,/A表示非应答(高电平)。S表示起始信号,P表示终止信号。)
I2C总线仲裁与时钟发生
在多主的通信系统中。总线上有多个节点,它们都有自己的寻址地址,可以作为从节点被别的节点访问,同时它们都可以作为主节点向其它的节点发送控制字节和传送数据。但是如果有两个或两个以上的节点都向总线上发送启动信号并开始传送数据,这样就形成了冲突。要解决这种冲突,就要进行仲裁的判决,这就是I2C总线上的仲裁。
A、 SCL线的同步(时钟同步)
SCL同步是由于总线具有线“与”的逻辑功能,即只要有一个节点发送低电平时,总线上就表现为低电平。
当所有的节点都发送高电平时,总线才能表现为高电平。
由于线“与”逻辑功能的原理,当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号。这就是SCL的同步原理。
B、 SDA仲裁
SDA线的仲裁也是建立在总线具有线“与”逻辑功能的原理上的。
节点在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致。是,继续发送;否则,退出竞争。
SDA线的仲裁可以保证I2C总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失。总线系统通过仲裁只允许一个主节点可以继续占据总线。
C、 仲裁过程
DATA1和DATA2分别是主节点向总线所发送的数据信号;
SDA为总线上所呈现的数据信号,SCL是总线上所呈现的时钟信号。
当主节点1、2同时发送起始信号时,两个主节点都发送了高电平信号。这时总线上呈现的信号为高电平,两个主节点都检测到总线上的信号与自己发送的信号相同,继续发送数据。
第2个时钟周期,2个主节点都发送低电平信号,在总线上呈现的信号为低电平,仍继续发送数据。
在第3个时钟周期,主节点1发送高电平信号,而主节点2发送低电平信号。根据总线的线“与”的逻辑功能,总线上的信号为低电平,这时主节点1检测到总线上的数据和自己所发送的数据不一样,就断开数据的输出级,转为从机接收状态。
这样主节点2就赢得了总线,而且数据没有丢失,即总线的数据与主节点2所发送的数据一样,而主节点1在转为从节点后继续接收数据,同样也没有丢掉SDA线上的数据。因此在仲裁过程中数据没有丢失。
三、SPI(串行外围设备接口)
1.接口连接方式
接口 | 功能 |
---|
MISO | 主设备数据输入,从设备数据输出 |
MOSI | 主设备数据输出,从设备数据输入 |
SCLK | 主设备产生的时钟信号 |
CS | 片选信号 |
2.帧格式
SPI设备选择
SPI是[单主设备( single-master )]通信协议,这意味着总线中的只有一支中心设备能发起通信。当SPI主设备想读/写[从设备]时,它首先拉低[从设备]对应的SS线(SS是低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,[主设备]把信号发到MOSI实现“写”,同时可对MISO采样而实现“读”。
SPI数据发送接收
SPI主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。
1.首先拉低对应SS信号线,表示与该设备进行通信
2.主机通过发送SCLK时钟信号,来告诉从机写数据或者读数据
3.主机(Master)将要发送的数据写到发送数据缓存区(Menory),缓存区经过移位寄存器(0~7),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。
4.从机(Slave)也将自己的串行移位寄存器(0~7)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。
注意:SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。
SPI通信的四种模式
时钟极性(CPOL)定义了时钟空闲状态电平:
CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
时钟相位(CPHA)定义数据的采集时间。
CPHA=0,在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样。,在第2个边沿发送数据
CPHA=1,在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样。,在第1个边沿发送数据
SPI的三种模式
- 运行模式(Run Mode)
这是基本的操作模式 - 等待模式(Wait Mode)
SPI工作在等待模式是一种可配置的低功耗模式,可以通过SPICR2寄存器的SPISWAI位进行控制。在等待模式下,如果SPISWAI位清0,SPI操作类似于运行模式。如果SPISWAI位置1,SPI进入低功耗状态,并且SPI时钟将关闭。如果SPI配置为主机,所有的传输将停止,但是会在CPU进入运行模式后重新开始。如果SPI配置为从机,会继续接收和传输一个字节,这样就保证从机与主机同步。 - 停止模式(Stop Mode)
为了降低功耗,SPI在停止模式是不活跃的。如果SPI配置为主机,正在进行的传输会停止,但是在CPU进入运行模式后会重新开始。如果SPI配置为从机,会继续接受和发送一个字节,这样就保证了从机与主机同步。
四、CAN(ISO国际标准化串行通信协议)
1.接口连接方式
接口 | 功能 |
---|
CANH | 高电平CAN总线 |
CANL | 低电平CAN总线 |
2.两种总线标准
总线拓扑图
ISO11898 标准—闭环总线网络
闭环总线网络高速、短距离,它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个120 欧的电阻。
ISO11519-2 标准—开环总线网络
开环总线网络低速、远距离,它的最大传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个2.2千欧的电阻。
3.差分信号
CAN总线采用差分信号传输,通常情况下只需要两根信号线就可以进行正常的通信。
在差分信号中,逻辑0和逻辑1是用两根差分信号线的电压差来表示。
当处于逻辑1,CAN_High和CAN_Low的电压差小于0.5V时(0V),称为隐性电平(Recessive);
当处于逻辑0,CAN_High和CAN_Low的电压差大于0.9V时(2V),称为显性电平(Dominant)。
差分信号的传输的优点:
- 抗干扰能力强
- 能有效抑制它对外部的电磁干扰
- 时序定位精确
4.帧格式
帧 | 用途 |
---|
数据帧 | 用于发送单元向接收单元传送数据的帧 |
遥控帧 | 用于接收单元向具有相同 ID 的发送单元请求数据的帧 |
错误帧 | 用于当检测出错误时向其它单元通知错误的帧 |
过载帧 | 用于接收单元通知其尚未做好接收准备的帧 |
帧间隔 | 用于将数据帧及遥控帧与前面的帧分离开来的帧 |
1. 数据帧
数据帧由 7 个段构成。
(1)帧起始(标准、扩展格式相同)
帧起始是表示该帧开始的段。由1个位的显性位构成。
(2)仲裁段(标准、扩展格式不同)
标准格式 ---- 共12位:11位基本ID 和 1位RTR位
- 帧ID
标准格式的 ID 有 11 个位,从 ID28 到 ID18 被依次发送。
禁止高7位都为隐性(禁止设定:ID=1111111XXXX)。 - RTR位 ---- 远程传输请求位
用于区分数据帧和遥控帧的:显性电平 ---- 数据帧,隐性电平 ---- 遥控帧
扩展格式 ---- 共32位:11位基本ID 、1位SRR位、1位IDE位、18位扩展ID和1位RTR位。
- 帧ID
扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0 表示。基本 ID 和标准格式的 ID 相同。禁止高 7 位都为隐性(禁止设定:基本 ID=1111111XXXX)。 - SRR 位
只存在于扩展格式,它用于替代标准格式中的 RTR位。
由于扩展帧中的 SRR 位为隐性位,RTR 在数据帧为显性位,所以在两个 ID 相同的标准格式报文与扩展格式报文中,标准格式的优先级较高。 - IDE 位 ---- 标识符扩展位
用于区分标准格式与扩展格式:显性电平 ---- 标准格式,隐性电平 ----- 扩展格式 - RTR位 ---- 远程传输请求位
用于区分数据帧和遥控帧的:显性电平 ---- 数据帧,隐性电平 ---- 遥控帧
(3)控制段(标准、扩展格式不同)
标准格式:1位IDE位、1位r0保留位 和 4位DLC数据长度码
- IDE 位 ---- 标识符扩展位
用于区分标准格式与扩展格式:显性电平 ---- 标准格式,隐性电平 ----- 扩展格式 - 保留位 ---- r0
保留位必须全部以显性电平发送。
但接收方可以接收显性、隐性及其任意组合的电平。 - 数据长度码 ---- DLC
表示发送/接收的数据长度(字节)。
数据的字节数必须为 0~8 字节,但接收方对 DLC = 9~15 的情况并不视为错误。
扩展格式:2位 r0 和 r1 保留位 和 4位DLC数据长度码
- 保留位 ---- r0、r1
保留位必须全部以显性电平发送。
但接收方可以接收显性、隐性及其任意组合的电平。 - 数据长度码 ---- DLC
表示发送/接收的数据长度(字节)。
数据的字节数必须为 0~8 字节,但接收方对 DLC = 9~15 的情况并不视为错误。
(4)数据段(标准、扩展格式相同)
数据段可包含 0~8 个字节的数据。
从 MSB(最高位)开始输出。
(5)CRC段(标准、扩展格式相同)
CRC 段是检查帧传输错误的帧。
由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符(用于分隔的位)构成。
- CRC 顺序—15位
CRC 顺序是根据多项式生成的 CRC 值,CRC 的计算范围包括帧起始、仲裁段、控制段、数据段。
接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。 - CRC 界定符
用于分隔的位
(6)ACK段(标准、扩展格式相同)
ACK 段用来确认是否正常接收。
由 1位 ACK 槽(ACK Slot) 和1位 ACK 界定符 构成。
- ACK 槽(ACK Slot)
发送单元在 ACK 段发送 2 个位的隐性位。
接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,
通知发送单元正常接收结束。这称作“发 送 ACK”或者“返回 ACK”。 - ACK 界定符
用于分隔的位
(7)帧结束(标准、扩展格式相同)
帧结束是表示该帧结束的段。由 7 个位的隐性位构成。
2. 遥控帧(远程帧)
遥控帧由 6 个段组成,遥控帧没有数据帧的数据段且 RTR 位为隐性位。
3. 错误帧
错误帧由错误标志和错误界定符构成。
4. 过载帧
过载帧由过载标志和过载界定符构成。
5. 帧间隔
数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧分开。
过载帧和错误帧前不能插入帧间隔。
CAN优先级
在总线空闲态,最先开始发送消息的单元获得发送权。
多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。
连续输出显性电平最多的单元可继续发送。
- 数据帧和遥控帧的优先级
具有相同 ID 的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权,可继续发送。
数据帧 > 遥控帧 - 标准格式和扩展格式的优先级
标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位的具有优先权,可继续发送。
标准格式 > 扩展格式
位填充
位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。
位时序
为了实现位同步,CAN 协议把每一个数据位的时序分解成如下图所示的 SS 段、PTS 段、PBS1 段、PBS2 段,这四段的长度加起来即为一个 CAN 数据位的长度。
分解后最小的时间单位是 Tq,而一个完整的位由 8~25 个 Tq 组成。
采样点:
所谓采样点是读取总线电平,并将读到的电平作为位值的点。
位置在 PBS1 结束处。
各段的作用如下表所示:
- 硬件同步
接收单元在总线空闲状态检测出帧起始时进行的同步调整。
在检测出边沿的地方不考虑 SJW 的值而认为是 SS 段。 - 重新同步
在接收过程中检测出总线上的电平变化时进行的同步调整。
每当检测出边沿时,根据 SJW 值通过加长 PBS1 段,或缩短 PBS2 段,以调整同步。
但如果发生了超出 SJW值的误差时,最大调整量不能超过 SJW 值。
相位超前时
相位滞后时
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)