I2C
总线有两根双向数据线,一根是数据线 SDA,一根是时钟先 SCL
数据格式
起始位+七位地址字节+一个读/写位+数据字节+一个应答+一个停止位
数据是八位的
主机或从机会返回一个应答(ACK)或非应答(NACK)信号,只有接收到应答信号后,主机才能继续发送或接收数据
0 写 1 读
应答信号 是从机给主机的,0表示没收到,1表示收到了
空闲: SDL SCL都是高电平
起始信号 SCL 高 SDL由高变低的跳变(跳低)
停止信号 SCL 高 SDL由低变高的跳变(跳高)
主设备在SCL线上产生一个时钟脉冲,将SDL线上传输一个数据位,当一个字节数据传输完之后,从设备将拉低SDA线,回传给主设备一个应答位,这就是一个字节的真正传输
一般操作
发送两次起始信号的目的是在读取操作期间,将总线上的数据方向正确切换。第一次起始信号将写入信息到从机中(第一次通信),第二次起始信号(第二次通信)是往主机传输写入
注意读过程第二次通信发送要读取的从机地址(本质上是操作系统将从机寄存器上的值写入主机)
在连续读(或者写的时候)地址会递增(要读取或者写入寄存器的地址),意思是我们在第一次读写的是提供一个起始地址,后续连续读写会自己往一个内存进行
当SCL高,SDA从高变低,就是START
当 SCL 高,SDA从低变高,就是STOP
主机将地址发送到总线上,从设备匹配上就会做出回应
开漏输出和推挽输出的区别?iic为什么要用开漏输出
SDA 和SDA必须都是(开漏+上拉)
推挽输出是高低电平都具有驱动能力
开漏输出,实现多设备共享总线
高电平没有驱动能力需要借助上拉电阻完成对外驱动
SPI
模拟spi 数据帧格式 8位地址+8位数据
四条线
SCLK :串行时钟,用来同步数据传输,由主机输出
MISO:主机输入,从机输出(数据来自从机)
MOSI: 主机输出,从机输入(数据来自主机)
SS:片选,片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号)
每个从机都需要一条单独的SS线
信号采集四种方式
1、只有时钟信号是上升沿(1),数据(mosi)采集才有效
2、只有在时钟的下降沿有效
数据格式
八位数据位
起始:
终止:
spi数据通信的流程
1、主设备发起信号,将cs/ss拉低,启动通信
2、主设备通过发送时钟信号,来告诉从设备进行读写操作,它将立即读取数据线上的信号,这样就得到了一位数据
3、主机将要发送的数据写到发送数据缓存区,缓存区经过移位寄存器,串行移位寄存器通过MOSI信号线将字节一位一位的的移动到接收缓存区
4、从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机,同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就可以交换
数据传输
在SPI一个周期内,完成如下操作
1、主机通过MOSI线发生1位数据,从设备通过这根线读取这1位数据
2、从机通过MISO线发送1位数据,从设备通过这根线读取这1位数据
3、时钟使能线,当要和某个从设备通信就将之使能
这是通过移位寄存器实现的,主机和从机各有一个移位寄存器,且二者连接成环
UART(只能两个设备之间通信)
RXD、 TXD 以及 GND 三条信号线,直接传输数据信号
数据是先发送低位再发送高位,发送0先拉低电平一段时间再发送,发送1先拉高电平一段时间再发送
数据构成:起始位+ 数据位 + 校验位 + 停止位
- 奇校验:如果数据位中的二进制值中1的个数为偶数,则校验位被设置为1,以保证整个数据(数据位+校验位)中1的个数为奇数。
- 偶校验:如果数据位中的二进制值中1的个数为奇数,则校验位被设置为1,以保证整个数据(数据位+校验位)中1的个数为偶数
数据包的内容由起始位、主体数据、校验位、停止位组成,通讯双方的数据包格式以及波特率要约定一样
·1、接口
UART仅通过两条TXD和RXD用于数据发和收
优缺点
1、只使用两条信号线,不需要时钟线,有校验位进行错误检测
2、传输速率比较慢