串口总线协议详解
串口一般是2根线,一个TX,一个RX,可进行异步全双工通信
1.串口发送数据,低位在前,高位在后。
2.串口线上面,空闲的时候是高电平的,发送数据的时候:
<1>第一个bit位:起始位,是0,总线从高变为低,这个0持续的时间是 1/波特率(例如波特率是4800,那么这个0的持续时间就是 1/4800 = 0.000208s = 208us)
<2>紧接着就是数据位,这里我们以8位数据位来说明,例如发送的是’1’,
它的ascii码是49=0x31=0b0011 0001, 那么首先发的顺序就是: 1 0 0 0 1 1 0 0
<3>奇偶校验位: 发送的数据位中的1的个数,例如发送0x31, 那么就是奇数,奇偶校验位就是0, 如果是偶数那么奇偶校验位就是1,一般可能不用奇偶校验位
<4>停止位,一段高电平的脉冲,T=1/波特率
<5>如果接着发数据,就会重复1->4的步骤
I2C总线协议详解
I2C有两根线,一个SCL,一个SDA,这两根线空闲状态下都是应该拉高的
1.I2C总线在进行数据传输的时候,时钟信号为高电平期间,数据线上的数据是必须要保持稳定的,
只有时钟线上面为低电平的时候,数据线上的高低电平才允许变化
2.起始信号:SCL在高电平期间,SDA从高到低的跳变
终止信号:SCL在高电平期间,SDA从低到高的跳变
3.各种操作之后,scl、sda所处的状态:
<1>起始信号后:起始之后SDA和SCL都为0
<2>终止信号后:结束之后保持SDA和SCL都为1;表示总线空闲
<3>主机发送一个字节后:发送完一个字节SCL=0,SDA=1
<4>主机读取一个字节:接收完一个字节SCL=0,SDA=1
4.非应答:主机/丛机不产生应答信号
<1>如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非应答”通知主机,主机则应发出终止信号以结束数据的继续传送
<2>当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。
5.I2C对数据的发送/接收都是从最高位开始的
6.在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。也有10位地址
7.在总线的一次数据传送过程中,可以有以下几种组合方式:
<1>主机向从机发送数据,数据传送方向在整个传送过程中不变
<2>主机在第一个字节后,立即从从机读数据
<3>在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相
SPI总线协议详解
参考来源:https://www.cnblogs.com/jason-lu/articles/3713319.html
1.SPI协议一般是4根线,有时候也可以用3根线,clk、cs、miso、mosi
<1>spi协议的数据传输既可以从最高位开始,也可以从最低为开始,具体看数据手册描述
2.spi有4种工作模式,与相位和极性有关
<1>CKPOL(Clock Polarity)=CPOL=POL=Polarity=(时钟)极性
CKPHA(Clock Phase)=CPHA=PHA=Phase=(时钟)相位
SCK=SCLK=SPI的时钟
Edge=边沿,即时钟电平变化的时刻,即上升沿(rising edge)或者下降沿(falling edge)
<2>CPOL(极性)和CPHA(相位),分别都可以是0或时1,对应的四种组合就是:
mode0: CPOL=0 CPHA=0 数据采样在上升沿
mode1: CPOL=0 CPHA=1 数据采样在下降沿
mode2: CPOL=1 CPHA=0 数据采样在上升沿
mode3: CPOL=1 CPHA=1 数据采样在下降沿
3.CPOL极性:
<1>SCLK时钟的空闲时刻: 其就是当SCLK在发送8个bit比特数据之前和之后的状态,于此对应的,SCLK在发送数据的时候,就是正常的工作的时候,是有效active的时刻
<2>SPI的CPOL: 表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1
CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;
CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;
4.CPHA相位: 表示数据采样在某个边沿
<1>CPHA=0,表示数据采样在第一个边沿
对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;
<2>CPHA=1,表示数据采样在第二个边沿
对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;
5.如何判断CPOL和CPHA?
如果起始的SCLK的电平是0,那么CPOL=0,如果是1,那么CPOL=1,然后看数据采样时刻,即时序图数据线上的数据那个矩形区域的中间所对应的位置,对应到上面SCLK时钟的位置,对应着是第一个边沿或是第二个边沿,即CPHA是0或1.(对应的是上升沿还是还是下降沿,要根据对应的CPOL的值,才能确定).