参考:(B站创客学院视频)
https://www.bilibili.com/video/BV1B54y1v7k3?from=search&seid=5998296087674196595
基础知识
并行和串行
并行用的通道比较多,而且信号和信号直接按会有一点干扰,所以,嵌入式很多都是串行通信。
波特率
用于描述UART通信时的速度,单位为bsp(bit per second)
波特率规定了每一秒收发的位数,所以在异步通信中这个概念很重要。设置了波特率之后,收发双方掐表才能判断发送的位数。
uart
- 一种通信协议。在嵌入式用的最多。
- 通用的串行、异步通信总线
- 有两根线,一个rx 一个tx ,全双工
- 点对点通信
uart 通信过程/原理
串口在空闲的时候必须是高电平。 在串口协议中先发送低位再发送高位。比如:0x55,发送的是10101010。
uart是异步通信,收发双方没有统一的时钟,所以上面的帧格式可以看到,每过几个数据位(最多八个,也可以是4.5个),就会有一个停止位,还有一段空闲期。当发送新的数据时,起始位一开始,双方再一起同时掐表。通过这种方式来消除累计误差——如果收发时钟相差不多,比如一个一秒发1个字节,另一个0.9秒发一个字节,那么发的数据多的话累计误差是很大的。
IIC总线
- 串行 半双工
- 两根线 CLK SDA
- 多主机总线
- 用于近距离、低速芯片通信(传视频就算了吧)比较便宜
一般在同一个电路板上,几个芯片之间交互,用IIC比较多。
两个芯片想要用IIC通信的话,CLK SDA分别连到总线对应的CLK SDA上就行。
主机有发起和结束一次通信的权利,从机只能被呼叫,不能发起,也不能结束!!!!一次通信。当多个主机同时启用总线时,IIC可以检测并仲裁。每个连在IIC上的器件都有唯一一个地址,每个器件都能做主机和从机!!!同一时刻只有一个主机。
IIC总线通信过程
上图中:
每个器件地址只有7位,step2最后一位用来表明传输方向。
如果最后一位是“0”——>主机给从机发
·····“1”——>从机给主机
起始信号和终止信号
在空闲状态下,SDA和SCL都是高电平,如果SCL为高电平,SDA由高变低-》起始
SCL为高电平,SDA由低变高-》终止
字节传送和应答
IIC每次发东西,必须发8位,数据传送时先发送最高位。发送器发送完一个字节,接收器要有一位来回应发送器。也就是说一帧有九位。应答信号是一位低电平。如果非应答,就是高电平。
IIC总线在进行数据传送的过程中,SCL低电平的时候,SDA变换自己是高电平还是低电平。SCL变成高电平的时候,接收器读数据,这个时候发送器保持稳定。SCL这根线的作用就是在告诉发送器和接收器什么时候发数据(SCL低电平)什么时候接收数据(SCL高电平)。
典型的IIC时序
比较特殊的一种:
不加stop,防止总线被别的主机抢走。