基于i2c接口快速读取多个mems传感器数据的模块和方法

文档序号:9910965阅读:1540来源:国知局
基于i2c接口快速读取多个mems传感器数据的模块和方法
【技术领域】
[0001 ]本发明涉及数据通信技术领域,尤其涉及一种基于I2C接口快速读取多个MEMS传感器数据的模块和方法,应用于北斗导航系统中的大规模串口数据通信。
【背景技术】
[0002]I2C总线是一个多主机的总线,使用串行数据线(SDA)和串行时钟线(SCL)在总线上传递信息。每个器件都有一个唯一的识别地址,而且都可以作为一个发送器或接收器。当连接在I2C总线上的多个主机器件,同时传输数据时,通过仲裁来避免混乱。SDA和SCL都是双向线路,通过一个电流源或上拉电阻连接到电源电压。器件输出级必须是漏极开路或集电极开路,当总线空闲时,两条线路处于高电平,执行线与的功能。I2C总线支持的速率有两种:最大I OOkb i t/s的标准模式,最大400kbi t/s的快速模式。连接到总线的器件数量只由总线电容是400pF的限制决定。
[0003 ] 12C的标准时序中要遵循3个控制协议:
[0004]START:当SCL线保持高电平时SDA线从高电平拉至低电平,代表数据的传输开始。
[0005]STOP:当SCL线保持高电平时SDA线从低电平拉至高电平,代表数据的传输结束。
[0006]ACK:每当接收方收到一个BYTE有效数据时,必须拉低SDA线同时发送方释放对SDA线的控制,代表接收方收到数据的回应。
[0007]—个传统的I2C主机接口读取数据的工作流程参见图1。
[0008]步骤100写入START产生控制,在总线上产生START信号。
[0009]步骤200写入传输数据(一般是器件地址),通过总线将数据和时钟控制发送给从机。
[0010]步骤210等待从机的ACK。如果收到ACK进入步骤300,否则结束流程。
[0011]步骤300继续写入传输数据(一般是寄存器地址),通过总线将数据和时钟控制发送给从机。
[0012]步骤310等待器件的ACK。如果收到ACK进入步骤400,否则结束流程。
[0013]步骤400再次写入START信号和从机器件地址,控制从机进入读状态。
[0014]步骤410等待器件的ACK。如果收到ACK进入步骤500,否则结束流程。
[0015]步骤500写入dummy数据在总线上产生时钟并同时通过总线读取从机发送的数据。
[0016]步骤510如果读取数据完成,发送NACK信号,进入步骤600。如果还有数据要连续读取,发送ACK信号,返回步骤500。
[0017]步骤600写入STOP产生控制,在总线上产生STOP信号。
[0018]步骤700结束传输流程。
[0019]上述方法的优点在于所有控制信号和数据传输的步骤都是分开进行的,这样当主/从机忙时就可以通过控制和回应信号的实时变化进行判断,选择下一步操作,但这也就意味着每次传输的开始,回应,结束都需要主控CPU的参与,这在导航系统这种大规模数据处理的应用中会频繁的打断CPU操作,非常浪费系统资源。
[0020]因此,本领域的技术人员致力于开发一种基于I2C接口快速读取多个MEMS传感器数据的模块和方法,针对这一问题对I2C主机模块进行了改进,添加了 DMA(直接内存存取)功能,可以跳过CPU进行大批量的后台数据存取。

【发明内容】

[0021]有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是每次传输的开始,回应,结束都需要主控CHJ的参与,这在导航系统这种大规模数据处理的应用中会频繁的打断CPU操作,非常浪费系统资源。
[0022 ]本发明为基于12C接口快速读取多个MEMS传感器数据的实现方法。可以在不打断(PU操作的前提下自主读取已知的多个从机的数据并放入存储单元供CPU读取使用。
[0023]本发明为一种添加了DMA功能的I2C主机模块,结构参见图2,其包括:
[0024]DMA(直接内存存取)控制单元,通过CPU设置好所有的控制信号,在I2C给予请求信号时从内部存储单元依次将数据读取出来送给I2C主机,同时将I2C主机接收到的数据依次存入内部存储单元;
[0025]发送数据FIFO单元,需要发送的数据可以在这里暂存,等待I2C主机读取;
[0026]接收数据FIFO单元,接收到的数据可以在这里暂存,等待DMA读取;
[0027]I2C总线时序控制单元,根据DMA传送来的数据产生所有的控制及数据信号,并将接收到的数据存下。
[0028]本发明又提供了快速读取多个传感器数据的实现方法,其步骤如下:
[0029]S0)提供DMA控制单元、发送数据FIFO单元、接收数据FIFO单元、I2C总线时序控制单元和内部存储单元;
[0030]SI)根据所有需要访问的传感器器件地址,数据个数,准备好相应的数据放入内部存储;
[0031]S2)用CPU配置DMA控制模块,将发送通道数据的起始地址指向之前准备好的数据,目的地址指向发送数据FIFO。将接收通道数据的起始地址指向接收数据FIFO,目的地址指向任意一块空闲的内部存储。并设定好总共传输数据的个数;
[0032]S3)当发送数据FIFO有空闲时,就会向DMA请求数据,DMA从存储器取出数据写入FIFO。同时FIFO中一旦有数据,I2C总线时序控制模块就会取走数据进行传输;
[0033]S4)当I2C总线上有数据接收回来时,I2C总线时序控制模块就会将数据存入接收FIF0,同时接收FIFO—旦有数据就会向DMA请求取走数据,DMA从接收FIFO取走数据写入存储器;
[0034]S5)在所有的预设DMA传输完成后,DMA控制模块产生中断信号通知CPU,此时CPU可以从存放接收数据的存储地址取走数据并做相应的处理。
[0035]所述的一种快速读取传感器数据方法,只在开始和结束操作时需要CPU的介入,添加的FIFO模块可以更好的处理DMA和I2C之间数据传输速率的差别,减少DMA传输占用总线的频率。
[0036]所述的一种快速读取传感器数据方法,将所有的控制,回应和传输数据放在一起处理,DMA每次传输的单位数据中将包括START,STOP以及IBYTE的实际数据信息(可能是器件地址,寄存器地址,du_y数据)。
[0037]以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
【附图说明】
[0038]图1是标准的I2C主机接口读取数据流程;
[0039]图2是本发明一个较佳实施例的I2C主机模块功能图;
[0040]图3是本发明一个较佳实施例中读取多个MEMS传感器数据的流程图;
[0041]图4是本发明一个较佳实施例的传输数据格式;
[0042]图5是本发明一个较佳实施例的I2C总线上的传输信号示意图。
【具体实施方式】
[0043]下面通过使用本发明的北斗导航系统同时连接BOSCH(博世)的三种MEMS传感器实现
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1