一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于I2C总线的数据读写方法和装置与流程

2023-01-04 17:48:10 来源:中国专利 TAG:

一种基于i2c总线的数据读写方法和装置
技术领域
1.本技术涉及通信领域,尤其涉及一种基于内部整合电路(inter integrated circuit,i2c)总线的数据读写方法和装置。


背景技术:

2.i2c是一种双向二线制同步串行总线,包括时钟线(serial clock,scl)和数据线(serial data,sda)两根线,通过scl和sda可在器件之间传送信息。i2c总线上的每个器件(简称i2c器件)可以作为一个发送器或接收器(由器件的功能决定),且每个器件对应一个唯一的地址。
3.i2c 总线上的器件的地址格式包括7 位和10 位两种。目前大多数消费电子领域使用器件为7位地址模式,下面以器件为7 位地址为例,对器件间的读取/写入操作的格式和过程进行说明。
4.如图1中的(a)所示,i2c写入操作的格式包括起始信号位、从机地址位、写标志位、从机应答位、寄存器地址位、从机应答位、数据位、从机应答位和终止信号位。具体的,如图2中的(a)所示,写操作的过程可以包括:主机发送起始信号之后,接着发送从机地址和写标志位;从机应答后主机发送待访问的寄存器地址,从机再次确认应答;主机开始发送数据,每发送8位数据后,从机进行一次应答,直至主机发送终止信号。如图1中的(b)所示,i2c读取操作的格式包括起始信号位、从机地址位、写标志位、从机应答位、寄存器地址位、从机应答位、重启信号位、从机地址位、读标志位、从机应答位、数据位、主机非应答位和终止信号位。具体的,如图2中的(b)所示,读取操作的过程是:主机发送起始信号之后,接着发送从机地址和写标志位;从机应答后主机发送待访问的寄存器地址,从机再次确认应答后;主机发送重启信号,接着发送从机地址和读标志位;从机应答;从机开始发送数据,每发送8位数据后,主机进行一次应答,直至主机接收到最后一个字节后发送非应答信号和终止信号。
5.经过对比后可以发现, i2c读取操作与写入操作的格式并不对称,读取操作在第一次读写标志位发送的是“写”标志位而非“读”标志位,这是一个“伪写”操作,目的是更新从机的内部地址计数器,使内部地址计数器指向更新后的寄存器地址。这是由于目前在i2c协议中,仅有“写”操作才可以将寄存器地址填入从机的内部地址计数器中。然而,这样的设计导致在“读”操作中,起始信号和从机地址都被重复发送一次,使得读取操作更加复杂化。


技术实现要素:

6.本技术实施例提供一种基于i2c总线的数据读写方法和装置,能够解决现有i2c协议读取操作复杂的问题,在不改变数据传输稳定性的前提下,可以精简报文长度,提高数据读取性能。
7.第一方面,本技术实施例提供一种基于i2c总线的数据读写方法,应用于包括主机和从机的通信系统,主机和从机通过i2c总线连接,该方法包括采用从机执行以下步骤:接收主机发送的启动信号;接收主机发送的从机的地址和第一标志位;向主机发送应答信号;
接收主机发送的寄存器地址;向主机发送应答信号,并根据寄存器地址更新从机的内部地址计数器;若第一标志位是读标志位,向主机发送内部地址计数器指示的寄存器的数据。
8.基于本技术实施例提供的方法,在主机发送从机地址(从机的地址)和第一标志位且从机应答后,主机向从机发送寄存器地址,从机应答并立即对从机内部地址计数器进行更新(无论主机发送的第一标志位是读标志位还是写标志位,从机都对从机内部地址计数器进行更新)。而后从机再对第一标志位进行判断,若第一标志位是读标志位,则翻转数据传输方向,即从机给主机发送数据。这样,取消了原有i2c协议读操作中的“伪写”操作,无需依赖“写”操作将寄存器地址填入从机的内部地址计数器中,精简了读操作的报文长度,提升了通信效率。
9.在一种可能的实现方式中,根据寄存器地址更新从机的内部地址计数器之后,该方法还包括:若第一标志位是写标志位,接收主机发送的数据;向主机发送应答信号。即若从机确定第一标志位是写标志位,则保持原传输方向不变,即主机给从机发送数据。从机接收主机发送的数据,并向主机发送应答信号。这样,相比现有技术并未增加写操作的报文长度,不会降低通信效率。
10.在一种可能的实现方式中,向主机发送内部地址计数器指示的寄存器的数据包括:每发送一个字节,等待接收来自主机的应答信号;若接收到来自主机的应答信号,继续发送下一个字节。i2c通信时的基本数据单位是字节,每次传输的有效数据都是1个字节(8bit)。从机每发送一个字节(在8个时钟脉冲期间占用数据线),就在第9个时钟脉冲期间释放数据线,以便主机反馈一个应答信号(ack)。从机可以通过主机发送的应答信号了解主机的接收状况。主机的应答信号为低电平时,表示主机已经成功地接收了该字节,从机可以继续发送下一个字节。
11.在一种可能的实现方式中,若第一标志位是读标志位,向主机发送内部地址计数器指示的寄存器的数据之后,方法还包括:接收主机发送的非应答信号;停止向主机发送数据。主机接收到最后一个字节后,可以发送一个非应答信号(nack),以通知从机结束数据发送,并释放sda线。主机在从机释放sda线后可以发送一个停止信号(停止信号),结束本次通信。
12.第二方面,本技术实施例提供一种基于i2c总线的数据读写方法,应用于包括主机和从机的通信系统,主机和从机通过i2c总线连接,该方法包括采用从机执行以下步骤:接收主机发送的启动信号;接收从机的地址和第一标志位;向主机发送应答信号;若第一标志位是读标志位,接收主机发送的寄存器地址;向主机发送应答信号,并根据主机发送的寄存器地址更新从机的内部地址计数器;向主机发送内部地址计数器指示的寄存器的数据。
13.基于本技术实施例提供的方法,在主机发送从机地址和读/写标志位(第一标志位)后,从机应答并立即对读/写标志位进行判断,若确定是读标志位,则从机等待主机发送的寄存器地址,并根据主机发送的寄存器地址对从机内部地址计数器进行更新,而后翻转数据传输方向,即从机向主机发送数据;即在主机发送读标志位的情况下可以翻转数据传输方向,即从机向主机发送数据。这样,取消了原有i2c协议读操作中的“伪写”操作,无需依赖“写”操作将寄存器地址填入从机的内部地址计数器中,精简了读操作的报文长度,提升了通信效率。
14.在一种可能的实现方式中,方法还包括:若第一标志位是写标志位,接收主机发送
的寄存器地址;向主机发送应答信号,并根据主机发送的寄存器地址更新从机的内部地址计数器;接收主机发送的数据;向主机发送应答信号。即若确定第一标志位是是写标志位,则从机等待主机发送的寄存器地址,并根据主机发送的寄存器地址对从机内部地址计数器进行更新。而后保持原传输方向不变,即主机给从机发送数据。即在主机发送写标志位的情况下保持原数据传输方向,即主机向从机发送数据(从机从主机接收数据)。这样,相比现有技术并未增加写操作的报文长度,不会降低通信效率。
15.在一种可能的实现方式中,向主机发送内部地址计数器指示的寄存器的数据包括:每发送一个字节,等待接收来自主机的应答信号;若接收到来自主机的应答信号,继续发送下一个字节。i2c通信时的基本数据单位是字节,每次传输的有效数据都是1个字节(8bit)。从机每发送一个字节(在8个时钟脉冲期间占用数据线),就在第9个时钟脉冲期间释放数据线,以便主机反馈一个应答信号(ack)。从机可以通过主机发送的应答信号了解主机的接收状况。主机的应答信号为低电平时,表示主机已经成功地接收了该字节,从机可以继续发送下一个字节。
16.在一种可能的实现方式中,向主机发送内部地址计数器指示的寄存器的数据之后,方法还包括:接收主机发送的非应答信号;停止向主机发送数据。主机接收到最后一个字节后,可以发送一个非应答信号(nack),以通知从机结束数据发送,并释放sda线。主机在从机释放sda线后可以发送一个停止信号(停止信号),结束本次通信。
17.第三方面,本技术实施例提供一种从机,从机通过i2c总线与主机连接,从机包括:接收模块,用于接收主机发送的启动信号;接收模块,还用于接收主机发送的从机的地址和第一标志位;发送模块,用于向主机发送应答信号;接收模块,还用于接收主机发送的寄存器地址;发送模块,还用于向主机发送应答信号,并通过处理模块根据寄存器地址更新从机的内部地址计数器;发送模块,还用于若第一标志位是读标志位,向主机发送内部地址计数器指示的寄存器的数据。
18.在一种可能的实现方式中,接收模块,还用于:若第一标志位是写标志位,接收主机发送的数据;发送模块,还用于向主机发送应答信号。
19.在一种可能的实现方式中,发送模块每用于发送一个字节,接收模块用于等待接收来自主机的应答信号;若接收模块接收到来自主机的应答信号,发送模块用于继续发送下一个字节。
20.在一种可能的实现方式中,接收模块还用于接收主机发送的非应答信号;发送模块,还用于停止向主机发送数据。
21.第四方面,本技术实施例提供一种从机,从机通过i2c总线与主机连接,从机包括:接收模块,用于接收主机发送的启动信号;接收模块,还用于接收从机的地址和第一标志位;发送模块,用于向主机发送应答信号;接收模块,还用于若第一标志位是读标志位,接收主机发送的寄存器地址;发送模块,还用于向主机发送应答信号,并根据主机发送的寄存器地址更新从机的内部地址计数器;发送模块,还用于向主机发送内部地址计数器指示的寄存器的数据。
22.在一种可能的实现方式中,接收模块,还用于若第一标志位是写标志位,接收主机发送的寄存器地址;发送模块,还用于向主机发送应答信号,并根据主机发送的寄存器地址更新从机的内部地址计数器;接收模块,还用于接收主机发送的数据;发送模块,还用于向
主机发送应答信号。
23.在一种可能的实现方式中,发送模块每用于发送一个字节,接收模块用于等待接收来自主机的应答信号;若接收模块接收到来自主机的应答信号,发送模块用于继续发送下一个字节。
24.在一种可能的实现方式中,接收模块还用于接收主机发送的非应答信号;发送模块,还用于停止向主机发送数据。
25.第五方面,本技术实施例提供一种基于i2c总线的数据读写方法,应用于包括主机和从机的通信系统,主机和从机通过i2c总线连接,该方法包括:主机发送启动信号,从机接收主机发送的启动信号;主机发送从机的地址和第一标志位,从机接收主机发送的从机的地址和第一标志位;从机向主机发送应答信号;主机发送寄存器地址,从机接收主机发送的寄存器地址;从机向主机发送应答信号,并根据寄存器地址更新从机的内部地址计数器;若第一标志位是读标志位,从机向主机发送内部地址计数器指示的寄存器的数据,主机接收从机发送的数据。
26.第六方面,本技术实施例提供一种基于i2c总线的数据读写方法,应用于包括主机和从机的通信系统,主机和从机通过i2c总线连接,该方法包括:主机发送启动信号,从机接收主机发送的启动信号;主机发送从机的地址和第一标志位,从机接收从机的地址和第一标志位;从机向主机发送应答信号;若第一标志位是读标志位,主机向从机发送寄存器地址,从机接收主机发送的寄存器地址;从机向主机发送应答信号,并根据主机发送的寄存器地址更新从机的内部地址计数器;从机向主机发送内部地址计数器指示的寄存器的数据,主机接收从机发送的数据。
27.第七方面,本技术提供一种芯片系统,该芯片系统包括一个或多个接口电路和一个或多个处理器。该接口电路和处理器通过线路互联。
28.上述芯片系统可以应用于包括通信模块和存储器的电子设备。电子设备包括主机和从机。该接口电路用于从电子设备的存储器接收信号,并向处理器发送接收到的信号,该信号包括存储器中存储的计算机指令。当处理器执行该计算机指令时,电子设备中的主机或从机可以执行如第一方面-第六方面及其任一种可能的设计方式所述的方法。
29.第八方面,本技术提供一种计算机可读存储介质,该计算机可读存储介质包括计算机指令。当计算机指令在电子设备上运行时,该电子设备包括主机和从机,使得该电子设备中的主机或从机执行如第一方面-第六方面及其任一种可能的设计方式所述的方法。
30.第九方面,本技术提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如第一方面-第六方面及其任一种可能的设计方式所述的方法。
31.第十方面,本技术实施例提供了一种数据读写装置,包括处理器,处理器和存储器耦合,存储器存储有程序指令,当存储器存储的程序指令被处理器执行时使得所述装置实现上述第一方面-第六方面及其任一种可能的设计方式所述的方法。所述装置可以为电子设备,电子设备包括主机和从机;或可以为电子设备中的一个组成部分,如芯片,该芯片可以是主机或从机。
32.第十一方面,本技术实施例提供了一种数据读写装置,所述装置可以按照功能划分为不同的逻辑单元或模块,各单元或模块执行不同的功能,以使得所述装置执行上述第
一方面-第六方面及其任一种可能的设计方式所述的方法。该数据读写装置可以为从机或主机。
33.第十二方面,本技术实施例提供了一种数据读写系统,包括主机和从机,所述主机和从机分别执行部分步骤,相互配合以实现上述第五方面、第六方面及其任一种可能的设计方式所述的方法。
34.可以理解地,上述提供的第七方面所述的芯片系统,第八方面所述的计算机可读存储介质,第九方面所述的计算机程序产品及第十方面、第十一方面所述的装置及第十二方面所述的系统所能达到的有益效果,可参考如第一方面-第六方面及其任一种可能的设计方式中的有益效果,此处不再赘述。
附图说明
35.图1为现有技术的一种读写操作格式的示意图;图2为现有技术的一种读写操作的流程示意图;图3为本技术实施例提供的一种通信系统示意图;图4为本技术实施例提供的一种电子设备的结构示意图;图5为本技术实施例提供的一种流程示意图;图6为本技术实施例提供的一种读操作格式的示意图;图7为本技术实施例提供的一种写操作格式的示意图;图8为本技术实施例提供的又一种流程示意图;图9为本技术实施例提供的一种从机的结构示意图;图10为本技术实施例提供的一种芯片系统的结构示意图。
具体实施方式
36.为了下述各实施例的描述清楚简洁,首先给出相关概念或技术的简要介绍:i2c总线:是由飞利浦(philips)公司开发的一种简单的双向两线总线,包括时钟线(scl)和数据线(sda)两根线。其中,scl用于传输时钟(clk)信号,sda用于传输通信数据。
37.i2c通信的时候,通信双方包括i2c主机(简称为主机)和i2c从机(简称为从机)。通信由主机发起和主导,主机负责调度i2c总线,决定某一时间和哪个从机通信。从机按照i2c协议被动的接收主机的通信,并及时响应。其中,主机也可以称为主设备,主器件、主控器等,从机也可以称为主设备、从器件、从控器等,本技术不做限定。
38.通信双方可以自行约定主机和从机。一般来说,一个设备/芯片可以只做主机(例如,处理器芯片一般只做主机),也可以只做从机(例如,一些传感器芯片一般只做从机),也可以既能做主机又能做从机(通过软件来配置是主机还是从机)。
39.i2c通信可以一对一(一个主机对一个从机),也可以一对多(一个主机对多个从机)。但在同一时间内,i2c的总线上只能传输一对设备的通信信息,即同一时间只能有一个从机和主机通信,其他从机处于“休眠”。
40.i2c 总线上的器件的地址格式包括7 位和10 位两种。两种地址格式的器件可以连接在同一个i2c总线上。
41.现有技术中,主机进行i2c读取操作时需要先发送“写”标志位而非“读”标志位,这
是一个“伪写”操作,目的是更新从机的内部地址计数器,使内部地址计数器指向对应的寄存器地址。这是由于目前在i2c协议中,仅有“写”操作才可以将主机发送的寄存器地址写入从机的内部地址计数器中(即将主机发送的寄存器地址更新到从机的内部地址计数器中)。然而,这样的设计导致在“读”操作(读取操作)中,起始信号和从机地址都被重复发送一次。例如,假设传输的总数据位有8位,写入操作共需要29位(包括1位起始信号位、7位从机地址位、1位写标志位、1位从机应答位、8位寄存器地址位、1位从机应答位、8位数据位、1位从机应答位和1位终止信号位),而读取操作共需要 39位(包括1位起始信号位、7位从机地址位、1位写标志位、1位从机应答位、8位寄存器地址位、1位从机应答位、1位重启信号位、7位从机地址位、1位读标志位、1位从机应答位、8位数据位、1位主机非应答位和1位终止信号位),显然使得读取操作更加复杂化。
42.本技术提供一种基于i2c总线的数据读写方法和装置,能够解决现有i2c协议读取操作复杂的问题,在不改变数据传输稳定性的前提下,可以精简报文长度,提高数据读取性能。
43.如图3所示,为本技术实施例基于的通信系统的结构示意图,主要包括i2c总线(包括scl和sda)、主机和从机。其中,主机和从机均连接在i2c总线上,以基于该i2c总线实现主机和从机之间的通信。
44.图3中以i2c总线上连接一个主机和三个从机为例进行说明。在实际应用中,i2c总线可以连接更多主机和更多或更少从机,本技术对i2c总线上连接的主机和从机的数量不做限定。
45.其中,主机或从机例如可以是处理器、内存条、光模块、实时时钟(real_time clock,rtc)芯片、温度传感器、带有i2c接口的各种插卡、扣卡、单片机等电子器件。
46.主机和从机可以包含于电子设备,电子设备例如可以是手机、服务器、台式电脑、笔记本电脑、平板电脑、路由器、交换机及其他可基于i2c协议通信电子设备。
47.图4为本技术实施例提供的一种电子设备100的结构示意图。如图4所示,电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,usb)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170a,受话器170b,麦克风170c,耳机接口170d,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,sim)卡接口195等。
48.其中,传感器模块180可以包括压力传感器180a,陀螺仪传感器180b,气压传感器180c,磁传感器180d,加速度传感器180e,距离传感器180f,接近光传感器180g,指纹传感器180h,温度传感器180j,触摸传感器180k,环境光传感器180l,骨传导传感器180m等。
49.可以理解的是,本实施例示意的结构并不构成对电子设备100的具体限定。在另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
50.处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,ap),调制解调处理器,图形处理器(graphics processing unit,gpu),图像信号处理器(image signal processor,isp),控制器,存储器,视频编解码
scdma),长期演进(long term evolution,lte),bt,gnss,wlan,nfc,fm,和/或ir技术等。所述gnss可以包括全球卫星定位系统(global positioning system,gps),全球导航卫星系统(global navigation satellite system,glonass),北斗卫星导航系统(beidou navigation satellite system,bds),准天顶卫星系统(quasi-zenith satellite system,qzss)和/或星基增强系统(satellite based augmentation systems,sbas)。
59.电子设备100通过gpu,显示屏194,以及应用处理器等实现显示功能。gpu为图像处理的微处理器,连接显示屏194和应用处理器。gpu用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个gpu,其执行程序指令以生成或改变显示信息。
60.显示屏194用于显示图像,视频等。该显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,lcd),发光二极管(light-emitting diode,led),有机发光二极管(organic light-emitting diode,oled),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode,amoled),柔性发光二极管(flex light-emitting diode,fled),miniled,microled,micro-oled,量子点发光二极管(quantum dot light emitting diodes,qled)等。
61.电子设备100可以通过isp,摄像头193,视频编解码器,gpu,显示屏194以及应用处理器等实现拍摄功能。isp 用于处理摄像头193反馈的数据。摄像头193用于捕获静态图像或视频。数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。视频编解码器用于对数字视频压缩或解压缩。电子设备100可以支持一种或多种视频编解码器。这样,电子设备100可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,mpeg)1,mpeg2,mpeg3,mpeg4等。
62.摄像头193可以包括1~n个。每个摄像头包括感光元件(ccd/cmos),可以通过感光元件(ccd/cmos)进行感光,收集光子并转换成电荷。
63.例如,电子设备可以包括2个前置摄像头和3个后置摄像头。其中,前置摄像头可以包括前置主摄像头和tof摄像头。其中,tof摄像头可以包括tx和rx,tx可以用于发射光信号(红外光或激光脉冲),rx可以用于接收成像。tx例如可以为红外光发射器。rx例如可以为互补金属氧化物半导体(complementary metal oxide semiconductor,cmos)或者电荷耦合器件(charge coupled device,ccd)图像感应器。可选的,前置摄像头还可以包括前置副摄像头。
64.其中,后置摄像头例如可以包括后置主摄像头、广角摄像头(也可以称为超广角摄像头)和远焦摄像头等。当然,后置摄像头还可以包括其他类型的摄像头,例如,还可以包括深度摄像头模组、黑白摄像头模组、微距摄像头模组等,本技术不做限定。其中,后置主摄像头可以为广角摄像头,后置主摄像头与超广角摄像头的视角可以不同。
65.外部存储器接口120可以用于连接外部存储卡,例如micro sd卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理。例如,在本技术实施例中,处理器110可以通过执行存储在内部存储器121中的指令,内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如
声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,ufs)等。
66.电子设备100可以通过音频模块170,扬声器170a,受话器170b,麦克风170c,耳机接口170d,以及应用处理器等实现音频功能。例如音乐播放,录音等。
67.音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。扬声器170a,也称“喇叭”,用于将音频电信号转换为声音信号。受话器170b,也称“听筒”,用于将音频电信号转换成声音信号。麦克风170c,也称“话筒”,“传声器”,用于将声音信号转换为电信号。耳机接口170d用于连接有线耳机。
68.按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。马达191可以产生振动提示。马达191可以用于来电振动提示,也可以用于触摸振动反馈。指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。sim卡接口195用于连接sim卡。sim卡可以通过插入sim卡接口195,或从sim卡接口195拔出,实现和电子设备100的接触和分离。电子设备100可以支持1个或n个sim卡接口,n为大于1的正整数。sim卡接口195可以支持nano sim卡,micro sim卡,sim卡等。
69.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。其中,在本技术的描述中,除非另有说明,“至少一个”是指一个或多个,
ꢀ“
多个”是指两个或多于两个。另外,为了便于清楚描述本技术实施例的技术方案,在本技术的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
70.为了便于理解,以下结合附图对本技术实施例提供的基于i2c总线的数据读写方法进行具体介绍。
71.如图5所示,本技术实施例提供一种基于i2c总线的数据读写方法,应用于包括主机和从机的通信系统,主机和从机通过i2c总线连接,本技术实施例以从机地址为7位的格式为例对基于i2c总线的数据读写方法进行说明,包括:501、主机发送启动信号。
72.主机在检测到i2c总线为“空闲状态”(即 sda、scl 线均为高电平)时,可以主动发送启动信号“s”。启动信号(起始信号)是一种电平跳变时序信号,而不是一个电平信号。i2c总线的启动信号是指在时钟线scl保持高电平期间,数据线sda上的电平被拉低(即负跳变)。启动信号标志着一次数据传输的开始。
73.启动信号是由主机主动建立的,在建立启动信号之前i2c总线必须处于空闲状态。启动信号建立后总线处于忙的状态。
74.502、主机发送从机地址和读/写标志位(第一标志位),等待从机应答。
75.主机发送启动信号后,接着可以发送一个命令字节。示例性的,该命令字节可以由 7 位的从机地址和 1 位读写标志位 r/w组成。
76.其中,7 位的从机地址用于指示主机将要通信的从机的地址,读写标志位 r/w用于指示主机接下来的操作是要写入还是读取。
77.503、从机发送应答信号。
78.i2c总线上的每一个从机对应一个设备地址,该设备地址是从机本身固有的属性。通信时主机确定自己将要通信的从机的地址,然后在总线上以广播的形式发送该从机地址。总线上的所有从机接收主机广播的从机地址。总线上的每个从机将主机广播的从机地址与自身的地址进行比较,若主机广播的从机地址与自身的地址相等,表示主机的通信对象是自己,该从机可以向主机发送应答信号。
79.主机发送命令字节后,可以释放总线(即主机把总线(sda)置为高电平),以便从机拉低总线发出应答信号(ack)。
80.504、主机发送待访问的寄存器地址,等待从机应答。
81.主机接收到从机发送的应答信号后,可以发送8位寄存器地址(reg addr),表示主机接下来需要访问该8位寄存器地址指向的寄存器的数据(例如,读取该寄存器的数据,或向该寄存器写入数据)。
82.505、从机发送应答信号。
83.从机接收到主机发送的8位寄存器地址后,可以拉低总线发出ack。
84.506、从机更新内部地址计数器。
85.从机根据从主机接收到8位寄存器地址更新内部地址计数器,使得内部地址计数器指向该8位寄存器地址指示的寄存器。
86.507、从机判断主机是否发送读标志位。
87.即从机判断步骤503中主机发送的是否是读标志位。
88.若主机发送的是读标志位,可以执行步骤508-510;若主机发送的不是读标志位,可以执行步骤511-514。
89.508、从机向主机发送数据。
90.示例性的,若读写标志位 r/w为高电平,表示主机发送的是读标志位,说明主机需要读取数据,此时从机发送数据,主机接收数据。
91.i2c通信时的基本数据单位是字节(byte),每次传输的有效数据都是1个字节(8bit)。从机每发送一个字节(在8个时钟脉冲期间占用数据线),就在第9个时钟脉冲期间释放数据线,以便主机反馈一个应答信号(ack)。从机可以通过主机发送的应答信号了解主机的接收状况。主机的应答信号为低电平时,表示主机已经成功地接收了该字节,从机可以继续发送下一个字节。
92.应该理解的是,在i2c总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在scl串行时钟的配合下,在sda上逐位地串行传送每一位数据。进行数据传送时,在scl呈现高电平期间,sda上的电平必须保持稳定,低电平表示数据0,高电平表示数据1。只有在scl为低电平期间,才允许sda上的电平改变状态。数据位的传输是边沿触发。
93.509、主机发送应答信号。
94.从机每发送一个字节(在8个时钟脉冲期间占用数据线),就在第9个时钟脉冲期间释放数据线,这样主机可以通过拉低数据线向从机反馈应答信号。
95.步骤508和509可以循环执行,直至主机发送终止信号(即执行步骤510)。
96.510、主机发送终止信号。
97.主机接收到最后一个字节后,可以发送一个非应答信号(nack),以通知从机结束数据发送,并释放sda线。主机在从机释放sda线后可以发送一个停止信号(停止信号),结束本次通信。
98.其中,终止信号是指在时钟线scl保持高电平期间,数据线sda被释放,使得sda返回高电平(即正跳变)。终止信号是一种电平跳变时序信号,而不是一个电平信号。终止信号建立后,i2c总线将返回空闲状态。
99.示例性的,如图6所示,读取操作的信号格式包括起始信号位(s)、从机地址位(a6a5a4a3a2a1a0)、读标志位(r)、从机应答位(a)、寄存器地址位(b7b6b5b4b3b2b1b0)、从机应答位(a)、数据位(d7d6d5d4d3d2d1d0)、主机非应答位(na)和终止信号位(p)。其中,起始信号位、从机地址位、读标志位、寄存器地址位、主机非应答位和终止信号位是主机发送的,从机应答位和数据位是从机发送的。
100.511、主机向从机发送数据。
101.示例性的,若读写标志位 r/w为低电平,表示主机发送的是写标志位而非读标志位,说明主机需要写入数据,此时主机向从机发送数据,从机接收来自主机的数据。
102.主机每发送一个字节(占用8个时钟脉冲),就在第9个时钟脉冲期间释放数据线,由从机反馈一个应答信号。主机可以通过从机发送的 ack 信号了解从机的接收状况。从机的应答信号为低电平时,表示从机已经成功地接收了该字节。
103.512、从机发送应答信号。
104.从机接收主机发送的数据,将该数据写入内部地址计数器指示的寄存器,并在主机释放数据线时,通过拉低数据线向主机反馈应答信号。可以理解的是,主机每发送一个字节(在8个时钟脉冲期间占用数据线),就在第9个时钟脉冲期间释放数据线,这样从机可以通过拉低数据线向主机反馈应答信号。
105.若从机发送应答信号,可以继续执行步骤511和512,或者可以执行步骤514。
106.其中,步骤511和512可以循环执行,直至主机发送终止信号(即执行步骤514)。
107.513、从机忙。
108.从机不发送应答信号可能是由于从机处于忙状态,暂时无法与主机通讯。从机处于忙状态可以是从机正在处理一些相较此次操作更高级别的指令操作,或者从机正在执行无法中断的操作,不能立即响应当前主机下发的指令(例如,写指令)。另外,从机不发送应答信号也可能是由于从机不支持主机发送的指令。
109.514、主机发送终止信号。
110.主机完成数据传输后,或主机确定从机处于异常状态(例如,忙状态)时,可以发送终止信号。即在时钟线scl保持高电平期间,释放数据线sda,使得sda返回高电平(即正跳变)。
111.示例性的,如图7所示,写入操作的信号格式包括起始信号位(s)、从机地址位(a6a5a4a3a2a1a0)、写标志位(w)、从机应答位(a)、寄存器地址位(b7b6b5b4b3b2b1b0)、从机应答位(a)、数据位(d7d6d5d4d3d2d1d0)、从机应答位(a)和终止信号位(p)。其中,起始信号位、从机地址位、写标志位、寄存器地址位、数据位和终止信号位是主机发送的,从机应答位是从机发送的。
112.基于本技术实施例提供的方法,在主机发送从机地址和读/写标志位且从机应答后,主机向从机发送寄存器地址,从机应答并立即对从机内部地址计数器进行更新(无论主机发送的是读标志位还是写标志位,从机都对从机内部地址计数器进行更新)。而后从机再进行读/写标志位判断,若是读则翻转数据传输方向,即从机给主机发送数据;若是写则保持原传输方向不变,即主机给从机发送数据。这样,取消了原有i2c协议读操作中的“伪写”操作,无需依赖“写”操作将寄存器地址填入从机的内部地址计数器中,精简了读操作的报文长度,提升了通信效率。
113.示例性的,假设一次传输的总数据位有8位,基于本技术实施例提供的方法,写入操作和读取操作都仅需要29位(包括1位起始信号位、7位从机地址位、1位读/写标志位、1位从机应答位、8位寄存器地址位、1位从机应答位、8位数据位、1位从机应答位和1位终止信号位)。相比现有技术中读取操作需要39位的报文长度,本技术实施例提供的方法使得读取操作的报文长度更短,能够解决现有i2c协议读取操作复杂的问题。在不改变数据传输稳定性的前提下,可以精简报文长度,提高数据读取性能。
114.如图8所示,本技术实施例提供一种基于i2c总线的数据读写方法,应用于包括主机和从机的通信系统,主机和从机通过i2c总线连接,本技术实施例以从机地址为7位的格式为例对基于i2c总线的数据读写方法进行说明,包括:801、主机发送启动信号。
115.主机在检测到i2c总线为“空闲状态”(即 sda、scl 线均为高电平)时,可以主动发送启动信号“s”。启动信号(起始信号)是一种电平跳变时序信号,而不是一个电平信号。i2c总线的启动信号是指在时钟线scl保持高电平期间,数据线sda上的电平被拉低(即负跳变)。启动信号标志着一次数据传输的开始。
116.启动信号是由主机主动建立的,在建立启动信号之前i2c总线必须处于空闲状态。启动信号建立后总线处于忙的状态。
117.802、主机发送从机地址和读/写标志位(第一标志位),等待从机应答。
118.主机发送启动信号后,接着可以发送一个命令字节,该命令字节可以由 7 位的从机地址和 1 位读写标志位 r/w组成。
119.其中,7 位的从机地址用于指示主机将要通信的从机的地址,读写标志位 r/w用于指示主机接下来的操作是要写入还是读取。
120.803、从机发送应答信号。
121.i2c总线上的每一个从机对应一个设备地址,该设备地址是从机本身固有的属性。通信时主机确定自己将要通信的从机的地址,然后在总线上以广播的形式发送该从机地址。总线上的所有从机接收主机广播的从机地址。总线上的每个从机将主机广播的从机地址与自身的地址进行比较,若主机广播的从机地址与自身的地址相等,表示主机的通信对象是自己,该从机可以向主机发送应答信号。
122.主机发送命令字节后,可以释放总线(即主机把总线(sda)置为高电平),以便从机拉低总线发出应答信号(ack)。
123.804、从机判断主机是否发送读标志位。
124.即从机判断步骤803中主机发送的是否是读标志位。
125.若主机发送的是读标志位,可以执行步骤805-810。
126.若主机发送的是写标志位,可以执行步骤811-817。
127.下面对从机判断主机发送读标志位后执行的步骤805-810进行说明:805、主机发送待访问的寄存器地址,等待从机应答。
128.主机接收到从机发送的应答信号后,可以发送8位寄存器地址(reg addr),表示主机接下来需要访问该8位寄存器地址指向的寄存器的数据(例如,读取该寄存器的数据,或向该寄存器写入数据)。
129.806、从机发送应答信号。
130.从机接收到主机发送的8位寄存器地址后,可以拉低总线发出ack。
131.807、从机更新内部地址计数器。
132.从机根据从主机接收到8位寄存器地址更新内部地址计数器,使得内部地址计数器指向该8位寄存器地址指示的寄存器。
133.808、从机向主机发送数据。
134.示例性的,若读写标志位 r/w为高电平,表示主机发送的是读标志位,说明主机需要读取数据,此时从机发送数据,主机接收数据。
135.i2c通信时的基本数据单位是字节(byte),每次传输的有效数据都是1个字节(8bit)。从机每发送一个字节(在8个时钟脉冲期间占用数据线),就在第9个时钟脉冲期间释放数据线,以便主机反馈一个应答信号(ack)。从机可以通过主机发送的应答信号了解主机的接收状况。主机的应答信号为低电平时,表示主机已经成功地接收了该字节,从机可以继续发送下一个字节。主机的应答信号为高电平时,表示主机接收该字节没有成功,从机可以重发该字节。
136.应该理解的是,在i2c总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在scl串行时钟的配合下,在sda上逐位地串行传送每一位数据。进行数据传送时,在scl呈现高电平期间,sda上的电平必须保持稳定,低电平表示数据0,高电平表示数据1。只有在scl为低电平期间,才允许sda上的电平改变状态。数据位的传输是边沿触发。
137.809、主机发送应答信号。
138.从机每发送一个字节(在8个时钟脉冲期间占用数据线),就在第9个时钟脉冲期间释放数据线,这样主机可以通过拉低数据线向从机反馈应答信号。
139.步骤808和809可以循环执行,直至主机发送终止信号。
140.810、主机发送终止信号。
141.主机接收到最后一个字节后,可以发送一个nack信号,以通知从机结束数据发送,并释放sda线。主机在从机释放sda线后可以发送一个停止信号(停止信号),接收本次通信。
142.其中,终止信号是指在时钟线scl保持高电平期间,数据线sda被释放,使得sda返回高电平(即正跳变)。终止信号是一种电平跳变时序信号,而不是一个电平信号。终止信号建立后,i2c总线将返回空闲状态。
143.示例性的,如图6所示,读取操作的信号格式包括起始信号位(s)、从机地址位(a6a5a4a3a2a1a0)、读标志位(r)、从机应答位(a)、寄存器地址位(b7b6b5b4b3b2b1b0)、从机应答位(a)、数据位(d7d6d5d4d3d2d1d0)、主机非应答位(na)和终止信号位(p)。其中,起始信号位、从机地址位、读标志位、寄存器地址位、主机非应答位和终止信号位是主机发送的,从机应答位和数据位是从机发送的。
144.下面对从机判断主机发送写标志位(而非读标志位)后执行的步骤811-818进行说明:811、主机发送待访问的寄存器地址,等待从机应答。
145.主机接收到从机发送的应答信号后,可以发送8位寄存器地址(reg addr),表示主机接下来需要访问该8位寄存器地址指向的寄存器的数据(例如,读取该寄存器的数据,或向该寄存器写入数据)。
146.812、从机发送应答信号。
147.从机接收到主机发送的8位寄存器地址后,可以拉低总线发出ack。
148.813、从机更新内部地址计数器。
149.从机根据从主机接收到8位寄存器地址更新内部地址计数器,使得内部地址计数器指向该8位寄存器地址指示的寄存器。
150.814、主机向从机发送数据。
151.示例性的,若读写标志位 r/w为低电平,表示主机发送的是写标志位而非读标志位,说明主机需要写入数据,此时主机向从机发送数据,从机接收来自主机的数据。
152.主机每发送一个字节(占用8个时钟脉冲),就在第9个时钟脉冲期间释放数据线,由从机反馈一个应答信号。主机可以通过从机发送的 ack 信号了解从机的接收状况。从机的应答信号为低电平时,表示从机已经成功地接收了该字节。从机的应答信号为高电平时,表示从机接收该字节没有成功,从机可以重发该字节。
153.815、从机发送应答信号。
154.主机每发送一个字节(在8个时钟脉冲期间占用数据线),就在第9个时钟脉冲期间释放数据线,这样从机可以通过拉低数据线向主机反馈应答信号。
155.步骤814和815可以循环执行,直至主机发送终止信号。
156.816、从机忙。
157.从机不发送应答信号可能是由于从机处于忙状态,暂时无法与主机通讯。从机处于忙状态可以是从机正在处理一些相较此次操作更高级别的指令操作,或者从机正在执行无法中断的操作,不能立即响应当前主机下发的指令(例如,写指令)。另外,从机不发送应答信号也可能是由于从机不支持主机发送的指令。
158.817、主机发送终止信号。
159.主机完成数据传输后,或主机确定从机处于异常状态(例如,忙状态)时,可以发送终止信号。即在时钟线scl保持高电平期间,释放数据线sda,使得sda返回高电平(即正跳变)。
160.示例性的,如图7所示,写入操作的信号格式包括起始信号位(s)、从机地址位(a6a5a4a3a2a1a0)、写标志位(w)、从机应答位(a)、寄存器地址位(b7b6b5b4b3b2b1b0)、从机应答位(a)、数据位(d7d6d5d4d3d2d1d0)、从机应答位(a)和终止信号位(p)。其中,起始信号位、从机地址位、写标志位、寄存器地址位、数据位和终止信号位是主机发送的,从机应答位是从机发送的。
161.基于本技术实施例提供的方法,在主机发送从机地址和读/写标志位后,从机应答并立即对读/写标志位进行判断,若确定是读标志位,则从机等待主机发送的寄存器地址,并根据主机发送的寄存器地址对从机内部地址计数器进行更新,而后翻转数据传输方向,
即从机向主机发送数据;若确定是写标志位,则从机等待主机发送的寄存器地址,并根据主机发送的寄存器地址对从机内部地址计数器进行更新,而后保持原传输方向不变,即主机给从机发送数据。即无论主机发送的是读标志位还是写标志位,从机都对从机内部地址计数器进行更新,而后在主机发送读标志位的情况下翻转数据传输方向,即从机向主机发送数据,而在主机发送写标志位的情况下保持原数据传输方向,即主机向从机发送数据(从机从主机接收数据)。这样,取消了原有i2c协议读操作中的“伪写”操作,无需依赖“写”操作将寄存器地址填入从机的内部地址计数器中,精简了读操作的报文长度,提升了通信效率。
162.图8所示的实施例与图5所示的实施例的区别是,图5所示的实施例是先更新从机内部地址计数器,再判断读/写标志位,并根据判断结果确定是否翻转数据传输方向,即判断是从机发送数据,还是从机等待主机发送数据;而图8所示的实施例是先判断读/写标志位,再更新从机内部地址计数器,而后根据判断结果确定是否翻转数据传输方向,即判断是从机发送数据,还是从机等待主机发送数据。无论是采用图8所示的实施例还是图5所示的实施例,读写操作实际的协议传输格式是一致的,相较于现有技术取消了原有i2c协议读操作中的“伪写”操作,精简了读操作的报文长度,提升了通信效率。
163.参阅图9,本发明实施例提供的i2c通信系统是在现有技术中的基于i2c通信协议的系统上所作的改进。从机90可以包括:接收模块901,用于接收主机发送的启动信号;接收模块901,还用于接收主机发送的从机的地址和第一标志位;发送模块902,用于向主机发送应答信号;接收模块901,还用于接收主机发送的寄存器地址;发送模块902,还用于向主机发送应答信号,并通过处理模块903根据寄存器地址更新从机的内部地址计数器;发送模块902,还用于若第一标志位是读标志位,向主机发送内部地址计数器指示的寄存器的数据。
164.在一种可能的实现方式中,接收模块901,还用于:若第一标志位是写标志位,接收主机发送的数据;发送模块902,还用于向主机发送应答信号。
165.在一种可能的实现方式中,发送模块902每用于发送一个字节,接收模块901用于等待接收来自主机的应答信号;若接收模块901接收到来自主机的应答信号,发送模块902用于继续发送下一个字节。
166.在一种可能的实现方式中,接收模块901还用于接收主机发送的非应答信号;发送模块902,还用于停止向主机发送数据。
167.或者,从机可以包括:接收模块901,用于接收主机发送的启动信号;接收模块901,还用于接收从机的地址和第一标志位;发送模块902,用于向主机发送应答信号;接收模块901,还用于若第一标志位是读标志位,接收主机发送的寄存器地址;发送模块902,还用于向主机发送应答信号,并根据主机发送的寄存器地址更新从机的内部地址计数器;发送模块902,还用于向主机发送内部地址计数器指示的寄存器的数据。
168.在一种可能的实现方式中,接收模块901,还用于若第一标志位是写标志位,接收主机发送的寄存器地址;发送模块902,还用于向主机发送应答信号,并根据主机发送的寄存器地址更新从机的内部地址计数器;接收模块901,还用于接收主机发送的数据;发送模块902,还用于向主机发送应答信号。
169.在一种可能的实现方式中,发送模块902每用于发送一个字节,接收模块901用于等待接收来自主机的应答信号;若接收模块901接收到来自主机的应答信号,发送模块902用于继续发送下一个字节。
170.在一种可能的实现方式中,接收模块901还用于接收主机发送的非应答信号;发送模块902,还用于停止向主机发送数据。
171.本技术实施例还提供一种芯片系统,如图10所示,该芯片系统包括至少一个处理器1001和至少一个接口电路1002。处理器1001和接口电路1002可通过线路互联。例如,接口电路1002可用于从其它装置(例如,电子设备的存储器)接收信号。又例如,接口电路1002可用于向其它装置(例如处理器1001)发送信号。
172.例如,接口电路1002可读取电子设备中存储器中存储的指令,并将该指令发送给处理器1001。电子设备包括主机和从机,当所述指令被处理器1001执行时,可使得主机或从机执行上述实施例中的各个步骤。
173.当然,该芯片系统还可以包含其他分立器件,本技术实施例对此不作具体限定。
174.本技术实施例还提供一种计算机可读存储介质,该计算机可读存储介质包括计算机指令,当所述计算机指令在电子设备(如图4所示的电子设备100)上运行时,使得电子设备100中的部件执行上述方法实施例中主机或从机执行的各个功能或者步骤。
175.本技术实施例还提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行上述方法实施例中主机或从机执行的各个功能或者步骤。
176.本技术实施例还提供了一种数据读写装置,所述数据读写装置可以按照功能划分为不同的逻辑单元或模块,各单元或模块执行不同的功能,以使得所述数据读写装置执行上述方法实施例中主机或从机执行的各个功能或者步骤。
177.通过以上实施方式的描述,所属领域的技术人员可以清楚地了解到,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
178.在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
179.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
180.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
181.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本技术各个实施例所述方法的全部或部分步骤。
而前述的存储介质包括:u盘、移动硬盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
182.以上内容,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何在本技术揭露的技术范围内的变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献