历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2020年02月19日 | 理解一下单片机的I2C和SPI通信

2020-02-19 来源:eefocus

应某位网友要求,今天说一下单片机的I2C SPI通信,可能说不清楚,因为这毕竟要做实验才可完全理解。


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


用I2C通信的芯片最常用的就是EEPROM芯片,如Atmel的AT24CXX系列,此外,还有一些其它功能的芯片。用SPI通信的芯片有外置FLASH芯片,同样,还有其他功能的一些芯片。
I2C通信需要用到两个引脚:SDA SCL。SCL是时钟引脚,SDA是数据引脚。
I2C1.png?imageView2/2/w/550 
(这是EEPROM芯片)
I2C2.png?imageView2/2/w/550 
(这是时钟芯片)
SPI通信需要3个引脚或者4个引脚:CS SCK MOSI MISO。SPI通信芯片的引脚名称不一定都是这几个名称,可能还有会别的名称,但是意思是一样的,例如MOSI引脚的意思是“主机输出从机输入”,某个SPI接口的芯片就有可能会写成SDI,因为这个SPI器件是作为从机的,所以它的SDI的意思就是“从机数据输入引脚”。


SPI通信过程为:把CS引脚拉低,然后SCK输出时钟,然后就可以在MOSI引脚上输出数据,同时可以在MISO上获得数据了。
SPI1.png?imageView2/2/w/550 
(这是一个SPI FLASH芯片,DO是MISO,DI是MOSI,CLK是SCK,功能一样,叫法不一样而已)
SPI2.png?imageView2/2/w/550 
(这是一个SPI接口的ADC芯片,Dout是MISO,DCLOCK就是SCK,这个芯片有3个SPI引脚)
大部分单片机上面都会带有I2C口和SPI口,有可能还会有好几个I2C口和SPI口。不过,不带I2C口和SPI口的单片机,也可以通过普通引脚的模拟他们的时序来进行通信。


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


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


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


我们用两条线来通信,一条时钟线,一条数据线。时钟线,其实就是用来产生一个脉冲波形,再说的直接一点,就是把引脚变高变低的信号,如下图:
spi3.png?imageView2/2/w/550 
(这就是个时钟信号)
例如我们规定,在时钟引脚为高电平的时候,读取数据引脚的电平,连续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通信接口的芯片看一下时序图就可以了。我们要做的,就是用单片机的引脚,把它的时序做出来。

推荐阅读

史海拾趣

Antenna Factor公司的发展小趣事

Antenna Factor公司最初由几位热衷于无线通信技术的工程师创立。创业初期,他们面临着资金短缺、技术难题和市场认可度低等多重挑战。然而,他们凭借着对技术的执着和不懈的努力,成功开发出了一款具有高性价比的天线产品,并获得了市场的初步认可。这一突破性的产品为公司的发展奠定了坚实的基础。

启臣微(Chip)公司的发展小趣事

在成都启臣微电子股份有限公司成立之初,公司就致力于集成电路及系统产品的设计、生产与销售。面对激烈的市场竞争,启臣微坚持创新,投入大量研发资源,终于在高性能功率管理集成电路领域取得了重大技术突破。这一突破不仅提升了公司的市场竞争力,也为公司赢得了业界的广泛认可。

Aerotronics Marketing Inc公司的发展小趣事

Aerotronics Marketing Inc公司在市场定位上独具慧眼,准确抓住了电子行业中无人机市场的增长趋势。公司制定了一系列精准的营销策略,包括线上线下推广、行业展会展示、合作伙伴计划等,有效提升了品牌知名度和市场占有率。同时,公司还注重客户关系管理,通过提供优质的售后服务和技术支持,赢得了客户的信任和忠诚。

High Tech Chips Inc公司的发展小趣事

Aerotronics Marketing Inc公司注重与高校和研究机构的合作,通过产学研合作的方式推动技术创新。公司与多所知名高校建立了紧密的合作关系,共同开展无人机技术的研发和应用研究。这种合作模式不仅为公司提供了源源不断的技术支持和人才储备,还推动了整个电子行业的技术进步。

Electron Products Inc公司的发展小趣事

随着科技的快速发展,EPI意识到只有不断创新才能在竞争激烈的电子行业中立足。因此,公司加大了对研发的投入,并成功推出了一系列具有创新性和领先性的电子产品。这些产品不仅提升了用户体验,还为公司带来了更多的市场份额和利润。

扬州国芯(Gcore)公司的发展小趣事

在快速发展的同时,EPI也注重环保和可持续发展。公司积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。此外,EPI还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了公司的社会责任感,也为公司的长期发展奠定了坚实的基础。

请注意,以上故事均为虚构,旨在为您提供关于Electron Products Inc公司发展起来的可能故事。如有需要,请参考公司官方发布的信息或相关新闻报道。

问答坊 | AI 解惑

ccd资料包

飞思卡尔智能车上用的ccd摄像头…

查看全部问答>

SPCE061A凌阳单片机编程红外遥控

我要做基于SPCE061A凌阳单片机红外遥控比赛计分器的设计, 需要软件编程红外识别,利用LED模组能显示比分,我需要知道利用的遥控器的名称和C编程的程序。重谢,有能帮我做的可以加QQ330254876讨论,重谢。…

查看全部问答>

【开发故事】DLP投影仪:坚持20年不放弃的男人

  不多的文章,与大家分享下:你有你的开发故事么?   美国德克萨斯州最大的城市达拉斯。在这个有着牧牛和牛仔历史的城市里,一项技术宣告诞生。这项技术在很长时间里“养在深闺人未识”,甚至一度处于行将消亡的境地。然而,凭借一个 ...…

查看全部问答>

哪类应届毕业生最受欢迎? 毕业生比拼职业技能

新一轮毕业生招聘季节即将到来,今年就业形势依然严峻。用人单位不仅要求大学生学习成绩好、在校表现好,还要求各方面的综合能力强,因此——     毕业生比拼职业技能     2009年的校园招聘大战已初露端倪,一家知名人才网 ...…

查看全部问答>

那位朋友知道那里能搞到RIL.lib的源代码?

我装了Platform Builder CE 6.0 ,在CellCore文件夹下也找到了RIL层的源程序,但是我却没找到RIL.lib中函数的实现,也就是Ril.def中定义的导出函数。比如: RIL_Initialize               &nbs ...…

查看全部问答>

发个最新构思和大家讨论讨论

本人一直很喜欢下载东西,verycd.com更是天天上,还喜欢上xunlei.com找软件 而且经常成夜成夜的挂着电脑,挂着迅雷, 电费不用说, 因为用P2P硬盘都坏掉几个, 数据吞吐量大概每天2G到10G, 看电影只看DVD高清晰版的, 装软件只下完整版的, 由于做软 ...…

查看全部问答>

AT+CMGS很慢,为什么?

我用MC39i发送PDU短信,在AT+CMGS这一步的时候很慢,要3、4秒才能出现\">\",为什么呢?有什么方法加快速度吗? 我看过别人也是用MC39i,但是一般1秒之内就可以发送出去了,怎么会差这么远呢?…

查看全部问答>

100分相送,如何在dopod818 PPC上注册蓝牙串口通讯???

如题:如何在dopod818 PPC上注册蓝牙串口通讯??? 主要的目的是想让GPS通过蓝牙控制dopod818手机发送/读取短信,和读取电话本信息,现在有的手机像dopod818没有蓝牙串口服务,要自己实现注册串口服务,然后通过打开串口进行通讯和发送AT命令来实 ...…

查看全部问答>

STR912怎么清串口中断标志?keiluv3和uv4居然不一样?

UART_ClearITPendingBit函数 uv3中是 void UART_ClearITPendingBit(UART_TypeDef* UARTx, u16 UART_IT) {   /* Clear the specified interrupt */   UARTx->ICR &= UART_IT; } uv4中是 void UART_ClearI ...…

查看全部问答>