大家好,又见面了,我是你们的朋友全栈君。
目录
一、SPI 与 IIC 通信协议比对:
二、SPI 通信协议:
(图来自野火论坛,如侵即删)
(1)引脚简介
- NSS、 SCK、 MOSI 信号都由主机控制产生, MISO 的信号由从机产生,主机通过该信号线读取从机的数据。
- MOSI 与 MISO 的信号只在 NSS 为低电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据。
(2)起始信号:标号 ①;停止信号:标号 ⑥
标号①处, NSS 信号线由高变低,是 SPI 通讯的起始信号。
标号⑥处, NSS 信号线由低变高,是 SPI 通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。
(3)数据的有效性:② ③ ④ ⑤
- SPI 使用 MOSI 及 MISO 信号线来传输数据,使用 SCK 信号线进行数据同步。 MOSI及 MISO 数据线在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的。数据传输时, MSB 先行或 LSB 先行并没有作硬性规定,但要保证两个 SPI 通讯设备之间使用同样的协定,一般都会采用图中的 MSB 先行模式。
- 观察图中的② ③ ④ ⑤标号处, MOSI 及 MISO 的数据在 SCK 的上升沿期间变化输出,在 SCK 的下降沿时被采样。
- SPI 每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。
(4)CPOL/CPHA 及通讯模式
上图中的时序只是 SPI 中的其中一种通讯模式,SPI 一共有四种通讯模式,它们的主要区别是总线空闲时 SCK 的时钟状态以及数据采样时刻。主机与从机需要工作在相同的模式下才可以正常通讯,实际中采用较多的是“模式 0”与“模式 3”。
- CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
- CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
- CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿
- CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿
三、IIC 通信协议:
(1)起始条件、停止条件
SCL 线是高电平时 SDA 线从高电平向低电平切换表示起始条件。
SCL 线是高电平时 SDA 线从低电平向高电平切换表示停止条件。
(2)数据的有效性
SDA 线上的数据必须在时钟SCL线的高电平周期保持稳定 ;数据线的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变。
(3)主机写数据到从机
- S:起始条件
- SLAVE ADDRESS:从机地址(从机地址可以是 7 位或 10 位)。
- R/ ̄W:W代表写,R代表读,因为W上面有上划线,所以该位位低电平(即0)时,为写操作。
- A:从机发来应答(ACK)信号(有了应答信号才能接着进行下一步)。
- DATA:要发送的数据(数据包的大小为 8 位)。
- A/  ̄A:从机发来应答(ACK)或非应答(NACK)信号(有了应答信号才能接着进行下一步)。
- P:停止条件
(4)应答信号(ACK)与非应答信号(NACK)
- 当设备(无论主从机)接收到 I2C 传输的一个字节数据或地址后,若希望对方继续发送数据,则需要向对方发送“应答(ACK)”信号,发送方会继续发送下一个数据;
- 若接收端希望结束数据传输,则向对方发送“非应答(NACK)”信号,发送方接收到该信号后会产生一个停止信号,结束信号传输。
应答信号 :主机发送完一个8位数据后,会等待从机的回答一个ACK信号就是SDA将会拉低。
非应答信号:主机发送完一个8位数据后,会等待从机的回答一个NACK信号就是SDA将会拉高。
(5)字节格式
发送到 SDA 线上的每个字节必须为 8 位,每次传输可以发送的字节数量不受限制,每个字节后必须跟一个响应位。
(6)发送从机地址(SLAVE ADDRESS)的格式
从机地址(从机地址可以是 7 位或 10 位)一般是7位,再加上一位读/写位。具体见下面。
(7)主机由从机中读数据
- S:起始条件
- SLAVE ADDRESS:从机地址(从机地址可以是 7 位或 10 位)。
- R/ ̄W:W代表写,R代表读,因为W上面有上划线,所以该位位低电平(即0)时,为写操作。
- A:主机发送应答(ACK)信号(有了应答信号才能接着进行下一步)。
- DATA:要接收的数据(数据包的大小为 8 位)。
- A/  ̄A:主机发送应答(ACK)或非应答(NACK)信号(有了应答信号才能接着进行下一步)。
- P:停止条件
(8)通讯复合格式
- S:起始条件
- SR:重复起始信号
- SLAVE ADDRESS:从机地址(从机地址可以是 7 位或 10 位)。
- R/ ̄W:W代表写,R代表读,因为W上面有上划线,所以该位位低电平(即0)时,为写操作。
- A:应答(ACK)信号(有了应答信号才能接着进行下一步)。
- DATA:要传输的数据(数据包的大小为 8 位)。
- A/  ̄A:应答(ACK)或非应答(NACK)信号(有了应答信号才能接着进行下一步)。
- P:停止条件
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134099.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...