当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘 要 :以 I2C 通信主控方的要求为基础,讨论 I2C 通信从动方的程序编写。内容包括 I2C 通信的起始部分(握手部分)、数据传送部分以及停止部分的程序编写,以三部分通信波形要求为准,总结软件编写流程。I2C 通信的数据格式灵活多样,可以一次传送 8 位二进制数据,也可以一次传送 8 的倍数的二进制数据,从机在通信中必须按照主机的要求进行数据传送。总结从机的数据传送程序流程,以期满足主机的通信要求,从而得出 I2C 通信从动模式的详细总结。



引 言


在嵌入式系统设计中存在着大量的 IC 间通信,目前使用较多的为 I2C 通信。当前大部分单片机均可采用硬件方式的 I2C 模式进行通信,但也有少部分单片机为降低成本,并未设计硬件方式的 I2C 通信,因此只能采用软件方式来实现芯片间通信。目前已有大量文献讨论了 I2C 通信时主控方的软件编写,但作为通信的另一方,从控方的程序编写很少有相关资料涉及,特别是从控方的程序相较于主控方的程序更为复杂。因此从主机通信要求出发,总结了一套从机的通信软件编写流程[1-3]。

通过主机发出的信号请求,要求从控机采取相应应答信号。为了实现从机的实时性,要求从机的 SCL 线输入采用外部中断方式进行,可将中断方式设置为上升沿触发方式。


1 起始信号


图 1 所示为主控机发送I2C 起始信号的波形图。I2C 总线通过上拉电阻连接电源的正极,当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平都将使总线的信号变低,即各器件的 SDA及 SCL均为线“与”关系。进行 I2C通信时,首先要确认总线是否空闲。图 1中,主机先将数据线拉高,再将时钟线拉高,但需注意在拉高时钟线时从机的响应,其中时间 t1为从机响应时间。从机应立即释放时钟线,转为输入状态。主机只有检测到从机释放时钟线控制权时才能进行下一步操作。主机在拉高时钟线后,检测时钟线的状态,只有从机为输入,时钟线变高后,主机才可以发出起始命令 [4]。

图 1 主机发送起始信号波形

时钟信号线为高电平时,主机将数据线拉低以发送起始命令,此时从机检测到数据信号线产生由高到低的信号变化后,从机立即检测时钟信号线是否产生由高到低的变化, 如若产生,则说明通信起始信号已发出,主机准备与从机通信 [5]。从机控制流程如图 2 所示。

图 2 从机接收起始信号时的程序流程


2 停止信号


停止信号的产生比起始信号简单,从机对停止信号的要求也比起始信号简单。

图 3所示为主机停止信号波形图,对应从机在主机时钟信号进入中断服务程序后,通过检测主机在数据线上发出的由低到高的电平变化来确认通信结束。

图 3 停止信号波形


3 应答信号


主机发送 1 B 数据后,在第九个时钟(CLOCK)脉冲时必须释放数据线,由从机产生一个应答信号。从机回复低电平为有效应答(ACK),表示从机已成功接收到该字节 ;从机回复高电平为非应答信号(NACK),表示从机未成功接收该字节。如果是有效的应答信号位,要求从机在第九个时钟脉冲之前的低电平时间将数据线拉低,并确保在第九个时钟的高电平期间为稳定的低电平。如果主机从从机读取信息, 则在读完 1 B 数据后,主机向从机发送一个应答信号 ACK, 读完最后一个数据后,主机向从机发送一个 NACK 信号,通知从机结束数据发送,并在最后发送一个停止信号给从机。应答信号波形如图 4 所示。在每 8 位数据传送完成后,第九个时钟脉冲传送一个应答信号。向从机中写信息即由从机发出应答信号 ;从从机中读信息,即由主机发出应答信号。应答信号为低即为成功,为高则为失败。

图 4 应答信号波形

从机必须配合主机工作,从机在第九个时钟脉冲上升沿产生中断时,将根据自己的接收情况产生应答信号。从机工作程序流程如图 5 所示。

基于主控模式下的 I2C 通信从动模式软件设计


4 数据传送

4.1 字节传送与应答格式

数据传送时先高位后低位,9 位为一帧。如果从机未应答主机信号,如从机正在进行其他工作而无法接收总线上的数据,则此时从机在应答时必须将数据线置于高电平,产生一个非应答信号,主机产生一个终止信号以结束总线的数据传送。每传送完一个 8 位数据,主机都要与从机通过应答与非应答信号进行沟通以确定是否继续进行数据传送。在主机从从机中读取数据时,主机收到最后一个数据字节后,必须向从机发出一个非应答信号(此时的应答信号由主机发出)作为线束标志。从机释放 SDA 线,允许主机产生终止信号。

4.2 数据帧格式

从机地址为 7 位,分别占据一个字节的 D7 ~ D1 位。D0 位为读写标志位,D0=0 为写入从机操作 ;D0=1,为从从机读取数据操作。从机地址格式与读写格式如图 6 所示。

基于主控模式下的 I2C 通信从动模式软件设计


(1)主机向从机写数据,以 8 位数据加一位应答为一帧, 从机负责应答。主机先写入从机地址,再写入从机存储器地址,后面为要写入的数据,以一个字节加一个应答位(非应答位)为一帧写入。如果只写一个字节,写完后主机可发停止信号,如果继续写入数据,则主机继续写入数据即可,不必再次输入存储器地址,从机会在上一地址上自动加 1 进行数据存储。此时要特别注意的是 :从机一定要有应答信号(ACK),否则主机将终止数据的继续传送。从机无论是产生非应答信号还是在规定时间内未产生应答信号,主机都视为无应答,将终止数据传送。写数据格式如图 7 所示。


基于主控模式下的 I2C 通信从动模式软件设计


从机接收数据时程序较简单,只要在 CLOCK 时钟线上升沿产生的中断中依次接收数据,并在接收完 8 位数据后产生应答信号即可。然后对数据进行判断,如果为从机地址数据,则判断此数据是否与己方地址相同,相同则继续接收,不同则放弃接收。然后接收存储器地址,并接收数据,在接收数据时将所接收的数据依次存储。从机程序流程如图8所示。


图 8 从机读写数据程序流程

(2)主机从从机读数据

读取数据与写入数据时的格式存在一定区别,从机地址信息需写 2 次,且需发 2 次起始信息。数据框图如图 9所示。

由于接收数据时从机程序比较简单,在此不再讨论。

5 结 语 

I2C 通信是单片机与单片机之间,或单片机与存储器之间的通信,对于经济型单片机而言,能有效节省单片机的I/O 口,因此 I2C 通信也在通信领域得到广泛应用。本文是长期编程过程中的经验总结,希望能给读者提供一定参考。

基于主控模式下的 I2C 通信从动模式软件设计


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在接下来的5G时代当中,华为也将会凭借着自身的优势,从而处于遥遥领先的地位,但其实厉害的又不仅仅是华为企业,如今,作为国际巨头的三星开始了在6G当中的研发,6G接下来的网速,将会是5G的50倍,对于三星的这一个大动作,华...

关键字: 5G 6G 三星

随着人工智能概念的爆发,越来越多的企业开始关注并布局智能家居领域。有研究机构预测预测,2022年中国智能家居的整体产值将突破万亿元,前景一片向荣。

关键字: 全屋智能 智慧生活 小爱同学

博鳌亚洲论坛国际科技与创新论坛第二届大会在广州举行。期间举行的5G科技应用与6G展望分论坛备受瞩目。六位通信领域的头部企业、高校和科研院所的专家通过线上线下联动方式,共同研讨5G软硬件关键技术研发现状与未来6G发展前景展...

关键字: 5G 6G 通信算法

智能家居作为住宅家居现代生活场景方式,当下已经不再只是一个概念,而是基于家居家装软硬件产品为载体的生活方式实景呈现,越来越多的人在家装时选择智能家居。需求助推行业持续火热,大小资本都以狂风席卷之势进驻这个行业,根据企查查...

关键字: 全屋智能 智能家居 智能门锁

5G领先让我们信心大增,但是这不能成为我们高枕无忧的理由。随着我们认识到通讯技术在科技领域的重要性之后,竞争必然会更加激烈起来。在5G还未成熟的年代,通讯商们就已经开始将目光瞄准了6G,并开始相关的研发和布局。

关键字: 5G 6G 虚拟数字世界

小米智能家居现在已经能实现联动和自动化了,比如指纹锁进屋就打开窗帘电视,播放天气预报,根据设定温度决定是否打开空调,根据空气质量检测仪决定是否打开新风机~结合人体移动和光线传感器开灯就更是不用说了~最近也在搞全屋智能化,...

关键字: 全屋智能 温度感应 小米

根据5G设备市场的调研数据当中来看,三星所拿下的5G设备市场份额就达到了10.4%,也就是说,排在了第四名的位置。

关键字: 6G 三星 华为

拥有 5G、人工智能、物联网等新技术的支撑,智能家居行业逐渐从单品智能迈入全屋智能阶段 。其由于全屋智能产品特殊性,落地安装涉及到方案场景设计、布线,安装,施工、后期维护更新等多个环节,整体最好的实施路径是通过房屋整体装...

关键字: 全屋智能 5G 物联网

5G时代,我们实现了弯道超车,一跃超越高通,爱立信,领先于世界。现如今,5G正在全世界加速普及和应用。通讯和实业的结合,已助力生产效率进一步提高,让我们的生活变得更加美好。

关键字: 5G 6G 中国移动

自从2020年作为建设主体纳入大湾区综合性国家科学中心先行启动区,跻身科创国家队以来,松山湖科学城围绕科研创新人才的需求,全面提升城市服务能级和城市品质,让松山湖成为近悦远来、宜居宜业宜研宜创的科学家园。

关键字: 智慧城市 科学家园 人工智能

《物联网技术》杂志

2511 篇文章

关注

发布文章

编辑精选

技术子站

关闭