This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADS1219伪代码

Guru**** 2502205 points
Other Parts Discussed in Thread: ADS1219

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/746230/ads1219-pseudo-code

主题中讨论的其他器件:ADS1219

您好!

我查看的是 ads1219数据表、有人说在 i2c 事务之前、SDA 线上的高电平到低电平、而 SCL 为高电平是初始化启动操作的最有效方法、但是、我的问题是启动命令的替代方法。 此外、我想知道器件发送的 ACK 和 NACK 的大小和格式。 最后、如果我想读取状态寄存器、

以下步骤是否正确

I2C 启动  

I2C 通过复位引脚将 ADC 设置为高电平至低电平

发送器件(如果选择引脚均为接地 、则发送0x40)  

如果我收到一条 ACK 消息或发送命令0x20、请释放 i2c 总线

我应该再回到这里吗?

感谢你的帮助  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Mohamad、

    欢迎来到 E2E 论坛! 我认为在 I2C 通信的工作原理上存在一些普遍的困惑。 这是一个标准协议、其中包含有关其工作原理的大量信息、您可以使用您喜爱的搜索引擎找到这些信息。 一般来说、I2C 是从 I2C 主设备发起的字节传输、其中根据操作(或通信方向)、从设备或主设备将在第9个时钟上将 SDA 线路拉低。 因此、有8个数据时钟、后跟 ACK 的第9个时钟(8 + 1)。 当 ACK 发生时、确认器件将在发送 ACK 信号的第9个时钟期间将 SDA 线路拉至低电平。 每个 I2C 通信都是通过启动或重复启动启动启动启动、并以停止启动。

    此外、当使用 ADS1219器件的 RESET 引脚时、ADS1219上的所有操作都将停止并保持在复位状态。 RESET 引脚必须为逻辑高电平才能使器件运行。 如果复位引脚为低电平、则永远不会收到 ACK。

    此致、
    Bob B
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mohamad、

    我看到您拒绝了我的回答、所以让我再次尝试。  您可能会将 ADC 转换器的 START 命令与 I2C Start 条件混淆。  I2C 遵循特定协议作为行业规范。  所有 I2C 器件都必须遵循此协议。  发送 I2C 起始条件后紧跟您希望与之通信的器件地址(通常是7位地址、但有时是10位地址)、第8位表示您是希望读取还是写入要寻址的器件。  发送的下一个字节(可能还有后面的字节)可以是寄存器、命令、数据等。  如果地址、命令、数据等被成功接收、在 I2C 帧的第9个时钟上、响应器件将 SDA 线路设定为低电平来进行一个 ACK。  如果通信未成功、则响应器件会将 SDA 线路保持在高电平以用于 NACK。

    如果要向 ADS1219写入命令或数据、则应始终在每个字节后看到 ACK。  当您从 ADS1219读取数据时、主器件可能不是这样。  通常、微控制器中的 I2C 外设不会 ACK 最后一个字节。

    确保 ADS1219上的 RESET 引脚处于高电平、否则您将无法与 ADS1219通信。  如果要读取状态寄存器中的内容、需要执行两个操作、方法是先将 RREG 命令写入 ADS1219、然后读取寄存器数据。  ADS1219数据表的图37中显示了这种情况。  从机地址和读/写位作为单字节发送。  从器件地址为0x40 (当 A0和 A1接地时)、读取为1、写入为0。  从器件地址帧中传输的是(0x40<1)+ R/W 位。  因此、传输的内容是0x80进行写入、0x81进行读取。

    RREG 命令本身为0x20。  位2是您想要读取的寄存器。  如果发送0x20、则表示请求寄存器0、0x24表示寄存器1 (状态寄存器)。

    综合运用:

    发送 I2C 启动条件

    发送从器件地址作为写操作(0x80)(ADS21219应 ACK)

    发送 RREG 命令(0x24)(ADS1219应 ACK)

    发送 I2C 重复启动条件

    发送从器件地址作为读取地址(0x81)(ADS1219应 ACK)

    发送 SCL 时钟以从 ADS1219检索寄存器(主器件可能会也可能不会 ACK)

    发送 I2C 停止条件

    我希望这能使它更加明确一点。

    此致、

    Bob B