🌳SPI协议
😊首先它是一个全双工、同步、串行通讯协议
其次它的物理结构是🐯四线制🐯,包括:
- MOSI:(Master Output Slave Input)主机输入,从机输出信号线
- MISO:(Master Input Slave Output)从机输入,主机输出
- SCLK:时钟信号线,这也是同步通信的特点
- NS/CS:从设备的使能信号,在多设备连接中用于选择要通信的从机
SPI的四种模式
SPI模式 | CPOL | CPHA | 空闲时刻SCK | 采样时刻 |
---|---|---|---|---|
0 | 0 | 0 | 低电平 | 奇数边沿 |
1 | 0 | 1 | 低电平 | 偶数边沿 |
2 | 1 | 0 | 低电平 | 奇数边沿 |
3 | 1 | 1 | 低电平 | 偶数边沿 |
时钟极性(clock polarity);时钟相位(clock phase)的选择:
- CPOL:空闲时时钟信号线极性选择
- CPHA:采集相位选择,0为第一条跳变沿采样,1为第二跳变沿采样
特点
🐨优势🐨
使SPI作为串行通信接口脱颖而出的原因很多;
高速数据传输速率。
简单的软件配置;
极其灵活的数据传输,不限于8位,它可以是任意大小的字;
非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。
🐭缺点🐭
没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
通常仅支持一个主设备;
需要更多的引脚(与I2C不同);
没有定义硬件级别的错误检查协议;
与RS-232和CAN总线相比,只能支持非常短的距离;
🌳IIC协议
😊它是一个单工、同步、串行通信协议
其次它是一个双线制通信协议:
- SDA:串行数据线,用于发送数据帧
- SCL:串行时钟线,用于同步通信
注意:IIC协议支持多个主设备与多个从设备在一条总线上,如果不用开漏输出,而用推挽输出,会出现主设备之间短路的情况。所以,总线一般会使用开漏输出。而⭐️开漏输出无法输出高电平⭐️,如果在漏极接上拉电阻,默认置高,则可以进行电平转换。
上拉电阻
阻值不能过小:
功耗问题。如果上拉阻值过小,VDD灌入端口的电流将较大,功耗会很大,导致端口输出的低电平值增大(I2C协议规定,端口输出低电平的最高允许值为0.4V)。故通常上拉电阻应选取不低于1K的电阻(当VDD=3V时,灌入电流不超过3mA)。IO端口的驱动能力在2mA~4mA量级。阻值不能过大:
速度问题。它取决于上拉电阻和线上电容形成的RC延时,RC延时越大,波形越偏离方波趋向于正弦波,数据读写正确的概率就越低,所以上拉电阻不能过大。
IIC总线上的负载电容不能超过400pF。当IIC总线上器件逐渐增多时,总线负载电容也相应增加。当总的负载电容大于400pF时,就不能可靠的工作。这也是IIC的局限性。
建议上拉电阻可选用典型值4.7K。🐧
数据收发步骤:
🐑第一步:唤醒;
先将SDA
线从高电平切换到低电平;然后将SCL
从高电平切换到低电平;所有从机被唤醒,等待接收地址位。
🐑第二步:发送地址位+读写位
主设备向每个从机发送要与之通信的从机的7位或10位地址,以及相应的读/写位;读写位用于确定数据传输方向。
这里的地址位决定了设备上限,7位地址上限为128 ( 2 7 ) (2^7) (27),10位1024 ( 2 10 ) (2^{10}) (210)。
🐑第三步:应答
每个从设备将地址与自己的地址对比,相同则将SDA
拉低一位,不同保持SDA
拉高。
🐑第四步:接收数据、应答
🐑第五步:停止通信
为了停止数据传输,主设备将SCL
切换为高电平,然后再将SDA
切换为高电平,从而向从机发送停止条件;
特点
IIC最重要的功能包括:
- 没有严格的波特率要求;
- 所有组件之间都可以实现简单的主/从关系,每个从设备均有唯一地址,可进行软件寻址;
- I²C是真正的多主设备总线,可提供仲裁和冲突检测;
- 最大主设备数:无限制;
- 最大从机数:理论上7位地址127,10位地址1024
传输速度:
- 标准模式:Standard Mode = 100
Kbps
- 快速模式:Fast Mode = 400
Kbps
- 高速模式: Highspeed mode = 3.4
Mbps
- 超快速模式: Ultra fast mode = 5
Mbps
: