嵌入式系统中的常用总线协议讲解包括(UART、IIC、SPI等

嵌入式系统中的常用总线协议讲解包括(UART、IIC、SPI等 warren@伟 2024-03-07 17:56:34 546

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-为一对差分线,因此为半双工异步串行

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 1 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
warren@伟
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区