SPI I2C 的原理及在STM32上使用I2C总线的常见问题

在微控制器中SPI,I2C是常用的挂接外设的总线,我们对他们的如果没有仔细研究的话我们对他们的认识基本就是串行,线少(I2C两根SCL SDA,SPI 单向3根双向4根 SCK MOSI MISO CS/LD ),多外设(SPI 可以并联也可以级联,I2C基本是随便接,地址不冲突即可),但是实际上这两种总线原理上还有有很大区别的,在微控制器上的操作及与程序控制流程也是完全不一样的。

SPI的原理 是主控使用SCLK 线,在SCLK信号的边沿 将数据寄存器的数据通过 MOSI一位一位的移出到 设备中 ,同时设备的寄存器也将数据在SCLK边沿的驱动下将数据通过MISO线一位一位的移出到主控中,所以SPI总线中读写是同时进行的,没有单独的读也没有单独的写,在微控制器端无论想读还是想写就是将数据填到DR存寄器中,MCU即自动开始传输,等待RXNE  BUSY TXE等信号置位便完成一个读或写操作。SPI状态也只有忙和不忙两种状态。

I2C总线与SPI完全不同,因为比SPI少了一根数据线和一根同步/片选线,I2C的内核涉及到状态机的问题,这也就导致了I2C的操作不像SPI那么简单。

串行通信必须有同步过程,SPI通过一根CS/LD数据线解决,I2C通过 生产START信号解决

器件的选通,SPI使用不同的CS线控制选通即可,I2C采用START+写入选通地址解决

数据的传输与方向,SPI的MOSI MISO是固定线,无方向概念,I2C在根据选通地址的最低位决定是读还是写

数据的确认与中止,SPI无确认,想中止拉高CS线即可,I2C需接收方使用ACK确认数据

总线仲裁,SPI为固定主从不需要仲裁,I2C检查总线电平

因为这些不同I2C在总线控制上比SPI要复杂的多

在STM32上I2C常遇到的问题与解决办法,主要针对STM32做为主机方式</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值