USART,SPI,IIC通讯协议

这篇文章以咱们实际中最需要了解,最经常使用的方面进行说明。
1、USART通讯协议说明:
USART在应用中需要注意的点有:波特率和通讯位数。一般通讯时需要RX,TX,GND三根线就可以了。
波特率指每秒钟能传多少bit,也就是1bit所需要花的时间。例如波特率=115200,那么传送1bit所需要的时间就是1/115200约为8.6us,用示波器观察的时候可以看到1bit的脉宽时间基本就是8.6us左右。
通讯位数:USART包含有开始位,数据位,停止位,校验位。开始位是一个低电平,停止位是一个高电平,校验位根据用户需要。其中1位开始位,1位停止位,8位数据位或者9位数据位,1位校验位。
在这里插入图片描述
根据设备间的协议进行通讯。
一般我们平常使用的都是USART的异步通讯。
2、SPI通讯协议说明:
SPI通过时钟信号的驱动,对MOSI或MISO上的电平进行读取,一般数据长度有16位或者8位,不像USART有开始位结束位。
SPI在应用中需要注意的点有:CPOL时钟极性,CPHA时钟相位。一般通讯时需要SCLK(时钟信号),MOSI(主出从进),MISO(主进从出),CS(片选信号)这四根线。
CPOL时钟极性:用来配置SCLK的电平处于哪种状态时是空闲态或者有效态。例如:
CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
CPHA时钟相位:用来配置数据采样是在时钟信号第几个边沿。例如:
CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿
CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

把上述两个配置组合在一起:
在这里插入图片描述

CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

此外,作为SPI主机,我们在不向从机发送时,SPICLK尽量保持在高电平或者低电平。
在用户设置中要先定义好是高位先发(MSB First)还是低位先发(LSB First)。
3、IIC通讯说明
IIC只需要两根线:一条是串行数据线SDA,一条是串行时钟线SCL。(IIC是半双工,而不是全双工)。
显而易见,这两根线就是我们需要注意的点了。
关于IIC数据:
IIC在时钟(SCL)的高电平周期内,SDA线上的数据必须保持稳定,数据线仅可以在时钟SCL为低电平时改变。
在这里插入图片描述
关于IIC开始和结束
IIC起始:当SCL为高电平的时候,SDA线上由高到低的跳变被定义为起始条件,IIC结束:当SCL为高电平的时候,SDA线上由低到高的跳变被定义为停止条件,要注意起始和终止信号都是由主机发出的,连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号。总线在起始条件之后,视为忙状态,在停止条件之后被视为空闲状态。
在这里插入图片描述
关于主从机的通讯说明:
每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据,从机应答主机所需要的时钟仍是主机提供的,应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期,低电平0表示应答,1表示非应答
在这里插入图片描述
关于实际应用中的数据帧说明:
我们在实际应用中,IIC总线不仅有数据内容,还有设备地址部分。
在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。这是对于大部分芯片会按这样的方式进行设定。
每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。
一般我们会以下面的这种顺序进行主从机间的通讯:
在这里插入图片描述
应用比较多的是第三种方式,按以下流程进行:

  • 主机先发送一个起始信号S+需要响应的从机地址+0(表示数据传送方向,0可以表示写)
  • 从机收到主机信号后,发送应答信号A,也就是SDA = 0
  • 主机收到应答信号A后,发送从机的一个命令,对应实际的应用一般都是从机的寄存器地址,主机会把该从机地址下的一个寄存器地址进行发送
  • 从机收到主机的寄存器地址后,发送应答信号A 在这里插入图片描述
    在这里插入图片描述
    (上述两张图中,主机可以不发送P终止信号,一直进行占用,由于我们后面马上就要进行读取)
  • 主机再次发送一个起始信号S+需要响应的从机地址+1(表示数据传送方向,1可以表示读)
  • 从机收到主机信号后,发送应答信号A+对应发送的数据
  • 主机收到从机数据后,主机发送非应答信号,也就是SDA = 1
  • 完成后,主机发送终止信号P
    在这里插入图片描述
    在这里插入图片描述
    第3种方式就是按以下的时序进行通讯的:
    在这里插入图片描述

当然前两种方式也是可以的。
IIC的通讯方式除了单片机本身的硬件外,也可以用普通IO口进行模拟,一样可以达到同样的效果。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值