CN105677598B - 基于i2c接口快速读取多个mems传感器数据的模块和方法 - Google Patents
基于i2c接口快速读取多个mems传感器数据的模块和方法 Download PDFInfo
- Publication number
- CN105677598B CN105677598B CN201610003029.4A CN201610003029A CN105677598B CN 105677598 B CN105677598 B CN 105677598B CN 201610003029 A CN201610003029 A CN 201610003029A CN 105677598 B CN105677598 B CN 105677598B
- Authority
- CN
- China
- Prior art keywords
- data
- control units
- cell fifo
- address
- dma
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/32—Handling requests for interconnection or transfer for access to input/output bus using combination of interrupt and burst mode transfer
- G06F13/34—Handling requests for interconnection or transfer for access to input/output bus using combination of interrupt and burst mode transfer with priority control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0016—Inter-integrated circuit (I2C)
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种基于I2C接口快速读取多个MEMS传感器数据的模块,属于传感器数据通讯领域,包括DMA控制单元、发送数据FIFO单元、接收数据FIFO单元和I2C总线时序控制单元,所述DMA控制单元被配置为在所述I2C总线时序控制单元给予请求信号时从内部存储单元依次将数据读取出来送给I2C主机,同时将I2C主机接收到的数据依次存入内部存储单元;所述发送数据FIFO单元,被配置为暂存需要发送的数据,等待I2C主机读取;所述接收数据FIFO单元,被配置为暂存接收到的数据,等待所述DMA控制单元读取;所述I2C总线时序控制模块被配置为根据所述DMA控制单元传送来的数据产生控制及数据信号,并存储接收到的数据。
Description
技术领域
本发明涉及数据通信技术领域,尤其涉及一种基于I2C接口快速读取多个MEMS传感器数据的模块和方法,应用于北斗导航***中的大规模串口数据通信。
背景技术
I2C总线是一个多主机的总线,使用串行数据线(SDA)和串行时钟线(SCL)在总线上传递信息。每个器件都有一个唯一的识别地址,而且都可以作为一个发送器或接收器。当连接在I2C总线上的多个主机器件,同时传输数据时,通过仲裁来避免混乱。SDA和SCL都是双向线路,通过一个电流源或上拉电阻连接到电源电压。器件输出级必须是漏极开路或集电极开路,当总线空闲时,两条线路处于高电平,执行线与的功能。I2C总线支持的速率有两种:最大100kbit/s的标准模式,最大400kbit/s的快速模式。连接到总线的器件数量只由总线电容是400pF的限制决定。
I2C的标准时序中要遵循3个控制协议:
START:当SCL线保持高电平时SDA线从高电平拉至低电平,代表数据的传输开始。
STOP:当SCL线保持高电平时SDA线从低电平拉至高电平,代表数据的传输结束。
ACK:每当接收方收到一个BYTE有效数据时,必须拉低SDA线同时发送方释放对SDA线的控制,代表接收方收到数据的回应。
一个传统的I2C主机接口读取数据的工作流程参见图1。
步骤100写入START产生控制,在总线上产生START信号。
步骤200写入传输数据(一般是器件地址),通过总线将数据和时钟控制发送给从机。
步骤210等待从机的ACK。如果收到ACK进入步骤300,否则结束流程。
步骤300继续写入传输数据(一般是寄存器地址),通过总线将数据和时钟控制发送给从机。
步骤310等待器件的ACK。如果收到ACK进入步骤400,否则结束流程。
步骤400再次写入START信号和从机器件地址,控制从机进入读状态。
步骤410等待器件的ACK。如果收到ACK进入步骤500,否则结束流程。
步骤500写入dummy数据在总线上产生时钟并同时通过总线读取从机发送的数据。
步骤510如果读取数据完成,发送NACK信号,进入步骤600。如果还有数据要连续读取,发送ACK信号,返回步骤500。
步骤600写入STOP产生控制,在总线上产生STOP信号。
步骤700结束传输流程。
上述方法的优点在于所有控制信号和数据传输的步骤都是分开进行的,这样当主/从机忙时就可以通过控制和回应信号的实时变化进行判断,选择下一步操作,但这也就意味着每次传输的开始,回应,结束都需要主控CPU的参与,这在导航***这种大规模数据处理的应用中会频繁的打断CPU操作,非常浪费***资源。
因此,本领域的技术人员致力于开发一种基于I2C接口快速读取多个MEMS传感器数据的模块和方法,针对这一问题对I2C主机模块进行了改进,添加了DMA(直接内存存取)功能,可以跳过CPU进行大批量的后台数据存取。
发明内容
有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是每次传输的开始,回应,结束都需要主控CPU的参与,这在导航***这种大规模数据处理的应用中会频繁的打断CPU操作,非常浪费***资源。
本发明为基于I2C接口快速读取多个MEMS传感器数据的实现方法。可以在不打断CPU操作的前提下自主读取已知的多个从机的数据并放入存储单元供CPU读取使用。
本发明为一种添加了DMA功能的I2C主机模块,结构参见图2,其包括:
DMA(直接内存存取)控制单元,通过CPU设置好所有的控制信号,在I2C给予请求信号时从内部存储单元依次将数据读取出来送给I2C主机,同时将I2C主机接收到的数据依次存入内部存储单元;
发送数据FIFO单元,需要发送的数据可以在这里暂存,等待I2C主机读取;
接收数据FIFO单元,接收到的数据可以在这里暂存,等待DMA读取;
I2C总线时序控制单元,根据DMA传送来的数据产生所有的控制及数据信号,并将接收到的数据存下。
本发明又提供了快速读取多个传感器数据的实现方法,其步骤如下:
S0)提供DMA控制单元、发送数据FIFO单元、接收数据FIFO单元、I2C总线时序控制单元和内部存储单元;
S1)根据所有需要访问的传感器器件地址,数据个数,准备好相应的数据放入内部存储;
S2)用CPU配置DMA控制模块,将发送通道数据的起始地址指向之前准备好的数据,目的地址指向发送数据FIFO。将接收通道数据的起始地址指向接收数据FIFO,目的地址指向任意一块空闲的内部存储。并设定好总共传输数据的个数;
S3)当发送数据FIFO有空闲时,就会向DMA请求数据,DMA从存储器取出数据写入FIFO。同时FIFO中一旦有数据,I2C总线时序控制模块就会取走数据进行传输;
S4)当I2C总线上有数据接收回来时,I2C总线时序控制模块就会将数据存入接收FIFO,同时接收FIFO一旦有数据就会向DMA请求取走数据,DMA从接收FIFO取走数据写入存储器;
S5)在所有的预设DMA传输完成后,DMA控制模块产生中断信号通知CPU,此时CPU可以从存放接收数据的存储地址取走数据并做相应的处理。
所述的一种快速读取传感器数据方法,只在开始和结束操作时需要CPU的介入,添加的FIFO模块可以更好的处理DMA和I2C之间数据传输速率的差别,减少DMA传输占用总线的频率。
所述的一种快速读取传感器数据方法,将所有的控制,回应和传输数据放在一起处理,DMA每次传输的单位数据中将包括START,STOP以及1BYTE的实际数据信息(可能是器件地址,寄存器地址,dummy数据)。
以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
附图说明
图1是标准的I2C主机接口读取数据流程;
图2是本发明一个较佳实施例的I2C主机模块功能图;
图3是本发明一个较佳实施例中读取多个MEMS传感器数据的流程图;
图4是本发明一个较佳实施例的传输数据格式;
图5是本发明一个较佳实施例的I2C总线上的传输信号示意图。
具体实施方式
下面通过使用本发明的北斗导航***同时连接BOSCH(博世)的三种MEMS传感器实现为例进行说明。使用的三种MEMS传感器分别为:BMA280三轴加速度传感器,BMG160三轴陀螺仪以及BMM150三轴磁力计,实现步骤参见图3。
步骤100根据三个MEMS传感器的器件地址以及要读取数据个数准备好传输数据,数据格式见图4,其中BMA280的器件地址为0x18,读取寄存器地址为0x02,读取个数为6。BMG160的器件地址为0x68,读取寄存地址为0x02,读取个数为6。BMM150器件地址为0x10,读取寄存器地址为0x42,读取个数为6;
步骤200由于准备好的数据为10bit,将数据按照16bit寻址的方式放入内部存储单元地址0x10040000;
步骤300用CPU配置DMA控制模块,将发送通道数据的起始地址指向0x10040000,目的地址指向发送数据FIFO。将接收通道数据的起始地址指向接收数据FIFO,目的地址指向0x10048000。设定好发送通道传输数据的个数为27,接收通道传输数据个数为18;
步骤400发送FIFO请求数据,DMA从0x10040000依次取出10bit数据存入发送FIFO直至发送FIFO满;
步骤500(1)I2C时序产生模块从发送FIFO取出第一个包含START信息和BMA280器件地址的数据,在总线上产生START信号并发送器件地址选中BMA280进入写模式。然后取出第二个包含寄存器地址的信息,选中需要读取的寄存器。接着取出第三个包含START信号的数据选中BMA280进入读模式,最后连续发送六个dummy数据及ACK信号,读回六个数据依次放入接收FIFO。在最后一个dummy数据发送的同时需要发NACK信号以及STOP信号,整个过程中总线上传输的信号可参考图5。
步骤510在步骤500进行的同时,发送FIFO的数据一旦被发送走,就会继续步骤400的工作。
步骤520在步骤500进行的同时,接收FIFO的数据一旦有效,就会请求DMA取走数据,DMA将8bit接收数据取出后依次存入地址0x10048000。存放按照8bit寻址。
步骤500(2)当对BMA280的操作结束后,从发送FIFO中取出的数据将继续控制I2C时序产生模块对BMG160进行数据读取,过程与步骤500(1)类似,不在赘述;
步骤500(3)当对BMG160的操作结束后,从发送FIFO中取出的数据将继续控制I2C时序产生模块对BMM150进行数据读取,过程与步骤500(1)类似,不在赘述;
步骤600DMA将接收到所有18byte数据并存入地址0x10048000后,DMA控制模块产生中断通知CPU处理数据;
步骤700CPU将需要的数据取走后,可以在任意需要的时刻重新开启DMA传输,直接进入步骤400开始获取新的数据,所有的DMA设置可以保持不变。
综上所述,运用本发明的实现方法可以在尽量不使用CPU控制的情况下快速的读取多个已知MEMS传感器的数据,加快数据的处理,优化***资源的配置。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (3)
1.一种基于I2C接口快速读取多个MEMS传感器数据的方法,其特征在于,包括以下步骤:
S0)提供DMA控制单元、发送数据FIFO单元、接收数据FIFO单元、I2C总线时序控制单元和内部存储单元;
S1)根据所有需要访问的传感器器件地址和数据个数,将相应的数据放入所述内部存储单元;
S2)用CPU配置所述DMA控制单元,将发送通道数据的起始地址指向步骤S1中放在内部存储单元内的数据,目的地址指向发送数据FIFO单元;将接收通道数据的起始地址指向接收数据FIFO单元,目的地址指向任意一块空闲的内部存储区域;并设定好总共传输数据的个数;
S3)当发送数据FIFO单元有空闲时,就会向DMA控制单元请求数据,DMA控制单元从内部存储单元取出数据写入发送数据FIFO单元;同时发送数据FIFO单元中一旦有数据,I2C总线时序控制单元就会取走数据进行传输;
S4)当I2C总线时序控制单元上有数据接收回来时,I2C总线时序控制单元就会将数据存入接收数据FIFO单元,同时接收数据FIFO单元一旦有数据就会向DMA控制单元请求取走数据,DMA控制单元从接收数据FIFO单元取走数据写入内部存储单元;
S5)在所有的预设DMA传输完成后,DMA控制单元产生中断信号通知CPU,此时CPU可以从存放接收数据的内部存储单元的存储地址取走数据并做相应的处理。
2.如权利要求1所述的基于I2C接口快速读取多个MEMS传感器数据的方法,其特征在于,DMA控制单元每次传输的单位数据中将包括START,STOP以及1BYTE的实际数据信息。
3.如权利要求2所述的基于I2C接口快速读取多个MEMS传感器数据的方法,其特征在于,所述的实际数据信息包括器件地址、寄存器地址和dummy数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610003029.4A CN105677598B (zh) | 2016-01-04 | 2016-01-04 | 基于i2c接口快速读取多个mems传感器数据的模块和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610003029.4A CN105677598B (zh) | 2016-01-04 | 2016-01-04 | 基于i2c接口快速读取多个mems传感器数据的模块和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105677598A CN105677598A (zh) | 2016-06-15 |
CN105677598B true CN105677598B (zh) | 2018-03-23 |
Family
ID=56298823
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610003029.4A Active CN105677598B (zh) | 2016-01-04 | 2016-01-04 | 基于i2c接口快速读取多个mems传感器数据的模块和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105677598B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106055511B (zh) * | 2016-06-16 | 2019-10-29 | Tcl移动通信科技(宁波)有限公司 | 一种移动终端的cpu与传感器的数据通信方法、*** |
CN110442543B (zh) * | 2019-08-09 | 2023-09-08 | 瓴盛科技有限公司 | 通信装置及通信方法 |
CN111078606B (zh) * | 2019-11-18 | 2021-05-11 | 上海灵动微电子股份有限公司 | 一种模拟i2c从机及其实现方法、终端设备和存储介质 |
CN111382092A (zh) * | 2020-03-05 | 2020-07-07 | 上海龙旗科技股份有限公司 | 传感器网络、方法及存储介质 |
CN114490469A (zh) * | 2020-10-28 | 2022-05-13 | 南京中兴软件有限责任公司 | 数据接收方法、数据接收设备及存储介质 |
CN114676088B (zh) * | 2022-02-18 | 2024-06-04 | 珠海全志科技股份有限公司 | 一种通讯方法、装置及存储介质 |
CN117033293B (zh) * | 2023-10-09 | 2023-12-08 | 井芯微电子技术(天津)有限公司 | 一种主模式i2c/smbus控制器及其控制方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7117283B2 (en) * | 2002-07-24 | 2006-10-03 | Lsi Logic Corporation | Multi-master extended I2C protocol |
CN101025725A (zh) * | 2007-04-12 | 2007-08-29 | 威盛电子股份有限公司 | 串行***接口数据传输方法及串行***接口数据传输*** |
US7676621B2 (en) * | 2003-09-12 | 2010-03-09 | Hewlett-Packard Development Company, L.P. | Communications bus transceiver |
CN102541780A (zh) * | 2011-12-15 | 2012-07-04 | 苏州国芯科技有限公司 | 一种多数据流通道dma*** |
US9135207B2 (en) * | 2010-03-18 | 2015-09-15 | Fujitsu Limited | I2C communication device and I2C communication method |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR3009633B1 (fr) * | 2013-08-08 | 2017-02-24 | Stmicroelectronics Rousset | Communication sur bus i2c |
-
2016
- 2016-01-04 CN CN201610003029.4A patent/CN105677598B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7117283B2 (en) * | 2002-07-24 | 2006-10-03 | Lsi Logic Corporation | Multi-master extended I2C protocol |
US7676621B2 (en) * | 2003-09-12 | 2010-03-09 | Hewlett-Packard Development Company, L.P. | Communications bus transceiver |
CN101025725A (zh) * | 2007-04-12 | 2007-08-29 | 威盛电子股份有限公司 | 串行***接口数据传输方法及串行***接口数据传输*** |
US9135207B2 (en) * | 2010-03-18 | 2015-09-15 | Fujitsu Limited | I2C communication device and I2C communication method |
CN102541780A (zh) * | 2011-12-15 | 2012-07-04 | 苏州国芯科技有限公司 | 一种多数据流通道dma*** |
Also Published As
Publication number | Publication date |
---|---|
CN105677598A (zh) | 2016-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105677598B (zh) | 基于i2c接口快速读取多个mems传感器数据的模块和方法 | |
CA2297084C (en) | A universal serial bus device controller | |
CN102023953B (zh) | 具有多路i2c总线的***的控制方法 | |
CN103454996A (zh) | 主从机***及其控制方法 | |
US20030200359A1 (en) | Serial data interface | |
CN108111382A (zh) | 基于i3c总线的通信装置及其通信方法 | |
CN101089838A (zh) | 一种实现i2c读写时序的方法 | |
CN106878613A (zh) | 数据通信装置、方法及无人机 | |
CN106034199A (zh) | 一种模拟数据源的图像采集装置和方法 | |
CN202533933U (zh) | 可编程逻辑门阵列的i2c接口配置电路及可编程逻辑门阵列 | |
CN104615558B (zh) | 一种数据传送方法及电子装置 | |
CN106851183A (zh) | 基于fpga的多路视频处理***及其方法 | |
CN201608779U (zh) | 一种便携式可见光ccd成像*** | |
CN103077142A (zh) | 一种简易的总线传输协议的通信方法 | |
CN111026691B (zh) | 基于apb总线的owi通讯设备 | |
CN103107862A (zh) | 逻辑器件及其mdio数据发送方法 | |
CN116541329A (zh) | 一种数据传输方法、装置、设备及介质 | |
CN105676726A (zh) | 基于spi接口的多mems传感器快速数据存取***及方法 | |
CN111130678B (zh) | 数据传输方法、装置、设备及计算机可读存储介质 | |
CN115934614A (zh) | 基于apb总线带有fifo缓存功能的uart通讯接口 | |
US9170967B2 (en) | System and method for transmitting information from a transmitter to a receiver via a single line | |
US20120084474A1 (en) | Interface for communication between sensing devices and i2c bus | |
CN103744814B (zh) | 一种通过两线实现高速通信方法 | |
CN210324158U (zh) | 墨水屏阅读设备 | |
CN111832047B (zh) | 一种spi数据传输方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230706 Address after: 310053 room 1001, innovation building, 3850 Jiangnan Road, high tech (Binjiang), Hangzhou, Zhejiang Patentee after: Hangzhou Zhongke Microelectronics Co.,Ltd. Address before: 314006 Building 2, No. 778, Asia Pacific Road, Jiaxing, Zhejiang Province (Jiaxing Technopole) Patentee before: JIAXING MICROELECTRONICS AND SYSTEM ENGINEERING CENTER, CHINESE ACADEMY OF SCIENCES |