CN1558332A - 一种实现自动读写内部集成电路设备的装置和方法 - Google Patents
一种实现自动读写内部集成电路设备的装置和方法 Download PDFInfo
- Publication number
- CN1558332A CN1558332A CNA2004100007755A CN200410000775A CN1558332A CN 1558332 A CN1558332 A CN 1558332A CN A2004100007755 A CNA2004100007755 A CN A2004100007755A CN 200410000775 A CN200410000775 A CN 200410000775A CN 1558332 A CN1558332 A CN 1558332A
- Authority
- CN
- China
- Prior art keywords
- register
- generation module
- read
- command generation
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Transfer Systems (AREA)
Abstract
本发明公开一种实现自动读写I2C设备的装置和方法,装置由硬件实现的指令产生模块和读写操作执行模块组成,指令产生模块通过异步访问总线分别与主动设备及读写操作执行模块相连,读写操作执行模块通过I2C总线与I2C设备相连,读写时,主动设备提供启动信号、读/写信号以及I2C设备的设备地址、寄存器地址和要写入寄存器的数据,指令产生模块自动产生访问I2C设备所需的指令,依序送到读写操作执行模块,读写操作执行模块再遵照I2C总线协议产生访问I2C设备需要的信号时序,执行对I2C设备的读写操作,本发明装置还向主动设备返回指令执行情况。本发明可以简化访问I2C设备时的软件操作,节省CPU时间。
Description
技术领域
本发明涉及一种集成电路设备的读写装置和方法,尤其涉及数据通讯领域中实现对I2C(inter-integrated circuit内部集成电路,一种标准接口电路,是由PHILIPS公司提出发明的)设备自动读或写的装置和方法。
背景技术
在很多的情况下电子设备系统或CPU应用系统具有低速异步访问总线接口,但没有I2C总线(包括SDA和SCL两个信号线,分别表示是I2C总线的数据信号线和时钟信号线,以下的I2C总线均是指这两个信号线)接口,而此时需要对I2C设备进行读、写访问。这就需要进行低速异步访问总线和I2C接口总线的转换。
现有的实现低速异步访问总线和I2C接口总线转换的方法一般比较复杂,在WWW.FPGA.COM.CN网站上,XILINX(美国FPGA芯片生产厂商)提供的一个最新的I2C总线控制IP CORE(集成电路逻辑内核),就是采用这种较复杂的方法,若主动设备(比如CPU)要访问一个I2C设备,要CPU一步一步按I2C总线协议执行。
例如,CPU要执行读一个I2C设备,要执行的步骤是:
1)CPU把I2C的设备地址(DEVICE ADDRESS)写到数据寄存器,并设置写标志;
2)CPU读状态寄存器,判断I2C总线是否忙,若不忙执行下一步;
3)CPU写控制寄存器,发送“开始”(START)和发送I2C设备地址(DEVICE ADDRESS);
4)CPU读状态寄存器,判断发送是否完毕并且收到从设备的回应(ACK),若收到回应,则进行下一步操作;
5)CPU把要访问I2C设备的寄存器地址(WORD ADDRESS)写到数据寄存器;
6)CPU写控制寄存器,把I2C设备的寄存器地址送出;
7)CPU读状态寄存器,判断发送是否完毕并且收到从设备的回应(ACK)。若收到回应,则进行下一步操作;
8)CPU写控制寄存器,发送“结束”(STOP);
9)CPU延时(因有些I2C设备需要附加延时,比如AT24C04要求上一个“结束”和下一个“开始”之间必须有10毫秒的延时);
10)CPU把I2C的设备地址(DEVICE ADDRESS)写到数据寄存器,并设置读标志;
11)CPU写控制寄存器,发送“开始”(START)和发送I2C设备地址(DEVICE ADDRESS);
12)CPU读状态寄存器,判断发送是否完毕并且收到从设备的回应(ACK),若收到回应,则进行下一步操作;
13)CPU设置控制寄存器,使逻辑处于接收状态;
14)判断状态寄存器,数据是否接收完成。完成则执行下一步
15)CPU读数据寄存器,得到要读的数据。
可以看出,每一步都离不开CPU的操作和判断,不但程序复杂,而且CPU大量的时间花在等待慢速设备的响应上。
由于I2C设备是较慢速的设备,访问这样的慢速设备较耗CPU的时间;若用软件一步一步操作,包括发送START信号,发送数据,检测SLAVE设备(从设备)的响应信号,再送STOP信号。每一步操作都要求外部处理器参与发送指令或判断等,将会浪费CPU的大量操作周期,对于CPU处理性能要求较高的系统来说,这是非常不划算的,也是不可取的。另外,若用软件实现指导操作访问I2C设备,要求使用者非常了解I2C总线协议,必须按I2C总线的协议一步步完成操作,包括延时多长等都要精确计算。
发明内容
本发明要解决的技术问题是克服现有技术存在的访问内部集成电路设备时操作繁琐,浪费CPU时间的缺陷,提供一种实现自动读写内部集成电路备的装置及方法。
本发明的实现自动读写内部集成电路设备的装置,包括用硬件实现的指令产生模块和读写操作执行模块,所述指令产生模块通过异步访问总线分别与主动设备及所述读写操作执行模块相连,所述读写操作执行模块通过内部集成电路总线与内部集成电路设备相连,其中:
所述指令产生模块,用于接收所述主动设备提供的启动信号、读/写信号以及内部集成电路设备的设备地址、寄存器地址和要写入寄存器的数据,自动产生访问内部集成电路设备所需的指令,依序送到所述读写操作执行模块,并向所述主动设备返回指令执行情况和从内部集成电路设备读出的数据;
所述读写操作执行模块,用于根据所述指令产生模块的指令,遵照内部集成电路总线协议产生访问内部集成电路设备需要的信号时序,执行对内部集成电路设备的读写操作,并向所述指令产生模块返回指令执行情况。
上述装置可具有以下特点:所述指令产生模块在检测到主动设备要写一个内部集成电路设备时,依次发送开始指令、设备地址指令及写指示、寄存器地址指令、数据指令和停止指令。
上述装置可具有以下特点:所述指令产生模块在检测到主动设备要读一个内部集成电路设备时,依次发送开始指令、设备地址指令及写指示、寄存器地址指令、停止指令、开始指令、设备地址指令及读指示、接收数据指令和停止指令。
上述装置可具有以下特点:所述指令产生模块进一步包含:
所述命令控制寄存器,由所述主动设备的启动信号和读/写信号设置相应控制位的值,发动对内部集成电路设备读或写,并在执行失败时设置错误标志;
所述设备地址寄存器,用于存储要访问的内部集成电路设备的设备地址;
所述寄存器地址寄存器,用于存储要访问内部集成电路设备的寄存器的地址;
所述写入数据寄存器,用于存储要写的数据;
所述读出数据寄存器,用于存储要读出的数据;
所述分频设置寄存器,用于设置送出的SDA/SCL信号的频率与输入的CLK频率之间的倍数关系;
所述主动设备通过异步总线的地址信号对上述寄存器进行选择。
上述装置可具有以下特点:所述指令产生模块向所述主动设备返回指令执行情况是通过在一次读或写操作完成后设置一个中断信号,或者在命令控制寄存器执行完操作后将相应的比特位自动清零,或者通过以上两个信号的结合来实现的。
上述装置可具有以下特点:所述读写操作执行模块包含命令寄存器、接收数据寄存器、发送数据寄存器、时钟产生单元、START产生单元、STOP产生单元、数据发送单元和数据接收单元,其中:
所述命令寄存器,由所述指令产生模块的指令设置相应控制位的值,控制所述START产生单元、STOP产生单元、数据发送单元和数据接收单元的启动,并在操作执行完成后将相应位清零;
所述接收数据寄存器,用于缓存数据接收单元接收到的数据;
所述发送数据寄存器,用于缓存数据发送单元将要发送的数据;
时钟产生单元,用于产生读写操作执行模块中各模块所需的时钟;
所述START产生单元,用于产生内部集成电路总线协议中规定的START时序;
所述STOP产生单元,用于产生内部集成电路总线协议中规定的STOP时序;
所述数据发送单元,用于依照内部集成电路总线协议规定的SDA、SDL的时序,将所述发送数据寄存器中的数据发送到内部集成电路总线上;
所述数据接收单元,用于依照内部集成电路总线协议规定的SDA、SDL的时序,接收内部集成电路总线上的数据。
上述装置可具有以下特点:所述指令产生模块和读写操作执行模块之间的异步总线包括复位信号、时钟信号、写使能信号、发送数据寄存器选择信号、命令寄存器选择信号、数据总线输入和输出信号,以及错误指示信号的线路,所述错误指示信号由所述命令寄存器的控制位产生,用于向所述指令产生模块返回指令执行情况。
本发明的实现自动写内部集成电路设备的方法,应用于主动设备通过硬件实现的指令产生模块和写操作执行模块与内部集成电路总线相连的系统中,该方法包括以下步骤:
(a)所述主动设备将要访问的内部集成电路设备的地址,写入所述指令产生模块的设备地址寄存器;
(b)所述主动设备将要访问的内部集成电路设备寄存器的地址写入所述指令产生模块的寄存器地址寄存器;
(c)所述主动设备将要写入的数据写入所述指令产生模块的写入数据寄存器;
(d)所述主动设备设置所述指令产生模块中命令控制寄存器的相应BIT位启动写操作;
(e)所述指令产生模块自动产生写内部集成电路设备所需的指令,依序送到所述写操作执行模块;
(f)所述写操作执行模块根据所述指令产生模块的指令,遵照内部集成电路总线协议产生写内部集成电路设备的信号时序并完成写操作,返回指令执行情况;
(g)所述指令产生模块向所述主动设备返回指令执行情况;
(h)所述主动设备判断操作正确完成后,结束一次写操作。
上述方法中,所述步骤(h)后,如果下一次操作与上一次操作访问的是同一内部集成电路设备,则直接返回步骤(b),否则返回步骤(a)。
上述方法中,所述步骤(e)中,所述指令产生模块依次发送开始指令、设备地址指令及写指示、寄存器地址指令、数据指令和停止指令。
上述方法中,所述步骤(g)中,所述主动设备通过所述指令产生模块的中断报出,或者检测所述指令产生模块相应控制位的值来确认操作是否正确完成;通过检测所述指令产生模块的错误指示位的值来判断是否要进行错误处理操作。
本发明的自动读内部集成电路设备的方法,应用于主动设备通过硬件实现的指令产生模块和读操作执行模块与内部集成电路总线相连的系统中,该方法包括以下步骤:
(a)所述主动设备将要访问的内部集成电路设备的地址,写入所述指令产生模块的设备地址寄存器;
(b)所述主动设备将要访问的内部集成电路设备寄存器的地址写入所述指令产生模块的寄存器地址寄存器;
(c)所述主动设备设置所述指令产生模块中命令控制寄存器的相应BIT位启动读操作;
(d)所述指令产生模块自动产生读内部集成电路设备所需的指令,依序送到所述读操作执行模块;
(e)所述读操作执行模块根据所述指令产生模块的指令,遵照内部集成电路总线协议产生读内部集成电路设备的信号时序并完成读操作,并返回指令执行情况;
(f)所述指令产生模块向所述主动设备返回读出的数据以及指令执行情况;
(g)所述主动设备判断操作正确完成后,从所述指令产生模块读出数据,结束一次读操作。
上述方法中,所述步骤(g)后,如果下一次操作与上一次操作访问的是同一内部集成电路设备,则直接返回步骤(b),否则返回步骤(a)。
上述方法中,所述步骤(d)中,所述指令产生模块依次发送开始指令、设备地址指令及写指示、寄存器地址指令、停止指令、开始指令、设备地址指令及读指示、接收数据指令和停止指令。
上述方法中,所述步骤(g)中,所述主动设备通过所述指令产生模块的中断报出,或者检测所述指令产生模块相应控制位的值来确认操作是否正确完成;通过检测所述指令产生模块的错误指示位的值来判断是否要进行错误处理操作。
由上可知,本发明由硬件实现的指令产生模块产生访问内部集成电路设备需要的一些指令,来取代软件的一些工作,从而完成简化软件繁琐的操作;由读写操作执行模块根据指令产生模块的指令,并遵照内部集成电路总线协议,完成访问内部集成电路设备的具体操作,从而由本发明的装置自动兼容内部集成电路总线协议。从而改变了访问内部集成电路设备过分依赖CPU的这种现象,腾出CPU更多的时间去做其它更重要的工作。同时,让使用者不需要了解繁琐的内部集成电路总线协议,简化了软件的工作量。
附图说明
图1是本发明实施例自动读写I2C设备的装置的结构框图;
图2和图3分别是本发明实施例主动设备和指令产生模块之间的异步访问总线写时序和读时序图;
图4A和图4B是本发明实施例主动设备访问本发明装置的流程图;
图5是本发明实施例指令产生模块的产生指令的流程图;
图6是本发明实施例指令产生模块写时序的示意图;
图7是本发明实施例指令产生模块读时序的示意图;
图8是I2C总线的传输时序图。
具体实施方式
本发明实施例自动读写I2C设备的装置如图1所示,该装置由指令产生模块1和读写操作执行模块2组成,采用FPGA或CPLD来实现。指令产生模块1通过异步访问总线分别与主动设备4和读写操作执行模块2相连,读写操作执行模块2通过I2C总线与I2C设备3相连。其中:
①指令产生模块1,由硬件实现,用于接收所述主动设备提供的启动信号、读/写信号以及I2C设备的设备地址、寄存器地址和要写入寄存器的数据,自动产生访问I2C设备所需的指令,按一定条件和先后顺序送给读写操作执行模块,向所述主动设备返回指令执行情况和从I2C设备读出的数据,并可判断从I2C设备有无响应。
本模块包含命令控制寄存器11、设备地址寄存器12、寄存器地址寄存器13、写入数据寄存器14、读出数据寄存器15及分频设置寄存器16,其中:
命令控制寄存器11,用于发动对I2C设备读或写,为3位W/R寄存器,各比特位的功能如下:
BIT0=1写I2C设备使能,当执行完写操作后,该比特位自动清零;
BIT1=1读I2C设备使能,当执行完读操作后,该比特位自动清零;
BIT2=1在执行读或写的操作中,有错误出现,表示没有正确地执行完读、写操作;
BIT2=0正常。
设备地址寄存器12,用于存储要访问的I2C设备的设备地址,为7位W/R寄存器,对应于图6中的DEVICE ADDRESS;
寄存器地址寄存器13,用于存储要访问I2C设备的寄存器的地址,为8位W/R寄存器,对应图6中的WORD ADDRESS;
写入数据寄存器14,用于存储要写的数据,为8位W/R寄存器;
读出数据寄存器15,用于存储读出的数据,为8位R寄存器;
分频设置寄存器16,用于设置送出的SDA/SCL信号的频率与输入的CLK频率之间的倍数关系,为8位W/R寄存器,CLK的最小值不能低于10MHz。
计算公式为:
这6个寄存器的地址分别是:0、1、2、3、4、5。
这个模块是本发明装置与主动设备(比如CPU)的接口模块。主动设备通过一个通用的异步访问总线与该模块相接,异步访问总线的信号可参见图1,表1给出了异步接口信号的说明。
表1
信号名称 | 解释 |
Data bus | 数据总线。(I/O) |
CLK | 时钟,本发明正常工作必需的时钟信号。In |
CS | 片选信号,低电平有效。In |
WR | 读写信号,低代表写,高代表读。In |
Reset | 复位信号,低电平有效。正常工作时必须为高。In |
INT | 中断输出,0表示读、写操作完成,1未完成或没有读、写操作,读本发明的寄存器E可清该中断。Out |
A[2:0] | 地址总线,要访问指令产生模块的某个寄存器,该总线必须有正确的地址指示。In |
图2,图3示出了上述部分异步接口信号在写和读操作时的传输时序,图中的主动设备4和指令产生模块之间的总线可以是CPU的local bus(本地设备总线,BOOT;FLASH等的访问总线),Power PC(motorola的Power PCCPU系列),单片机(51系列),interl CPU的ISA(Industry Standard Architecture工业标准结构)总线,MIPS CPU的device总线等,任何满足图2,图3时序的异步访问总线都可与本发明对接,直接使用本发明。图中:
Tw-we的时间长度可以不定,只要在有效的写周期(CS=0 and wr=0,databus和A[2:0]有效)内,有一CLK的上升沿即可;
Tw-rd的时间长度可以不定,可以大于10纳秒;
Twr-w和Tcs-w可以相等,也可以不等;
Twr-r和Tcs-r的关系,要满足Twr-r≥Tcs-r。
其中字符段含义如下:
Tw-we主动设备访问本发明写操作的访问周期时间。
Twr-w主动设备访问本发明写操作的访问周期中的写信号有效时间。
Tcs-w主动设备访问本发明写操作的访问周期中的片选信号有效时间。
Tw-rd主动设备访问本发明读操作的访问周期时间。
Twr-r主动设备访问本发明读操作的访问周期中的写信号无效时间。
Tcs-r主动设备访问本发明读操作的访问周期中的片选信号有效时间。
②读写操作执行模块2,用于根据所述指令产生模块1的指令,遵照I2C总线协议产生访问I2C设备需要的信号时序,执行对I2C设备的读写操作,并向所述指令产生模块返回指令执行情况。本模块里包含以下几部分:
命令寄存器21,用于控制START产生模块25、STOP产生单元26、数据发送单元27和数据接收单元28的启动。其受控于指令产生模块1,指令产生模块1通过设置本寄存器的不同比特位,从而达到控制读写操作执行模块工作的目的,START产生模块25、STOP产生单元26、数据发送单元27和数据接收单元28四个模块不能同时工作。本实施例中:
BIT0=1 START产生单元25工作使能,START产生单元将图8中的开始时序(start condition)发送到I2C总线上,操作完成后,将该BIT位清0;
BIT1=1发送数据模块27工作使能,当发送数据模块把发送数据寄存器23里的数据全部发送出,并收到从设备的响应信号后,将该BIT位清0;
BIT2=1接收数据模块28工作使能,当接收数据模块把I2C从设备送来的8位数据全部接收下来,并送出响应信号ACK后,自动将该BIT位清0;
BIT3=1 STOP产生单元26工作使能,STOP产生模块将图8中的结束时序(stop condition)发送到I2C总线上,操作完成后,将该BIT位清0。
接收数据寄存器22,用于缓存数据接收单元28接收到的数据;
发送数据寄存器23,缓存数据发送单元27将要发送的数据;
时钟产生单元24,用于产生读写操作执行模块中各模块所需的时钟;
START产生单元25,用于产生I2C总线协议中规定的START时序;(图8中的start condition开始条件)
STOP产生单元26,用于产生I2C总线协议中规定的STOP时序;(图8中的stop condition结束条件)
数据发送单元27,用于依照I2C总线协议规定的SDA、SDL的时序,将发送数据寄存器23中的数据,发送到I2C总线上;
数据接收单元28,用于依照I2C总线协议规定的SDA、SDL的时序,接收I2C总线上的数据。
基于以上装置,图4A和图4B所示是本发明实施例的主动设备访问指令产生模块设备的流程图,其中写操作的流程如图4A所示,包括以下步骤:
步骤100,主动设备设置指令产生模块里的设备地址寄存器,将要访问的I2C设备的地址,写入该寄存器;
步骤110,主动设备设置指令产生模块里的寄存器地址寄存器,将要访问的I2C设备寄存器的地址,写入该寄存器;
步骤120,主动设备设置指令产生模块里的写入数据寄存器,将要写入的数据,写入该寄存器;
步骤130,主动设备设置指令产生模块的命令控制寄存器中启动写操作的相应BIT位,本实施例中,写操作时设置BIT0=1;
步骤140,主动设备等待中断报出(INT信号变化),或者判断所述命令控制寄存器的BIT0位是否变为0,若变为0,则操作正确完成,则可以进行下次操作了;若命令控制寄存器的错误指示BIT位有错误指示,则操作未正确执行完成,主动设备要进行错误处理操作,比如,重新执行上一操作或作其它处理;若操作未完成,则等待本操作完成。
如果下一次操作,与上一次操作访问的是同一I2C设备,则直接返回到步骤110;如果不是同一I2C设备,则要返回到步骤100。
从上面可以看出,对于单个I2C设备,主动设备只需要4步操作即可完成对I2C设备的一次写操作,其中步骤100、110和130是设置启动一次访问I2C设备必需的步骤。
读操作的流程如图4B所示,包括以下步骤:
步骤200,主动设备设置指令产生模块里的设备地址寄存器,将要访问的I2C设备的地址,写入该寄存器;
步骤210,主动设备设置指令产生模块里的寄存器地址寄存器,将要访问的I2C设备寄存器的地址,写入该寄存器;
步骤220,主动设备设置指令产生模块里的命令控制寄存器中启动读操作的相应BIT位,本实施例中,读操作时设置BIT1=1;
步骤230,主动设备通过和写操作相同的方式判断操作是否正确完成,如果是,执行下一步,否则继续等待或进行错误处理;
步骤240,主动设备读指令产生模块里读出数据寄存器,取想要的结果,然后可进行下一次操作。
如果下一次操作,与上一次操作访问的是同一I2C设备,则直接返回到步骤210;如果不是同一I2C设备,则要返回到步骤200。
从上面可以看出,对于单个I2C设备,主动设备只需要3步操作即可完成对I2C设备的读操作。不象现有的技术,主动设备需要15步的操作和判断,才可完成对一个I2C设备的读操作。
图7是指令产生模块工作的流程图,包括以下步骤:
步骤300,指令产生模块实时监测本模块的命令控制寄存器的BIT0和BIT1位的值,如果BIT0=1,执行步骤310~360的写操作流程,BIT1=1,执行步骤400以下的读操作流程,否则继续检测;
步骤310,向读写操作执行模块发送START指令(I2C总线的开始标志,对应图8中的start condition);
步骤320,向读写操作执行模块发送DEVICE ADDRESS(I2C设备地址)及写指示;
步骤330,向读写操作执行模块发送WORD ADDRESS指令(I2C设备的寄存器地址);
步骤340,向读写操作执行模块发送数据(DATA);
步骤350,向读写操作执行模块发送STOP指令(I2C总线的结束标志,对应图8中的stop condition);
步骤360,所有指令正确完成后,清命令控制寄存器的BIT0=0,同时产生中断送INT信号,告知主动设备写操作完成,结束一次写操作;
步骤400,向读写操作执行模块发送START指令;
步骤410,向读写操作执行模块发送DEVICE ADDRESS及写指示;
步骤420,向读写操作执行模块发送WORD ADDRESS指令;
步骤430,向读写操作执行模块发送STOP指令;
步骤440,启动10ms延时;
步骤450,向读写操作执行模块发送START指令;
步骤460,向读写操作执行模块发送DEVICE ADDRESS及读指示;
步骤470,向读写操作执行模块发送指令,置SDA为高阻,并准备接收从I2C设备的数据;
步骤480,数据接收完毕后,向读写操作执行模块发送STOP指令;
步骤490,所有指令正确完成后,清命令控制寄存器的BIT1=0,同时产生中断INT信号,告知主动设备读操作完成,结束一次读操作。
上述步骤中,指令产生模块向读写操作执行模块发送完一个指令后,同时启动时间计时,本模块的每一个指令都设计一个故障告警最大时间值,当计时的时间达到这个值还没有检测到本操作正确执行完成,则认为出现故障,终止本次读、写操作,置故障指示位(将命令控制寄存器BIT2置1),步骤500,指示出现错误,告知主动设备写操作不成功;如本次读写操作不能正确完成,将终止本次读、写操作,并用故障指示位告知主动设备本次操作失败,由主动设备决定再如何进行下一步操作。
是否正确执行完成的判断方法是:由于读写操作执行模块每执行完成一个指令,都清该模块命令寄存器的相应BIT位。并把命令寄存器的几个控制BIT位通过error信号(参见图1)送给指令产生模块,具体实施是:error[3:0]=BIT[3:0],BIT[3:0]是命令寄存器的BIT位。因而,指令产生模块通过检测error[x]的值,即可得知本次指令是否正确操作完成。
上述指令产生模块在写操作和读操作时的时序分别如图6和图7所示,检测到主动设备要写一个I2C设备时,指令产生模块将依照图6的顺序依次发送START->发送DEVICE ADDRESS及写指示->发送WORDADDRESS—>发送数据—>发送STOP;检测到主动设备要读一个I2C设备时,依照图7的顺序依次发送START—>发送DEVICE ADDRESS及写指示—>发送WORD ADDRESS—>发送STOP—>发送START—>发送DEVICEADDRESS及读指示—>接收数据—>发送STOP。
图7中,除DATA部分是由I2C从设备(即图1中的I2C设备)送出并由本发明接收外,其他部分都是(除ACK)都是由本发明送出的。图中MSB表示字节的高位BIT,LSB表示字节的低位BIT,W/R为读写指示,指示本周期是读I2C设备还是写I2C设备,0写,1读。有需要判断从设备响应的地方(比如:本发明的读写操作执行模块,发送完DEVICE ADDRESS及读写指示R/W后,就要判断I2C设备送回的ACK信号,(正确的ACK信号应为1个时钟周期的低电平0)若检查到这个ACK信号,读写操作执行模块则认为本次指令正确执行完成)读写操作执行模块通过检测图6,图7中的ACK信号自动完成的,ACK为0表示从设备有回应,ACK为1表示从设备无回应,等同图8中的ACK周期。
下面描述一下读写操作执行模块根据指令产生模块的指令,按I2C总线协议产生访问I2C设备需要的信号时序,执行对I2C设备的读写操作的情况。
图8描述了I2C总线的传输时序。I2C总线包括两根信号线,一条是数据信号SDA,另一是时钟信号SCL,每一个数据比特对应一个完整时钟1周期,时钟信号SCL为1时,数据SDA不能有变化,若有变化则被认为成开始(START,图8中的start condition)或结束(STOP,图8中的stopcondition)标志。当SCL=1,SDA有下降沿是“开始”;当SCL=1,SDA有上升沿是“结束”。占用I2C总线的设备为主设备,被访问的设备是从设备。主设备每传输一个字节(8BIT),从设备在SCL的第9个CLOCK就应有一个低电平的回应(从设备把SDA拉低一个时钟周期)(图8中的ACK),若主设备检测不到这个“回应”,则数据传输不成功。数据传输顺序是以高位(MSB)开始,低位(LSB)结束。
本实施例的读写操作执行模块需要根据指令产生模块的指令产生所需的I2C总线的传输时序。如图1所示,指令产生模块1和读写操作执行模块2之间通过异步总线连接。各信号的含义如表2所示:
表2
reset | 复位信号。 |
clock | 读写操作执行模块正常工作必需的时钟信号。 |
WE | 写使能信号,低电平有效。该信号低时,Data_i总线上的数据有效。 |
Data_i | 数据总线输入,指令产生模块送往读写操作执行模块。 |
Data_o | 数据总线输出,读写操作执行模块送往指令产生模块。 |
Txreg_cs | 发送数据寄存器选择信号。 |
Comd_cs | 命令寄存器选择信号。 |
Error[3;0] | 错误指示信号,用于指示某一操作是否正确执行完成。 |
通过以上信号即可完成两个模块间的访问控制,例如,在指令产生模块发送DEVICE ADDRESS指令时,WE和Txreg_cs信号有效,指令产生模块设备地址寄存器中的设备地址通过Data_i写到读写操作执行模块里的发送数据寄存器,然后,指令产生模块再通过Comd_cs信号设置读写操作执行模块的命令寄存器的BIT1=1,读写操作执行模块检测到命令寄存器的BIT1=1,启动发送数据模块工作,把发送数据寄存器的值送到I2C总线上。完成本操作后,清掉命令寄存器的BIT1,指令产生模块检测到读、写操作执行模块的命令寄存器的BIT1恢复成0,得知上一操作已完成,开始下一操作。其它指令的具体操作与此类似,在此就不一一细述。
综上所述,由于指令产生模块和读写操作执行模块都是由硬件实现,所以,整个I2C设备的访问过程基本没有CPU参与,CPU所做的只是提供给两个模块完成访问I2C设备必须的条件。所以本方法解决了现有技术中访问I2C设备对软件的过分依赖。
Claims (15)
1、一种实现自动读写内部集成电路设备的装置,其特征在于,包括用硬件实现的指令产生模块和读写操作执行模块,所述指令产生模块通过异步访问总线分别与主动设备及所述读写操作执行模块相连,所述读写操作执行模块通过内部集成电路总线与内部集成电路设备相连,其中:
所述指令产生模块,用于接收所述主动设备提供的启动信号、读/写信号以及内部集成电路设备的设备地址、寄存器地址和要写入寄存器的数据,自动产生访问内部集成电路设备所需的指令,依序送到所述读写操作执行模块,并向所述主动设备返回指令执行情况和从内部集成电路设备读出的数据;
所述读写操作执行模块,用于根据所述指令产生模块的指令,遵照内部集成电路总线协议产生访问内部集成电路设备需要的信号时序,执行对内部集成电路设备的读写操作,并向所述指令产生模块返回指令执行情况。
2、如权利要求1所述的装置,其特征在于,所述指令产生模块在检测到主动设备要写一个内部集成电路设备时,依次发送开始指令、设备地址指令及写指示、寄存器地址指令、数据指令和停止指令。
3、如权利要求1所述的装置,其特征在于,所述指令产生模块在检测到主动设备要读一个内部集成电路设备时,依次发送开始指令、设备地址指令及写指示、寄存器地址指令、停止指令、开始指令、设备地址指令及读指示、接收数据指令和停止指令。
4、如权利要求1所述的装置,其特征在于,所述指令产生模块包含:
所述命令控制寄存器,由所述主动设备的启动信号和读/写信号设置相应控制位的值,发动对内部集成电路设备读或写,并在执行失败时设置错误标志;
所述设备地址寄存器,用于存储要访问的内部集成电路设备的设备地址;
所述寄存器地址寄存器,用于存储要访问内部集成电路设备的寄存器的地址;
所述写入数据寄存器,用于存储要写的数据;
所述读出数据寄存器,用于存储要读出的数据;
所述分频设置寄存器,用于设置送出的SDA/SCL信号的频率与输入的CLK频率之间的倍数关系;
所述主动设备通过异步总线的地址信号对上述寄存器进行选择。
5、如权利要求4所述的装置,其特征在于,所述指令产生模块向所述主动设备返回指令执行情况是通过在一次读或写操作完成后设置一个中断信号,或者在命令控制寄存器执行完操作后将相应的比特位自动清零,或者通过以上两个信号的结合来实现的。
6、如权利要求1所述的装置,其特征在于,所述读写操作执行模块包含命令寄存器、接收数据寄存器、发送数据寄存器、时钟产生单元、START产生单元、STOP产生单元、数据发送单元和数据接收单元,其中:
所述命令寄存器,由所述指令产生模块的指令设置相应控制位的值,控制所述START产生单元、STOP产生单元、数据发送单元和数据接收单元的启动,并在操作执行完成后将相应位清零;
所述接收数据寄存器,用于缓存数据接收单元接收到的数据;
所述发送数据寄存器,用于缓存数据发送单元将要发送的数据;
时钟产生单元,用于产生读写操作执行模块中各模块所需的时钟;
所述START产生单元,用于产生内部集成电路总线协议中规定的START时序;
所述STOP产生单元,用于产生内部集成电路总线协议中规定的STOP时序;
所述数据发送单元,用于依照内部集成电路总线协议规定的SDA、SDL的时序,将所述发送数据寄存器中的数据发送到内部集成电路总线上;
所述数据接收单元,用于依照内部集成电路总线协议规定的SDA、SDL的时序,接收内部集成电路总线上的数据。
7、如权利要求6所述的装置,其特征在于,所述指令产生模块和读写操作执行模块之间的异步总线包括复位信号、时钟信号、写使能信号、发送数据寄存器选择信号、命令寄存器选择信号、数据总线输入和输出信号,以及错误指示信号的线路,所述错误指示信号由所述命令寄存器的控制位产生,用于向所述指令产生模块返回指令执行情况。
8、一种实现自动写内部集成电路设备的方法,应用于主动设备通过硬件实现的指令产生模块和写操作执行模块与内部集成电路总线相连的系统中,该方法包括以下步骤:
(a)所述主动设备将要访问的内部集成电路设备的地址,写入所述指令产生模块的设备地址寄存器;
(b)所述主动设备将要访问的内部集成电路设备寄存器的地址写入所述指令产生模块的寄存器地址寄存器;
(c)所述主动设备将要写入的数据写入所述指令产生模块的写入数据寄存器;
(d)所述主动设备设置所述指令产生模块中命令控制寄存器的相应BIT位启动写操作;
(e)所述指令产生模块自动产生写内部集成电路设备所需的指令,依序送到所述写操作执行模块;
(f)所述写操作执行模块根据所述指令产生模块的指令,遵照内部集成电路总线协议产生写内部集成电路设备的信号时序并完成写操作,返回指令执行情况;
(g)所述指令产生模块向所述主动设备返回指令执行情况;
(h)所述主动设备判断操作正确完成后,结束一次写操作。
9、如权利要求8所述的方法,其特征在于,所述步骤(h)后,如果下一次操作与上一次操作访问的是同一内部集成电路设备,则直接返回步骤(b),否则返回步骤(a)。
10、如权利要求8所述的方法,其特征在于,所述步骤(e)中,所述指令产生模块依次发送开始指令、设备地址指令及写指示、寄存器地址指令、数据指令和停止指令。
11、如权利要求8所述的方法,其特征在于,所述步骤(g)中,所述主动设备通过所述指令产生模块的中断报出,或者检测所述指令产生模块相应控制位的值来确认操作是否正确完成;通过检测所述指令产生模块的错误指示位的值来判断是否要进行错误处理操作。
12、一种实现自动读内部集成电路设备的方法,应用于主动设备通过硬件实现的指令产生模块和读操作执行模块与内部集成电路总线相连的系统中,该方法包括以下步骤:
(a)所述主动设备将要访问的内部集成电路设备的地址,写入所述指令产生模块的设备地址寄存器;
(b)所述主动设备将要访问的内部集成电路设备寄存器的地址写入所述指令产生模块的寄存器地址寄存器;
(c)所述主动设备设置所述指令产生模块中命令控制寄存器的相应BIT位启动读操作;
(d)所述指令产生模块自动产生读内部集成电路设备所需的指令,依序送到所述读操作执行模块;
(e)所述读操作执行模块根据所述指令产生模块的指令,遵照内部集成电路总线协议产生读内部集成电路设备的信号时序并完成读操作,并返回指令执行情况;
(f)所述指令产生模块向所述主动设备返回读出的数据以及指令执行情况;
(g)所述主动设备判断操作正确完成后,从所述指令产生模块读出数据,结束一次读操作。
13、如权利要求12所述的方法,其特征在于,所述步骤(g)后,如果下一次操作与上一次操作访问的是同一内部集成电路设备,则直接返回步骤(b),否则返回步骤(a)。
14、如权利要求12所述的方法,其特征在于,所述步骤(d)中,所述指令产生模块依次发送开始指令、设备地址指令及写指示、寄存器地址指令、停止指令、开始指令、设备地址指令及读指示、接收数据指令和停止指令。
15、如权利要求12所述的方法,其特征在于,所述步骤(g)中,所述主动设备通过所述指令产生模块的中断报出,或者检测所述指令产生模块相应控制位的值来确认操作是否正确完成;通过检测所述指令产生模块的错误指示位的值来判断是否要进行错误处理操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200410000775 CN1292360C (zh) | 2004-01-18 | 2004-01-18 | 一种实现自动读写内部集成电路设备的装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200410000775 CN1292360C (zh) | 2004-01-18 | 2004-01-18 | 一种实现自动读写内部集成电路设备的装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1558332A true CN1558332A (zh) | 2004-12-29 |
CN1292360C CN1292360C (zh) | 2006-12-27 |
Family
ID=34350502
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200410000775 Expired - Fee Related CN1292360C (zh) | 2004-01-18 | 2004-01-18 | 一种实现自动读写内部集成电路设备的装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1292360C (zh) |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100444147C (zh) * | 2005-04-29 | 2008-12-17 | 三星电子株式会社 | 主设备及其控制方法和具有主设备的电子设备 |
CN101604277B (zh) * | 2008-06-11 | 2012-03-28 | 比亚迪股份有限公司 | I2c总线验证系统及方法 |
WO2012126425A2 (zh) * | 2012-05-18 | 2012-09-27 | 华为技术有限公司 | 数据存储的系统和方法 |
CN103077139A (zh) * | 2013-02-01 | 2013-05-01 | 威盛电子股份有限公司 | 使用内部集成电路总线的集成电路及其控制方法 |
CN103186447A (zh) * | 2011-12-27 | 2013-07-03 | 安凯(广州)微电子技术有限公司 | 一种总线读写检测装置 |
CN103577623A (zh) * | 2012-07-30 | 2014-02-12 | 智原科技股份有限公司 | 系统级模拟与仿真的装置及方法 |
CN106471483A (zh) * | 2014-03-24 | 2017-03-01 | 伊耐斯克泰克—计算机科学与技术系统工程研究所 | 用于多个混合信号资源管理的控制模块 |
CN106789507A (zh) * | 2016-12-19 | 2017-05-31 | 北京格林伟迪科技股份有限公司 | 一种实现中央处理器与功能芯片通信的方法和装置 |
CN107168897A (zh) * | 2017-04-18 | 2017-09-15 | 深圳市有芯半导体技术有限公司 | 一种实现i2c重复读写控制的装置 |
CN108829626A (zh) * | 2018-04-26 | 2018-11-16 | 常州新途软件有限公司 | 一种用于汽车控制系统的通信方法 |
CN110795373A (zh) * | 2019-09-27 | 2020-02-14 | 深圳震有科技股份有限公司 | 一种i2c总线到并行总线的转换方法、终端及存储介质 |
CN111309665A (zh) * | 2020-02-19 | 2020-06-19 | 苏州华兴源创科技股份有限公司 | 并行写操作、读操作控制系统及方法 |
CN112416823A (zh) * | 2020-11-15 | 2021-02-26 | 珠海市一微半导体有限公司 | 一种突发模式下的传感器数据读写控制方法、系统及芯片 |
CN112540944A (zh) * | 2020-12-15 | 2021-03-23 | 安徽皖通邮电股份有限公司 | 并行总线协议以及基于协议实现板间数据交互的方法 |
CN112559275A (zh) * | 2020-09-08 | 2021-03-26 | 中国银联股份有限公司 | 集成电路、用于维护调试集成电路的方法和接口电路 |
CN114036096A (zh) * | 2021-11-04 | 2022-02-11 | 珠海一微半导体股份有限公司 | 一种基于总线接口的读控制器 |
CN114327627A (zh) * | 2021-12-15 | 2022-04-12 | 中国船舶重工集团公司第七0九研究所 | 一种实模式下基于gpu传统io配置显示分辨率的方法 |
CN114443544A (zh) * | 2022-04-02 | 2022-05-06 | 井芯微电子技术(天津)有限公司 | 基于i2c模块主从模式切换方法及设备 |
CN116450552A (zh) * | 2023-06-09 | 2023-07-18 | 江苏润石科技有限公司 | 基于i2c总线异步批量读写寄存器的方法及系统 |
CN116680230A (zh) * | 2023-05-22 | 2023-09-01 | 无锡麟聚半导体科技有限公司 | 一种硬件加速电路及芯片 |
CN117201222A (zh) * | 2023-08-16 | 2023-12-08 | 天津瑞发科半导体技术有限公司 | I2c接口系统、数据写入方法以及数据读取方法 |
-
2004
- 2004-01-18 CN CN 200410000775 patent/CN1292360C/zh not_active Expired - Fee Related
Cited By (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100444147C (zh) * | 2005-04-29 | 2008-12-17 | 三星电子株式会社 | 主设备及其控制方法和具有主设备的电子设备 |
CN101604277B (zh) * | 2008-06-11 | 2012-03-28 | 比亚迪股份有限公司 | I2c总线验证系统及方法 |
CN103186447B (zh) * | 2011-12-27 | 2015-02-11 | 安凯(广州)微电子技术有限公司 | 一种总线读写检测装置 |
CN103186447A (zh) * | 2011-12-27 | 2013-07-03 | 安凯(广州)微电子技术有限公司 | 一种总线读写检测装置 |
WO2012126425A3 (zh) * | 2012-05-18 | 2013-04-18 | 华为技术有限公司 | 数据存储的系统和方法 |
CN102782661B (zh) * | 2012-05-18 | 2015-06-17 | 华为技术有限公司 | 数据存储的系统和方法 |
CN102782661A (zh) * | 2012-05-18 | 2012-11-14 | 华为技术有限公司 | 数据存储的系统和方法 |
WO2012126425A2 (zh) * | 2012-05-18 | 2012-09-27 | 华为技术有限公司 | 数据存储的系统和方法 |
CN103577623A (zh) * | 2012-07-30 | 2014-02-12 | 智原科技股份有限公司 | 系统级模拟与仿真的装置及方法 |
CN103077139B (zh) * | 2013-02-01 | 2016-05-11 | 威盛电子股份有限公司 | 使用内部集成电路总线的集成电路及其控制方法 |
US9015365B2 (en) | 2013-02-01 | 2015-04-21 | Via Technologies, Inc. | Integrated circuit using I2C bus and control method thereof |
CN103077139A (zh) * | 2013-02-01 | 2013-05-01 | 威盛电子股份有限公司 | 使用内部集成电路总线的集成电路及其控制方法 |
CN106471483A (zh) * | 2014-03-24 | 2017-03-01 | 伊耐斯克泰克—计算机科学与技术系统工程研究所 | 用于多个混合信号资源管理的控制模块 |
CN106471483B (zh) * | 2014-03-24 | 2019-12-13 | 伊耐斯克泰克—计算机科学与技术系统工程研究所 | 设置、捕获、处理及扫描模块及其操作方法、包括模块的装置及混合信号总线 |
CN106789507A (zh) * | 2016-12-19 | 2017-05-31 | 北京格林伟迪科技股份有限公司 | 一种实现中央处理器与功能芯片通信的方法和装置 |
CN107168897A (zh) * | 2017-04-18 | 2017-09-15 | 深圳市有芯半导体技术有限公司 | 一种实现i2c重复读写控制的装置 |
CN107168897B (zh) * | 2017-04-18 | 2019-12-13 | 深圳市有芯半导体技术有限公司 | 一种实现i2c重复读写控制的装置 |
CN108829626A (zh) * | 2018-04-26 | 2018-11-16 | 常州新途软件有限公司 | 一种用于汽车控制系统的通信方法 |
CN110795373A (zh) * | 2019-09-27 | 2020-02-14 | 深圳震有科技股份有限公司 | 一种i2c总线到并行总线的转换方法、终端及存储介质 |
CN110795373B (zh) * | 2019-09-27 | 2023-09-19 | 深圳震有科技股份有限公司 | 一种i2c总线到并行总线的转换方法、终端及存储介质 |
CN111309665A (zh) * | 2020-02-19 | 2020-06-19 | 苏州华兴源创科技股份有限公司 | 并行写操作、读操作控制系统及方法 |
CN111309665B (zh) * | 2020-02-19 | 2024-01-02 | 苏州华兴源创科技股份有限公司 | 并行写操作、读操作控制系统及方法 |
CN112559275A (zh) * | 2020-09-08 | 2021-03-26 | 中国银联股份有限公司 | 集成电路、用于维护调试集成电路的方法和接口电路 |
CN112416823B (zh) * | 2020-11-15 | 2024-05-03 | 珠海一微半导体股份有限公司 | 一种突发模式下的传感器数据读写控制方法、系统及芯片 |
CN112416823A (zh) * | 2020-11-15 | 2021-02-26 | 珠海市一微半导体有限公司 | 一种突发模式下的传感器数据读写控制方法、系统及芯片 |
CN112540944B (zh) * | 2020-12-15 | 2022-11-25 | 安徽皖通邮电股份有限公司 | 并行总线协议以及基于协议实现板间数据交互的方法 |
CN112540944A (zh) * | 2020-12-15 | 2021-03-23 | 安徽皖通邮电股份有限公司 | 并行总线协议以及基于协议实现板间数据交互的方法 |
CN114036096A (zh) * | 2021-11-04 | 2022-02-11 | 珠海一微半导体股份有限公司 | 一种基于总线接口的读控制器 |
CN114036096B (zh) * | 2021-11-04 | 2024-05-03 | 珠海一微半导体股份有限公司 | 一种基于总线接口的读控制器 |
CN114327627A (zh) * | 2021-12-15 | 2022-04-12 | 中国船舶重工集团公司第七0九研究所 | 一种实模式下基于gpu传统io配置显示分辨率的方法 |
CN114443544A (zh) * | 2022-04-02 | 2022-05-06 | 井芯微电子技术(天津)有限公司 | 基于i2c模块主从模式切换方法及设备 |
CN116680230B (zh) * | 2023-05-22 | 2024-04-09 | 无锡麟聚半导体科技有限公司 | 一种硬件加速电路及芯片 |
CN116680230A (zh) * | 2023-05-22 | 2023-09-01 | 无锡麟聚半导体科技有限公司 | 一种硬件加速电路及芯片 |
CN116450552A (zh) * | 2023-06-09 | 2023-07-18 | 江苏润石科技有限公司 | 基于i2c总线异步批量读写寄存器的方法及系统 |
CN116450552B (zh) * | 2023-06-09 | 2023-08-29 | 江苏润石科技有限公司 | 基于i2c总线异步批量读写寄存器的方法及系统 |
CN117201222A (zh) * | 2023-08-16 | 2023-12-08 | 天津瑞发科半导体技术有限公司 | I2c接口系统、数据写入方法以及数据读取方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1292360C (zh) | 2006-12-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1292360C (zh) | 一种实现自动读写内部集成电路设备的装置和方法 | |
CN1053281C (zh) | 系统总线外围总线间最佳数据传送用多总线系统总线桥 | |
CN1241118C (zh) | 实现自动开关机测试的系统及方法 | |
CN1617160A (zh) | 用于识别标准卡以及非标准卡的卡识别系统 | |
CN100346285C (zh) | 处理器芯片与存储控制系统及方法 | |
CN1804799A (zh) | 单片机在线加载升级方法及系统 | |
CN1811744A (zh) | 通过串行总线互连多个处理节点的装置 | |
CN1554069A (zh) | 存储卡及其初始化设置方法 | |
CN1947107A (zh) | 用于在存储器间传输数据的装置 | |
CN1570907A (zh) | 多处理器系统 | |
CN1551592A (zh) | 数据传输控制装置、电子设备及数据传输控制方法 | |
CN1534496A (zh) | 控制个人计算机卡连接的方法和装置及其被动卡适配卡 | |
CN1233059A (zh) | 存储器测试装置及存储器测试方法 | |
CN1700357A (zh) | 用于内置错误诊断的半导体存储器件 | |
CN1287259C (zh) | 在通信设备中操作多个i2c从器件的装置及其方法 | |
CN100352168C (zh) | 数据传输控制装置及电子机器 | |
CN1172986A (zh) | 实时控制系统 | |
CN2681233Y (zh) | 调试功能内置型微型计算机 | |
CN1949184A (zh) | 一种芯片验证的方法及系统 | |
CN1300395A (zh) | 处理器 | |
CN101075205A (zh) | 集成电路装置、调试工具及系统、微型计算机和电子设备 | |
CN1893362A (zh) | 数据传输控制装置及电子设备 | |
CN2682491Y (zh) | 调试功能内置型微型计算机 | |
CN1893361A (zh) | 数据传输控制装置及电子设备 | |
CN101047029A (zh) | 半导体存储器件和数据发送/接收系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20061227 Termination date: 20140118 |