前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IIC和SPI协议的优缺点及选择因素

IIC和SPI协议的优缺点及选择因素

作者头像
Jasonangel
发布2021-05-28 10:13:22
2K0
发布2021-05-28 10:13:22
举报
文章被收录于专栏:嵌入式Linux系统开发

1、用哪种协议,首先肯定是看这个外设芯片支持什么协议。

2、其次再考虑如下两个因素:访问速度和主控IO口资源的多少。

IIC

不考虑电源和GND的情况下,两条线,SCL时钟线和SDA数据线,同一个IIC总线上可以挂载2^7-1一共127个设备,不过由于寄生电容的存在,挂载不了这么多,一般不超过8个IIC设备,但也算节省主控IO口资源。

同一条IIC总线上,不同设备靠设备地址区分。

由于只有两条线,共用数据线,所以是半双工通信,通信速度慢。如图:

SPI

不考虑电源和GND的情况下,SPI有四根线,片选信号SS,时钟SCLK,主输入从输出MISO,主输出从输入MOSI。

所以占用主控IO较多,不光要片选的IO口,数据线也有两条。

但与此同时,因为数据线主从一人一条,所以是全双工通信,所以传输速率较快。

代码语言:javascript
复制
SCLK: Serial Clock (output from master);
MOSI; Master Output, Slave Input(output from master);
MISO; Master Input, Slave Output(output from slave);
SS: Slave Select (active low, outputfrom master).

如图所示:

SPI协议可以用在主控周围的flash通信中,比如常用的W25Q64或者W25Q128,分别是64K和128K的flash,支持SPI通信。

IIC协议可以用在主控和EEPROM flash通信中,如P24C64E。

曾经遇到一个bug,我们使用主控和EEPROM flash通信(IIC),使用的页写,连续写入128K数据,发现经常丢失数据。后来发现,EEPROM是有响应时间的,连续访问寄存器也有时间限制。不同类型的芯片时间不一样,有的芯片有有的芯片没有。

解决方法:发设备地址选中(初始化)这个器件后,需要给IIC设备一段延时,加一个usleep(500),给它响应时间。另外,页写过程中最好也加几段延时,让它保存数据。比如写入128K数据,除了初始化后的一段延时,再在中间加入四段usleep(500)。

如果喜欢我的文章,欢迎关注、点赞和转发,下面可以留言~~~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式Linux系统开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IIC
  • SPI
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档