找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7851|回复: 14
收起左侧

理解一下单片机的I2C和SPI通信

  [复制链接]
ID:91350 发表于 2015-10-29 23:21 | 显示全部楼层 |阅读模式
应某位网友要求,今天说一下单片机的I2C SPI通信,可能说不清楚,因为这毕竟要做实验才可完全理解。
I2C和SPI是两种不同的通信协议。
听到协议,似乎高不可攀,其实协议就是人们定义的一个标准而已,我们只要遵照这个标准去做事,就可以。比如公司规定早上9点上班,我们就9点上班,不然就会扣薪水,这就是个协议。
用I2C通信的芯片最常用的就是EEPROM芯片,如Atmel的AT24CXX系列,此外,还有一些其它功能的芯片。用SPI通信的芯片有外置FLASH芯片,同样,还有其他功能的一些芯片。
I2C通信需要用到两个引脚:SDA SCL。SCL是时钟引脚,SDA是数据引脚。
I2C1.png
(这是EEPROM芯片)
I2C2.png
(这是时钟芯片)
SPI通信需要3个引脚或者4个引脚:CS SCK MOSI MISO。SPI通信芯片的引脚名称不一定都是这几个名称,可能还有会别的名称,但是意思是一样的,例如MOSI引脚的意思是“主机输出从机输入”,某个SPI接口的芯片就有可能会写成SDI,因为这个SPI器件是作为从机的,所以它的SDI的意思就是“从机数据输入引脚”。
SPI通信过程为:把CS引脚拉低,然后SCK输出时钟,然后就可以在MOSI引脚上输出数据,同时可以在MISO上获得数据了。
SPI1.png
(这是一个SPI FLASH芯片,DO是MISO,DI是MOSI,CLK是SCK,功能一样,叫法不一样而已)
SPI2.png
(这是一个SPI接口的ADC芯片,Dout是MISO,DCLOCK就是SCK,这个芯片有3个SPI引脚)
大部分单片机上面都会带有I2C口和SPI口,有可能还会有好几个I2C口和SPI口。不过,不带I2C口和SPI口的单片机,也可以通过普通引脚的模拟他们的时序来进行通信。
而且,如果是初学者的话,一定要学习一下用普通引脚模拟,对他们的通信本质理解更深刻。
通信全程,其实就是控制引脚高低电平和检测引脚高低电平的过程,话说,控制单片机的引脚高低电平和检测引脚的高低电平,第一天学单片机就会了,所以,I2C通信和SPI通信也没什么难的地方。
给大家讲一个最简单的通信过程,例如我们称下面的通信名称为KJLWT,名字是不是看起来很吊,其实是“科技老顽童”的拼音首字母,因为接下来的协议是我刚刚发明的,所以以此命名^_^。主要是让大家理解,名称就是用来吓唬人的。
我们用两条线来通信,一条时钟线,一条数据线。时钟线,其实就是用来产生一个脉冲波形,再说的直接一点,就是把引脚变高变低的信号,如下图:
spi3.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通信接口的芯片看一下时序图就可以了。我们要做的,就是用单片机的引脚,把它的时序做出来。

我是瑞生,毫无保留的给大家透露电子设计经验,不定时分享实用的落地的电子设计技巧,希望能够帮助到大家。

评分

参与人数 3黑币 +26 收起 理由
湖南一霸 + 10 赞一个!
Eli_ + 6 很给力的讲解,瞬间明了,谢谢你!
菜用鸡 + 10 很给力!

查看全部评分

回复

使用道具 举报

ID:26275 发表于 2018-6-7 21:22 | 显示全部楼层
看到你还是15年底发的帖子,还没什么回帖,现在学单片机的,很少有人学原理和底层基础了,都是看个大概的教程, 然后照搬教程例程里写好的程序做修改而已,99%的人估计连那语句都理解不通
      这不禁让我想起了学加减法,学单片机无非就是学加减乘除的公式,剩下的,就是自己在做东西时的应用运算了,我学i2c的时候,曾经有过这样一个认为,不晓得对不对, i2c,和SPI一样,是不是可以理解为就是单片机与其他芯片之间的通信?

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:250287 发表于 2018-6-25 20:08 | 显示全部楼层
哇 刚接触I2C  很有用!可惜真没人回帖。
回复

使用道具 举报

ID:205182 发表于 2018-6-25 23:43 | 显示全部楼层
顶一顶楼主
回复

使用道具 举报

ID:643751 发表于 2020-2-18 20:31 | 显示全部楼层
支持 写的很底层 耐心看完 排除了对协议的恐惧 对I2C和SPI有了一定的认识。
回复

使用道具 举报

ID:535242 发表于 2020-2-22 13:50 | 显示全部楼层
现在正在学习 赞一个
回复

使用道具 举报

ID:195690 发表于 2020-3-23 17:14 | 显示全部楼层
学习了,赞一个
回复

使用道具 举报

ID:233015 发表于 2020-3-23 23:04 来自手机 | 显示全部楼层
确实写的好,赞一个。
回复

使用道具 举报

ID:705423 发表于 2020-4-9 23:57 | 显示全部楼层
很棒学到了
回复

使用道具 举报

ID:66287 发表于 2020-4-10 08:15 | 显示全部楼层
楼主不容易,顶一个
回复

使用道具 举报

ID:725710 发表于 2020-4-10 09:32 来自手机 | 显示全部楼层
写得通俗易懂。
回复

使用道具 举报

ID:726052 发表于 2020-4-10 10:10 | 显示全部楼层
能不能下载?
回复

使用道具 举报

ID:733743 发表于 2020-4-25 17:56 | 显示全部楼层
踩踩,学到了
回复

使用道具 举报

ID:868042 发表于 2021-1-20 21:30 | 显示全部楼层
确实写的好,
回复

使用道具 举报

ID:582255 发表于 2021-1-22 20:43 | 显示全部楼层
很少有人有耐心写这些啊,顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表