嵌入式系统中的常用总线协议讲解包括(UART、IIC、SPI等
UART
1:UART有三根线RX、TX、GND(GND 的作用是提供一个共同的电位参考,确保发送和接收的信号能够正确地解析),由于没有时钟线所以是异步的,但是有收发两根数据线所以是串行全双工(收的同时也可以发)的,所以UART是串行异步全双工通信;
2:波特率主要有9600、115200单位是bit/s;
3:空闲状态下两根数据线必须是高电平,起始为低电平,结束为高电平,与SPI和IIC相反UART先发送LSB再发送MSB;
4:UART帧格式如下,一次发送一帧,一帧最多传送1B(8bits)数据(由于UART是异步的,两边时钟不同步可能会导致累积误差,因此一次只发一帧),一帧包含了1bit起始位,5-8bit数据位,1bit校验位,1/1.5/2bit停止位;校验位一般是奇偶校验(一般是数据位1的个数,0/1代表偶数可以编程决定),注意:奇偶校验只能检测错误但不能修正;
6:硬件连接需要注意交叉连接即RX接TX,TX接RX
RS232
1:将UART电平进行转换为 232电平即可,逻辑0:3~15V 逻辑1:-15~-3V;
2:无法消除共模干扰因此仅15M距离;
RS485
1:采用标准差分信号,具有较强的抗干扰能力,传输距离可达1200M;
2:两根线AB,A比B搞200mv为1,B比A高为0,两线之间有电阻Rt,主要是为了消除阻抗匹配造成的反射干扰;
3:采用主从式,轮巡的方式,主机逐一向从机寻址,当从机与主机发送的地址一致时,才建立通信(与IIC类似)。
IIC
1:总共两根线SCL(时钟线)、SDA(数据线);因为有时钟线所以是同步的,数据线仅一根因此为串行且是半双工的(两边不能同时在一根线上传送数据),故IIC是同步串行半双工(接收数据的同时不能发送数据)通信;
2:IIC的通信速率标准模式100Kb/s,快速模式400Kb/s,高速模式3.4Mb/s;
3:SCL(主机发出)和SDA(双向)在空闲状态下均是高电平,这样的话才能实现线与(全高才高,有低就低);同时因为iic设备引脚采用开漏输出结构(若使用推挽结构则只有高电平和低电平两种状态,一边高电平另一边低电平会导致短路),只有低电平和高阻状态,因此需要上拉电阻(3K-10K)来维持高电平;
4:IIC启动和停止条件(S/P)
启动:SCL为高电平时,SDA由高变低
停止:SCL为高电平时,SDA由低变高
注意:传输数据时,SCL为高电平,SDA保持不变,只能主机发S/P
5:数据传输格式
1:先传送高字节(MSB),在再传送低字节(LSB)
2:低电平发数据,高电平读数据
6:传输过程
1)主机发送启动信号;
2)主机发送一个Byte(其中前7为从机的设备地址,后面一位表示的是读还是写(0:主->从(主机写),1:从->主(主机读)))R/W信号决定了谁是发送器/接收器(除非再次发送启动信号,否则发送器、接收器不会改变)
3)从机发送响应信号ACK(一字节一应答)
4)发送器发送1Byte
5)接收器发送ACK
6)4、5循环
7)主机发送停止信号
7:传输时序
主机向从机发送数据:
主机从从机读数据:
主机先向从机写,再从从机读(最常用-读取寄存器内容)
1)主机先发送启动信号拿到总线控制权;
2)发送1Byte数据其中前7为从机的设备地址,后面一位0表示主机写,也就是主机为发送方,从机为接收方;
3)接收方发送应答信号;
4)发送方发送给八位数据(寄存器的地址);
5)接收方发送ACK(0收到,1未收到);
6)主机发送启动信号(重新开始一次通信,此时不发送P,因为怕被其他主机抢走总线控制权);
7)发送1Byte数据(从机地址+1-主机读)主机为接收方,从机为发送方;
8)从机应答;
9)发送方发送数据(寄存器内容);
10)主机回复(应答,不应答);
11)主机发送停止信号;
8:总线仲裁-低电平优先
总线上可能会有多个主机,这时候就需要总线仲裁:
1)在时钟信号的第一个周期,三个设备同时发送了起始信号来请求总线的控制权,此时均发送1,这时由于线与,SDA上的电平为高;
2)第二个周期三个设备均发送高电平,此时SDA为高;
3)第三个周期均发送低电平,SDA为低;
4)第四个周期AB发送高,而C发送低,由于线与SDA为低,此时C获胜,获得总线控制权。
9:I2cdetect
语法i2cdetect [-y][-a][-q|-r]i2cbus [first last]
参数
y:关闭交互模式,使用该参数时,不会提示警告信息。
a:扫描总线上的所有设备
q:使用SMBus的“quick write”命令进行检测,不建议使用该参数
r:使用SMBus的“receive byte”命令进行检测,不建议使用该参数
i2cbus:指定i2c总线的编号
first、last:扫描的地址范围
返回值
'-':表示该地址被检测,但是没有芯片应答
'UU':表示该地址当前由内核驱动程序使用
'**':** 表示以16进制表示的设备地址编号,如“68”
SPI
1:总共4根线,SCLK(同步),MOSI、MISO数据线(两根所以串行全双工),CE片选线,因此为同步串行全双工通信;
2:SPI的速率为10M-50Mb/s;
3:SPI一般不允许多主机,通信的启动和停止均由主机决定;
4:时序图如下,由于不同厂家的SPI设备的极性(CPOL)和相位(CPHA)各不相同,所以主机的极性和相位是可以调节的,故有四种模式;其中极性表示的是SCl空闲的时候是什么状态,cpol为0是,scl空闲为低电平,反之为高电平;CPHA=0表示SCL周期的第一个时钟沿(上升沿或下降沿)进行数据采样(读数据),CPHA=1表示SCL周期的第二个时钟沿进行数据采样(读数据)。
CPOL=0 CPHA=0表示SCL空闲状态为低电平(此时第一个时钟周期为上升沿),在上升沿读数据,下降沿发数据
CPOL=0 CPHA=1表示SCL空闲状态为低电平(此时第一个时钟周期为上升沿),在上升沿发数据,下降沿读数据
CPOL=1 CPHA=0表示SCL空闲状态为高电平(此时第一个时钟周期为下降沿),在下降沿读数据,上升沿发数据
CPOL=1 CPHA=1表示SCL空闲状态为高电平(此时第一个时钟周期为下降沿),在上升沿读数据,下降沿发数据
5:SPI无需应答,因此发完1B就可以再发1B,速度更快;
6:SPI和IIC的异同点
相同点:
1)均是串行、同步;
2)均采用TTL电平(高低电平区分0、1),故传输距离较短;
3)均采用主从模式。
不同点:
1)IIC半双工,SPI全双工;
2)IIC收到1B就要应答,SPI不用
3)IIC启动通信需要发送1B地址进行寻址,SPI使用CE进行片选;
4)SPI的极性和相位可以调节,IIC固定
usb
1:即插即用、热插拔;
2:采用主从方式,主机负责管理所有设备的连接与删除、发起结束通信;
3:USB2.0 60MB/s USB3.0 640MB/s;
4:USB理论可以接127个USB设备,独立供电5V 500mA
5:采用翻转不归零NRZI进行编码,电平保持为1,电平翻转为0;
可以这么理解,通过电平去推理编码,
6:USB总共四根线 VCC、GND、D+、D-,D+ D-为一对差分线,因此为半双工异步串行
- 分享
- 举报
-
浏览量:3733次2020-08-19 16:34:45
-
浏览量:1296次2022-12-27 08:55:13
-
浏览量:2251次2020-08-17 18:01:42
-
浏览量:2359次2020-08-20 17:57:43
-
浏览量:2360次2020-08-19 16:46:46
-
浏览量:1582次2020-08-19 16:43:27
-
浏览量:482次2023-08-24 16:04:19
-
浏览量:2369次2024-01-25 15:00:06
-
浏览量:2326次2020-08-20 18:03:14
-
浏览量:2015次2020-08-17 18:04:26
-
浏览量:1999次2020-08-17 18:06:38
-
浏览量:1885次2020-08-19 16:45:18
-
浏览量:2108次2020-08-19 16:49:12
-
浏览量:3222次2020-08-17 18:05:11
-
浏览量:1928次2020-08-20 18:01:22
-
浏览量:480次2023-08-17 14:14:03
-
浏览量:1850次2020-08-17 18:03:03
-
浏览量:2338次2020-08-19 16:47:34
-
浏览量:2691次2020-12-16 10:07:26
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
warren@伟
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明