0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心
发布
  • 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

关于从I²C接口上的ADC读取数据及处理方法

星星科技指导员 来源:ADI 作者:ADI 2023-01-29 15:53 次阅读

本应用笔记讨论了通过I²C兼容接口读取多字节数据时需要注意的问题。讨论了一次读取一个字节的陷阱,并提供了一些具体示例。本文还介绍了处理此类数据传输的正确方法。

介绍

I²C兼容的双线接口是一种强大的机制,用于将微控制器或微处理器连接到低速外设,例如带有集成模数转换器ADC)的外设。通过该总线进行通信的最基本形式(即一次从从站寄存器写入/读取单个字节)非常简单。但是,为了简单起见,将自己限制在这种方法上有一些陷阱。

通过 1 字节通道传输 2 字节数据

与外设(尤其是传感器)的任何其他数字接口一样,我们需要从设备的内部寄存器中读取正确的数据。当寄存器中的数据在读取过程中发生变化时,这一点尤其重要。如果ADC在数据传输时运行转换或更新寄存器,则数据可能会发生变化。许多设备都有一个内部缓冲区(通常无法从外部访问),其中包含最新的转换结果。当没有I²C活动时,该器件使用新数据更新所谓的“客户可访问”寄存器。

I²C协议一次传输1字节的数据。因此,如果感兴趣的数据总量超过 8 位并且传输处理不当,则可能会出现问题。例如,MAX44000的环境光传感器(ALS)数据寄存器可以有多达14位数据(加上1位表示溢出,这意味着应增加计数/勒克斯设置)。

表 1.MAX44000 ALS数据寄存器

注册 B7 B6 B5 B4 B3 B2 B1 B0 注册地址
ADC 高字节 (ALS) 奥福 数据[13:8] 0x04
模数转换器低字节 (ALS) 数据[7:0] 0x05

我们无法通过I²C直接读取所有ALSDATA[13:0],因此我们必须首先读取寄存器0x04的内容,然后读取寄存器0x05的内容,并在至少16位寄存器中连接数据。但是,我们必须注意如何读取这些数据。可以简单地执行两个由STOP(P)条件终止的单次读取,如图1所示。

pYYBAGPWJpqAV-Y8AAAeK9MruX8058.png


图1.单字节读取。

这种方法有一个致命的缺陷。具体而言,发送 STOP 条件会向设备发出信号,以返回更新“客户可见”寄存器。因此,在从寄存器0x04获取数据后,实际上可以在读取寄存器0x05之前更新14位数据。在某些情况下,此缺陷可能会造成灾难性后果。

例如,如果光照水平处于一定水平,MAX44000环境光传感器处于10位、12位或14位模式。假设电平徘徊在一个区域中,因此寄存器0x04和0x05中的14位将处于255或256个总数,这可能是由于缓慢增加的光或一些少量的噪声。考虑表 2 中的三种情况。

表 2.故障图示

poYBAGPWJpSABZ7VAAAp33B8-94257.png

在最后两种情况下,我们不是读取 255 或 256,而是读取 0 或 511。这是一个巨大的问题。发生这种情况是因为寄存器中的数据在发送 STOP 条件后,在第一次和第二次读取之间0x04和0x05更新。在第一种有问题的情况下,第一个字节被正确读取。但是当读取第二个字节时,数据总共读取了 256 个计数,其中最低字节为零。因此,我们从设备中获得了零读数。在第二个问题情况下,数据也是总共256个计数。这似乎变成了 511 个计数,因为在发送 STOP 条件后但在读取第二个字节之前,数据减少了一个计数。有关在多次读取中发生这种情况的次数的示例,请参见图 2

poYBAGPWJoiAe5UOAAAat8iuC-Y957.png


图2.单字节读取多个样本的实际读数。

通过一次读取 2 个字节可以轻松避免此问题,如图 3 所示。这是通过在读取第一个数据字节后发送 REPEAT START 而不是 STOP 条件来完成的,并且实现起来相当简单。通过读取2个字节,我们可以防止器件执行更多的I²C寄存器更新,即使我们在两个器件之间发送相同数量的位。

pYYBAGPWJoCAcoZhAAAZE2lBo9g278.png


图3.2 字节读取的图示。

上述示例适用于MAX44000和MAX44009,它们在进行多次读取时不会自动递增寄存器指针。您的设备可能行为不同,但原理始终相同。这很容易扩展到读取 N 个字节。

审核编辑:郭婷

  • 传感器
    +关注

    关注

    2433

    文章

    39540

    浏览量

    711084
  • 寄存器
    +关注

    关注

    30

    文章

    3754

    浏览量

    115605
  • adc
    adc
    +关注

    关注

    90

    文章

    4651

    浏览量

    536036
收藏 人收藏

    评论

    相关推荐

    请问cyu***3014怎么通过I2C读取ADC

    i2c配置、读取adc(mcp3424),不知道有谁做过?不一定要是这个adc芯片,只要是adc就行,现在我的一些代码逻辑可能有问题,一直不能读取数据。主要用到的读写
    发表于 01-28 17:18

    9位1.2 GSPS DDR并行LVDS输出ADC连续读取数据的最佳方法是什么

    ADC读取数据的最有效方法是什么。我是FPGA编程的初学者,所以不知道使用什么或天气不好我可以使用GTX / P收发器。任何帮助都表示赞赏,是的,我在这个问题上谷歌了
    发表于 03-13 06:56

    如何将CubeMX LSM303AH连接到I2C接口上呢?

    I2C接口上呢?求大神告知
    发表于 12-16 06:44

    如何adc读取值?

    adc 读取并显示它们的草图:void setup() { Serial.begin(115200); 引脚模式(A0,输入);} void loop
    发表于 02-21 06:26

    关于i2c处理非标准定制芯片时序问题求解

    i2c 相关的自定义时序。文档中可以看出,芯片读取或写入时需要考虑不同数量的延迟。- 在 Start 命令之后,延迟 20 us - 在其内部地址低字节和高
    发表于 04-11 14:44

    求分享I2C传感器读取温度并通过Wifi AP发送数据的项目

    I2C 传感器读取温度(工作正常)并通过 Wifi AP 发送数据的项目。客户端将是另一个 ESP8266 或手机应用程序,这是最简单的方法吗?我不是想做一个网络服务器,只是 tcpClient 接收命令并用数据响应它。
    发表于 05-04 06:34

    I2C总线接口模块设计

    I2C总线接口模块设计,用EasyFPGA030开发套件通过I2C协议实现对二线制I2C串行EEPROM的读写操作,先把数据写入EEPROM,然后再读取出来显示在数码管上
    发表于 11-02 17:01 41次下载

    如何将各种串行ADC连接到DSP(TMS320C50)的标准串口上方法

    接口软件,当期望的系统性能的增加需要用更高的速度或分辨率的设备替换当前的A到D转换器。本文介绍了一种将各种串行ADC连接到DSP(TMS320C50)的标准串口上方法,同时使软件修改最少。
    发表于 05-24 14:48 6次下载
    如何将各种串行<b>ADC</b>连接到DSP(TMS320<b>C</b>50)的标准串<b>口上</b>的<b>方法</b>

    EE-204:用于配置I2C®设备的Blackfin®处理器SCCB软件接口

    I2C®设备的Blackfin®处理器SCCB软件
    发表于 05-27 20:24 4次下载
    EE-204:用于配置<b>I2C</b>®<b>从</b>设备的Blackfin®<b>处理</b>器SCCB软件<b>接口</b>

    I2C总线读取MPU6050

    处理器的 I2C总线读取MPU6050传感器
    发表于 12-06 13:36 15次下载
    <b>I2C</b>总线<b>读取</b>MPU6050

    通过I2C兼容接口读取ADC数据

    I2C兼容接口读取多字节数据时需要特别注意的地方。介绍了每次读取一个字节时容易出现的问题,并给出了几个具体示例。本文也描述了进行数据传输的正确
    发表于 08-26 22:13 771次阅读
    通过<b>I2C</b>兼容<b>接口</b><b>读取</b><b>ADC</b><b>数据</b>

    I2C设备控制方法的实现

    I2C控制器TWI接口(two-wired interface)的使用方法,并实现AT91SAM7X256对时间数据读取与存储。
    发表于 03-01 10:22 4226次阅读
    <b>I2C</b>设备控制<b>方法</b>的实现

    FPGA与ADC数字数据输出的接口

    接口 — SPI、I2C、SPORT、LVDS 和 JESD204A——用于将 FPGA 连接到 ADC。随着数据速率的进一步提高,FPGA与ADC接口仍将是一个共同的挑战。JESD204B支持12.5 Gbps,JESD204C将迁移到32 G
    的头像 发表于 12-21 10:57 1566次阅读
    FPGA与<b>ADC</b>数字<b>数据</b>输出的<b>接口</b>

    关于I²C接口上ADC读取数据

    I²C兼容接口读取多字节数据时需要注意的问题。讨论了一次读取一个字节的陷阱,并提供了一些具体示例。本文还介绍了处理此类数据传输的
    的头像 发表于 04-04 10:59 197次阅读
    <b>关于</b><b>从</b><b>I</b>²<b>C</b><b>接口上</b>的<b>ADC</b><b>读取</b><b>数据</b>

    下载硬声App