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.

[参考译文] ADS1015-Q1:I2C 写入失败问题

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1509880/ads1015-q1-i2c-write-failure-problem

器件型号:ADS1015-Q1
"主题中讨论的其他器件: ADS1015"

工具/软件:

您好、团队、

Harman 目前正在将 ADS1015-Q1集成到我们的软件系统中、并遇到需要您专业知识才能解决的问题。

 

以下是详细信息:

  • 默认寄存器值不匹配:从器件读取的默认寄存器值与数据表中列出的规格不一致。

  • 写入/读取不一致:向寄存器写入值后、仅转换寄存器更新。 但是、从寄存器读回的值与我们写入的值不匹配。

 

T Ü V S Ü D I²C 已验证、没有明显的信号完整性问题。

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

    您好 Alan、

    您能否让客户通过 I2C 共享事务的逻辑捕获结果、以便我可以验证他们发送和接收的数据格式是否正确?

    此致、
    Joel

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

    你好 Joel、

    感谢您的及时答复。

    对 I2C 波形进行了测试、发现它不符合规范。 此问题的可能原因是什么?

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

    你好 Joel、

    更新测试结果:

     

    根据上电后捕获的波形、主机将以下值写入与 ADC 相关的寄存器并更改了值。

    但是、我们的软件代码不包含这些行为。

     

    此外、虽然我们可以在写入操作期间观察到相应的 I2C 波形(例如、 将0x8583写入 CONFIG 寄存器 )、 从寄存器读回的值与写入的值不匹配。

    此问题的可能原因是什么? 请帮助分析上述问题的可能原因。

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

    您好 Alan、

    您能否确认 ADDR 引脚被上拉至 VDD?  

    您是否还能使用屏幕截图预期执行的命令来添加注释?

    第一个图像看起来是常规调用、然后是0000 0110。 这会通知器件进入断电状态。 由于之后要立即对器件进行编程、因此建议删除此步骤。 进行此更改后、能否向我发送更新后的顺序?

    此致、
    Joel

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

    你好 Joel、

    您能否确认 ADDR 引脚已上拉至 VDD?  [/报价]

    ADDR 引脚上拉到 VDD、如下所示。

    以下四个屏幕截图发生在开机后。

     

    从器件读取的寄存器值与 数据表中列出的复位默认值不一致(除外 转换寄存器)。

    此问题的可能原因是什么?

     

    图1 (通用呼叫+读取转换寄存器=0000h、复位默认值=0000h)

     

    图2 (读取配置寄存器= 0100h、复位默认值= 8583h)

    图3 (读取 Lo_thresh 寄存器=0000h、复位默认值=8000h)

    图4 (读取 Hi_thresh 寄存器=1B59h、复位默认值= 7FFFh)

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

    您好 Alan、

    我想我发现了这个问题。 默认情况下、ADS1015会上电至断电模式以保持功耗、并且不会主动执行任何转换。 要在单次模式下执行转换、您必须写入 Config 寄存器、并将 OS 位设置为高电平。 器件上电并启动转换后、将再次上电。 数据表的第7.4.2.1节说明了此操作。

    上面的还说明了为什么在第二张图片中从 Config 寄存器读取时发送了读回0x10、这表示 MODE 位为高电平、并且该器件处于单次模式或断电状态。 我认为这是器件处于断电模式时的预期结果、但默认值似乎为0x8583。 我可以确认在通用广播复位后预期行为是什么。

    阈值寄存器更难解释。 值得注意的是、由于 Lo_threshold MSB 为0且 Hi_threshold MSB 为1、该器件看起来已启用 ALERT/RDY 引脚的转换就绪功能。  

    如前所述、观察通用广播+复位是否导致器件的启动配置出现任何问题可能会很有趣。 是否可以按相同的顺序删除此项?

    另一个建议是尝试发送完全停止条件、然后发送完全启动条件、而不是在地址指针寄存器帧发送后出现重新启动条件。 根据数据表、它应该支持停止条件或重复启动条件、但值得一试。 下面的句子给出了该指示、但时序图仅显示了停止条件、而不是重启条件。  

    "对 Address Pointer 寄存器进行写入后、目标进行响应、控制器发出停止或重复启动条件。"

    针对寄存器写入的类似建议。 发送地址指针寄存器帧后、能否发送停止条件、后跟启动条件? 根据数据表、停止条件似乎是可选的、寄存器写入可能会在没有停止条件的情况下继续。 这可通过添加停止条件、然后发出启动条件并从寄存器读取来验证。

    "要更改读取的寄存器、必须向 P[1:0]写入一个新值。 为了将新值写入 P[1:0]、控制器在 R/W 位为低电平时发出目标地址字节、后跟 Address Pointer 寄存器字节。 无需发送额外的数据、控制器可以发出停止条件。 控制器现在可以发出启动条件并在 R/W 位为高电平时发送目标地址字节以开始读取。"

    此致、
    Joel

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

    Alan、

    简而言之、我会尝试移除并重新为器件供电、因此它从默认状态开始、然后在移除通用广播+ RESET 的情况下执行序列的其余部分。 我正在努力获取硬件、因此我可以自己执行这些步骤。

    此致、
    Joel

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

    你好 Joel、

    请允许我更新 Harman‘s 回复:

    我们已经确定了问题 子器件的 I2C 通信 (下图所示为拓扑)。

     

    当 I2C 总线的 PMIC 分支断开时、ADC 正常通信、并且可以无错误地读取/写入。

    但是、两个子器件的地址不会发生冲突: ADC 使用0x49、而 PMIC 使用0x48 。 问题的根本原因仍不清楚。

     

    您能否就此问题分享任何见解或建议? 感谢您的支持。

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

    您好 Alan、

    是否删除了通用 CALL + RESET 命令? 此指令可能未定义 PMIC 上的行为、因此可能会导致问题。 这是值得 检查的。

    此致、
    Joel

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

    您是否还能分享 PMIC 器件的器件型号? 在某些情况下、ADC 和 PMIC 都可以控制总线。