SPI及I2C大致特点(简洁版)

SPI

和I2C对比:SPI速度快,且SPI 是全双工的。

1.物理接口:主要有四根线:MISO,MOSI,SCK,CS

片选线CS用于区分是哪个设备被选中通讯,每个设备里片选线都不一样,其他线接口是一样的

对于其他从机而言 他们如果发现 自己的CS线是高电平 就会忽略从那三根线上来的信号 

2.有四种模式:MODE 1/2/3/4

这四种模式主要是CPOL.CPHA的不同:

CPOL:SCK在空闲时是高电平还是低电平

CPHA:在奇数边沿还是偶数边沿采样

不同模式的配置主要决定是上升沿采样还是下降沿采样,和是否延迟采样

比如令CPOL=1(空闲时为高电平)且CPHA=0(奇数边沿采样)的时候,是下降沿采样 上升沿触发

3.通讯流程(假如STM32为主设备):

①片选线CS置为低电平,即选中

②之后将要发送的数据写入数据寄存器,数据寄存器将数据放入发送缓存区,之后通过移位寄存器经MOSI线发送出去

③移位寄存器发送完的那一刻,接收缓冲区也收到了从设备发送过来的数据

所以为了方便区别什么时候发送完什么时候接受完,SPI相关寄存器里有一个TXE位和RXNE位,TXE位在发送缓存区将数据转到移位寄存器时为1,RXNE位在接收缓冲区收到数据的时候为1

4.结构体成员含义

SPI_Direction可以配置双线全双工 双线只接收 单线只接收/发送模式
SPI_MODE设置主机模式还是从机模式 区别是 一般SCK都是主机产生 如果配置STM32为从机那么它将接收外来的SCK信号
SPI_Datasize 数据帧长度 可配为8/16位
SPI_CPOL时钟极性 0的时候空闲时为低电平
SPI_CPHA时钟相位 1Edage为奇数边沿采样
SPI_NSS引脚的使用模式 如果配置成SPI_NSS_Hard就是硬件模式 SPI_NSS_Soft就是软件模式 硬件的片选信号会自己产生 软件模式要把相应的GPIO拉低产生片选信号 软件可以拓展其他引脚 软件模式的时候要把其他三根线配置成SPI复用功能的推挽输出模式 NSS则不需复用直接推挽输出就可以
SPI_First配置LSB还是MSB先行(MSB高位先行
把结构体成员配置好后就调用SPI_Init函数把SPI结构体成员写入寄存器,之后调用SPI_cmd函数配置使能

I2C

1.物理接口:SDA SCL两条线

2.通讯特性(物理层):

每个连接到总线的设备都有一个独立的地址 主机可以利用这个地址进行不同设备之间的访问

因为每个设备都有一个独立的地址 当一个主机想访问特定地址设备的时候 从机能知道主机正在访问它主机也知道自己在访问特定地址的从机(地址可以是7位也可以10位)

SDA SCL总线都会接上拉电阻 可以实现高阻态 实现线与的特性 I2C空闲的时候会输出高阻态 输出高阻态可以认为和总线断开了 所以总线不会受这个电压影响(想输出高电平 或者空闲的时候都是输出高阻态 )如果没有这个机制的话 可能会导致从机之间的3.3v 0v短路

3.通讯特性(协议层)

数据包都是通过SDA线传输出去的

主机写数据到从机:数据包的组成,先传输开始信号,之后传从机地址,之后传读/写位,如果从机接收到了它会返回一个应答信号,之后就传输数据了,传输完后从机还要返回一个应答信号,之后主机又传输数据,从机又传输一个应答或非应答信号,如果是非应签信号则主机收到后就发一个停止信号给从机(主机每次传完个字节都会等待从机响应一个应答信号)

4.通讯过程:

主机发送

把控制寄存器的start位置一就可以开始发送数据,如果正常发送的话状态寄存器里的起始位位置一(SB=1)

之后发送地址和数据方向位,之后看从机有没有发送自己的响应,有的话状态寄存器SR1的ADDR位等于1(表示地址发送结束)和数据寄存器为空(Txe)

BTF 位与字节发送结束与否有关,我们可以检测标志位知道执行到哪一步了

主机接收

产生一个起始信号(在I2C里只有主机可以产生通讯的起始信号),之后把要读取的地址内容发送出去

之后会接收到一个从机发过来的Data 会存在数据寄存器里,主机接收到了后发送一个应答信号,此时RXNE非空,

当主机想要停止通讯的时候,设置STOP位和ACK=0,之后硬件I2C会自动产生非应答信号和结束信号

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值