IIC与SPI的简单对比

目录

IIC

物理层:支持多主多从

协议层:

数据有效性:

IIC架构剖析:

IIC初始化结构体:

SPI

物理层:

协议层:

数据有效性:

CPOL/CPHA 及通讯模式:

SPI架构剖析:

SPI初始化结构体:

知识点:


IIC

物理层:支持多主多从

两根线,SDA,SCL

更多细节看手册

协议层:

I2C 通讯过程的基本结构:
一个是主机写数据到从机,一个是主机读数据到从机。
地址位7或10位。
这个是IIC通讯复合格式:
除了基本的读写, I2C 通讯更常用的是复合格式,即第三幅图的情况,该传输过程有两次起始信
(S) 。一般在第一次传输中,主机通过 SLAVE_ADDRESS 寻找到从设备后,发送一段“数据”,
这段数据通常用于表示从设备内部的寄存器或存储器地址 ( 注意区分它与 SLAVE_ADDRESS
区别 ) ;在第二次的传输中,对该地址的内容进行读或写。也就是说,第一次通讯是告诉从机读
写地址,第二次则是读写的实际内容。

数据有效性:

SCL 为高电平的时候 SDA 表示的数据有效,当 SCL 为低电平时,SDA 的数据无效,一般在这个时候 SDA 进行电平切换,为下一次表示数据做好准备。每次数据传输都以字节为单位,每次传输的字节数不受限制。

IIC架构剖析:

IIC初始化结构体:

typedef struct {
2 uint32_t I2C_ClockSpeed; /*!< 设置 SCL 时钟频率,此值要低于 40 0000*/
3 uint16_t I2C_Mode; /*!< 指定工作模式,可选 I2C 模式及 SMBUS 模式 */
4 uint16_t I2C_DutyCycle; /* 指定时钟占空比,可选 low/high = 2:1 及 16:9 模式
*/
5 uint16_t I2C_OwnAddress1; /*!< 指定自身的 I2C 设备地址 */
6 uint16_t I2C_Ack; /*!< 使能或关闭响应 (一般都要使能) */
7 uint16_t I2C_AcknowledgedAddress; /*!< 指定地址的长度,可为 7 位及 10 位 */
8 } I2C_InitTypeDef;

SPI

物理层:

一主多从,NSS作为片选信号,NSS,MOSI,MISO,SCK四根线。SPI 通讯以 NSS 线置低电平为开始信号,以 NSS 线被拉高作为结束信号。

协议层:

与 I2C 的类似,SPI 协议定义了通讯的起始和停止信号、数据有效性、时钟同步等环节。

数据有效性:

SPI 使用 MOSI MISO 信号线来传输数据,使用 SCK 信号线进行数据同步。 MOSI MISO
据线在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的。数据传输时, MSB
先行或 LSB 先行并没有作硬性规定,但要保证两个 SPI 通讯设备之间使用同样的协定,一般都
会采用图 SPI 通讯时序 中的 MSB 先行模式。数据帧长度可设置为 8 位或 16 位。

CPOL/CPHA 及通讯模式:

SPI 一共有四种通讯模式,由CPOL(时钟极性),CPHA(时钟相位)控制。

实际中采用较多的是“模式 0”与“模式 3”。

SPI架构剖析:

SPI初始化结构体:

typedef struct
{
 uint16_t SPI_Direction; /* 设置 SPI 的单双向模式 */
 uint16_t SPI_Mode; /* 设置 SPI 的主/从机端模式 */
 uint16_t SPI_DataSize; /* 设置 SPI 的数据帧长度,可选 8/16 位 */
 uint16_t SPI_CPOL; /* 设置时钟极性 CPOL,可选高/低电平 */
 uint16_t SPI_CPHA; /* 设置时钟相位,可选奇/偶数边沿采样 */
 uint16_t SPI_NSS; /* 设置 NSS 引脚由 SPI 硬件控制还是软件控制
*/
 uint16_t SPI_BaudRatePrescaler; /* 设置时钟分频因子,fpclk/分频数 =fSCK */
 uint16_t SPI_FirstBit; /* 设置 MSB/LSB 先行 */
 uint16_t SPI_CRCPolynomial; /* 设置 CRC 校验的表达式 */
} SPI_InitTypeDef;

知识点:

发送缓冲区为空 (TXE),接收缓冲区非空 (RXNE)。

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SPIIIC之间有几个主要的区别。首先,SPI是全双工的,而IIC是半双工的。这意味着SPI可以同时进行数据的发送和接收,而IIC只能在一个时刻进行数据的发送或接收。\[1\] 其次,IIC有应答机制,而SPI没有。在IIC通信中,主设备发送数据后,从设备会发送一个应答信号来确认接收到数据。而在SPI通信中,从设备没有应答机制,主设备只需发送数据即可。\[1\] 第三,IIC通过向总线广播从机地址来寻址,而SPI通过向对应的从机发送使能信号来寻址。这意味着在IIC通信中,主设备可以通过广播地址来与多个从设备进行通信,而在SPI通信中,主设备需要通过发送使能信号来选择与哪个从设备进行通信。这样可以节约硬件资源并节约时间。\[1\] 最后,IIC的时钟极性和时钟相位是固定的,而SPI的时钟极性和时钟相位是可调的。这意味着在IIC通信中,时钟的极性和相位是固定的,无法进行调整。而在SPI通信中,可以根据需要调整时钟的极性和相位,以适应不同的通信需求。\[1\] 综上所述,SPIIIC在双工性质、应答机制、寻址方式和时钟极性相位等方面存在明显的区别。 #### 引用[.reference_title] - *1* [IICSPI的异同](https://blog.csdn.net/spx1164376416/article/details/121244916)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值