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.

[参考译文] ADS7138:手动模式控制查询

Guru**** 2387080 points
Other Parts Discussed in Thread: ADS7138, ADS7038
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/994445/ads7138-manual-mode-control-query

器件型号:ADS7138
主题中讨论的其他器件: ADS7038

您好!

我目前正在为这个芯片编写一个驱动程序、我对手动模式的事件序列有点困惑。

在第23页上、给出了流程图:

我的问题涉及何时需要使用运算代码以及何时不需要使用运算代码。

因此、据我了解、我们首先将通道配置为 AI。  为此、我需要发送:

地址+运算代码+寄存器地址+要设置的值

例如、这是该命令的常规形式、0x08是写入单个寄存器、0x05是 PIN_CFG 的地址、0x00意味着全部设置为 AI

| S | 7位从机地址|| W |{Ack}| 0x08 |{Ack}| 0x05 |{Ack}|0x00|{Ack}|P|

然后、我写入我希望读取的通道 ID、例如、对于通道1:

| S | 7位从机地址|| W |{Ack}| 0x08 |{Ack}| 0x11 |{Ack}|0x01|{Ack}|P|

那么、要启动转换、我不再需要运算代码?  我实际上不会读取任何特定寄存器、如 Recent CH1_LSB?

我发送如下内容:

| S | 7位从器件地址|| R |   

然后等待响应?

谢谢、

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

    您好、Brett、

    是的、您已经描述了写入寄存器的正确顺序。 由于图29中的流程图还建议通过写入 CONV_MODE 和 SEQ_MODE 位将器件设置为手动模式、因此您也可以包含此指令。 上电时、ADC 应默认为手动模式、但如果您需要重新运行此例程、这将确保您处于正确的模式。 或者、如果您需要更改模式、例程将已被如此写入、您只需更改位即可。 不是绝对必需的、只是最好拥有。

    是的、读取的数据不需要运算代码、如下面的图30所示。 您的描述是正确的。

    布莱恩

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

    您好 Bryan、

    感谢您的回复。  还有几个问题需要注意:

    1) 1)您能否解释什么是常规调用?  或者发送它的一般形式是什么?  是否涉及运算代码?

    2) 2)另外、我很难理解我从 IC 获取的一些响应。  例如、我正在尝试读取状态寄存器、它会回复0xFB 或0xBF。  即使命令没有意义、它是否总是回答? 例如、如果我遇到错误的运算代码或我要求它读取不存在的寄存器-器件是否仍会回复?

    3) 3)为了读取寄存器、SCL 是否必须持续保持开启状态?  我要做的是一个 i2c_master_send 命令后跟一个 i2c_master_recv 命令。  我想通常您会使用 i2c_transfer、它将这两种类型组合在一起、但我使用的特定 i2c 控制器没有使其正常工作所需的功能。  因此、我将向 IC 发送7位从地址、W 位、运算代码和寄存器地址。  然后、我将尝试在这之后立即接收1字节的数据、但在发送命令获得接收命令之前、可能会短暂暂停。  我甚至特意添加了一个暂停、但没有效果。

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

    您好、Brett、

    您可能希望尝试查看我们的高精度实验室关于通信的内容。 这可能会解答您有关 I2C 协议的一些更一般的问题: https://training.ti.com/ti-precision-labs-adcs。 第一部分介绍 I2C 和 SPI 通信。

    通用调用实际上就是名称所暗示的:一种同时寻址连接到 I2C 总线的每个器件的方法。 因此、如果您同时在总线上有多个 ADS7138、则可以发出此命令以以以完全相同的方式配置它们、例如。 I2C 总线规范(版本6)的第3.2.10节对此进行了更详细的描述。 ADS7138数据表中的第8.3.13节还提供了一些与常规调用和/或一些其他函数相关的特定功能。

    如果您尝试读取寄存器并提供任何有效地址、ADS7138将仅返回该地址处的寄存器值。 因此、如果您打算读取寄存器0x00、而是发送0x01、您仍会得到一些反馈。 另一方面、如果发送的寄存器值未包含在 ADS7138数据表的表10中、则可能会访问保留的寄存器并接收未知数据。 第8.6节顶部提到了这一点:"表10中未列出的所有寄存器偏移地址都应视为保留位置、并且不应修改寄存器内容。" 当然、这也假设操作代码已正确发送和通信。

    对于最后一个问题、您是否有一个时序图来显示在读取寄存器时特定实现的行为? 了解您如何发送/接收命令以了解是否存在任何问题会很有帮助。

    布莱恩

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

    谢谢-这些视频对您帮助很大。  此外、获得示波器并监控我正在发送/接收的内容、修复代码中的指针错误变得容易得多。

    我现在可以读取/写入寄存器、现在我要将手动模式与时钟扩展结合起来、假设我使用的 I2C 控制器支持该功能。

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

    您好、Brett、

    听起来不错、很高兴信息帮助了我们。 我还想提一下、我们有一个该器件的 SPI 版本、即 ADS7038。 功能、封装尺寸、性能等是相同的、 只需使用 SPI 接口、以防您有兴趣。

    如果您有任何与此特定主题相关的其他问题、请告知我们。 如果您有另一个要讨论的主题、请开始新的主题、我们将为您提供帮助。 谢谢!

    布莱恩