0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机I2C和SPI通信的不同

微云疏影 来源:维库 作者:维库 2023-06-06 10:47 次阅读

I2C和SPI是两种不同的通信协议。

听到协议,似乎高不可攀,其实协议就是人们定义的一个标准而已,我们只要遵照这个标准去做事,就可以。比如公司规定早上9点上班,我们就9点上班,不然就会扣薪水,这就是个协议。

用I2C通信的芯片常用的就是EEPROM芯片,如Atmel的AT24CXX系列,此外,还有一些其它功能的芯片。用SPI通信的芯片有外置FLASH芯片,同样,还有其他功能的一些芯片。

I2C通信需要用到两个引脚:SDA SCL。SCL是时钟引脚,SDA是数据引脚。

pYYBAGR-nfyAaYLqAAAxOP8z7C0444.png

(这是EEPROM芯片)

pYYBAGR-ngGAeQ_QAAA0gvnokx0676.png

(这是时钟芯片)

SPI通信需要3个引脚或者4个引脚:CS SCK MOSI MISO。SPI通信芯片的引脚名称不一定都是这几个名称,可能还有会别的名称,但是意思是一样的,例如MOSI引脚的意思是“主机输出从机输入”,某个SPI接口的芯片就有可能会写成SDI,因为这个SPI器件是作为从机的,所以它的SDI的意思就是“从机数据输入引脚”。

SPI通信过程为:把CS引脚拉低,然后SCK输出时钟,然后就可以在MOSI引脚上输出数据,同时可以在MISO上获得数据了。

poYBAGR-ngiAK0-eAAAiSSsuvuU623.png

(这是一个SPI FLASH芯片,DO是MISO,DI是MOSI,CLK是SCK,功能一样,叫法不一样而已)

pYYBAGR-ng-ABRg0AAAtqk04pp4049.png

(这是一个SPI接口的ADC芯片,Dout是MISO,DCLOCK就是SCK,这个芯片有3个SPI引脚)

大部分单片机上面都会带有I2C口和SPI口,有可能还会有好几个I2C口和SPI口。不过,不带I2C口和SPI口的单片机,也可以通过普通引脚的模拟他们的时序来进行通信。

而且,如果是初学者的话,一定要学习一下用普通引脚模拟,对他们的通信本质理解更深刻。

通信全程,其实就是控制引脚高低电平和检测引脚高低电平的过程,话说,控制单片机的引脚高低电平和检测引脚的高低电平,天学单片机就会了,所以,I2C通信和SPI通信也没什么难的地方。

给大家讲一个简单的通信过程,例如我们称下面的通信名称为KJLWT,名字是不是看起来很吊,其实是“科技老顽童”的拼音首字母,因为接下来的协议是我刚刚发明的,所以以此命名^_^。主要是让大家理解,名称就是用来吓唬人的。

我们用两条线来通信,一条时钟线,一条数据线。时钟线,其实就是用来产生一个脉冲波形,再说的直接一点,就是把引脚变高变低的信号,如下图:

pYYBAGR-nhWAXTyIAAADBO1Eq10680.png

(这就是个时钟信号)

例如我们规定,在时钟引脚为高电平的时候,读取数据引脚的电平,连续8个时钟,就可以读到一个字节了。那给数据的那一端,要怎么给数据呢?也很简单,给数据的那一端,在检测到低电平的时候,就把要发送的数据按照位体现在数据引脚上面。例如一个数据:0x88,写成二进制以后就是1000 1000。我们来看一下传输这个数据的过程:从机检测时钟引脚,检测到一个下降沿(就是从高电平落到了低电平),就把要发送的数据的bit7体现在数据引脚上,例如1000 1000的bit7是1,就把数据引脚变高电平,主机在时钟引脚的高电平,检测这个数据引脚,把这个位记录下来,从机再次发现时钟引脚的下降沿后,再把数据的bit6体现在数据引脚上,由于1000 1000 的bit6是0,所以从机把数据引脚拉低,然后当时钟引脚为高电平的时候,主机检测数据引脚的高低电平,再把bit6记录下来,……以此8次,就可以把一个字节由从机传输到主机了。是不是很简单呢?

时钟的速率,就是传输数据的快慢,以上面讲的为例,如果脉冲的周期为1秒钟,也就是1Hz,那么传输一个字节就需要8秒钟;如果脉冲的周期为1毫秒,也就是1KHz,那么输出一个字节只需要8毫秒。这下你就理解通信的速率是什么意思了吧?

I2C通信,SPI通信,只不过是在我刚才讲的例子上面,又多了一些协议内容。具体的协议,你们随便找一个I2C和SPI通信接口的芯片看一下时序图就可以了。我们要做的,就是用单片机的引脚,把它的时序做出来。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    447

    文章

    47821

    浏览量

    409209
  • 通信
    +关注

    关注

    18

    文章

    5706

    浏览量

    134415
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1348

    浏览量

    120880
收藏 人收藏

    评论

    相关推荐

    STM8L001J3单片机SPI通信数据异常怎么解决?

    最近在做一个项目,选择STM8L001J3外挂做数据处理,由于通信速度和准确性考虑,没有用STM8L001J3的I2C和USART接口,采用SPI做丛和主机进行
    发表于 04-24 07:55

    请问STM32F103 I2C通信SPI通信哪种方式更稳定?

    STM32F103这颗料I2C通信SPI通信哪种方式更稳定?
    发表于 03-22 06:24

    请问哪些PSoC 4000设备支持I2CSPI和UART?

    哪些 PSoC 4 设备支持 I2CSPI 和 UART? 使用 PSoC Creator 中的设备选择器会显示所有 PSoC 4000 设备都有通信块。设备选择器并未说明这些通信
    发表于 01-31 07:31

    使用两片ADU360进行I2C通信,当与从进行通信时,从无法进入I2C中断是为什么?

    问题说明:使用两片ADU360进行I2C通信,主机使用IO口模拟方式,从使用内部外设 主机IO口模拟方式,确认是可行,当与从进行通信时,
    发表于 01-15 06:47

    51单片机能不能io模拟i2c

    51单片机能不能io模拟i2c,两个单片机之间通讯,主机可以模拟,从没有写过,有没有例程
    发表于 11-02 07:00

    AT32F423 I2C使用指南

    AT32 的 I2C 总线接口用于处理微控制器和串行 I2C 总线之间的通信,支持主机和从模式,支持唤醒深睡眠模式,最大通信速度为 1Mb
    发表于 10-26 06:33

    AT32F403A IO模拟I2C与从通信

    AT32F403A IO模拟I2C与从通信演示AT32F403A IO模拟I2C与从通信
    发表于 10-19 07:39

    AT32F403A硬件I2C与从通信

    AT32F403A硬件I2C与从通信演示AT32F403A硬件I2C与从通信
    发表于 10-19 06:39

    终于搞清了:SPI、UART、I2C通信的区别与应用!

    到地址帧或数据帧,接收设备会返回一个ACK位用于表示确认。 寻址 由于I2C没有像SPI那样的片选线,因此它需要使用另一种方式来确认某一个从设备,而这个方式就是 —— 寻址 。 主机将要通信的从
    发表于 10-07 17:01

    lpc1114如何设置监控i2c数据?

    有一条正常通讯的i2c总线,想截取通讯内容,看手册好像是可以用lpc1114监听,然后想用串口输出数据,那么单片机i2c需要怎么配置
    发表于 09-27 07:07

    单片机有哪些分类?

    一条指令,但目前还未普及。AVR单片机比51单片机多了USB通信模块、SPI通信模块、I2C
    发表于 09-07 14:54

    89c51单片机模拟i2c总线怎么实现一主多从呢?

    i2c总线上,连接多个89C51,把一个89C51做为主控器,其他的作为被控器,能否实现一个单片机控制多个单片机的功能,如果能,该如何实现
    发表于 05-08 18:05

    为什么用单片机模拟I2C总线通信读一个字节的时候要先把SCL置0,然后SDA置1?

    亲们,为什么用单片机模拟I2C总线通信,读一个字节的时候要先把SCL置0,然后SDA置1?百思不得其解啊。。。
    发表于 05-08 17:46

    STC单片机模拟的I2C总线上数据传送速率能达到12M吗?

    STC单片机模拟的I2C总线上数据传送速率能达到12M吗?
    发表于 05-08 17:44