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.

[参考译文] DIX4192:I2C 读取访问问题

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1204379/dix4192-i2c-read-access-issue

部件号:DIX4192
主题中讨论的其他器件:DIX9211PCM9211SRC4192

您好!

我在通过 I2C 读回控制寄存器时观察到异常行为。 按照数据表图中的建议读取寄存器时。 22 (b)、随机读取、 在地址写入和数据读取周期之间使用"重复启动"条件、我可以读取所有寄存器、但地址0x01处的"断电和复位"寄存器始终返回零。 实际上、读取寄存器0x01似乎会触发复位、因为我在读取0x01后读回的所有其他寄存器值都是零、芯片恢复到默认配置。 但是、如果在地址和数据读取周期之间使用停止条件(根据图22、(a)、当前地址读取)、读取地址0x01不会触发复位、 配置会保留。 这是预期结果吗?

此致

 汉斯

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

    您好、Hans、

      请您 向我发送您发送到设备的完整脚本, 包括您的阅读请求,我将查看它。

    谢谢。

    Arash

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

    尊敬的 Arash:

    我在定制电路板上使用微控制器对器件进行编程-因此没有描述访问权限的脚本。 但我已经记录了 这两种情况的 I2C 布线。 这就是发生的情况:

    0。器件接收到硬件复位(未显示)

    1. 将 0x3E 写入 地址0x01处的寄存器

    2.读取地址0x01处的寄存器  
      情况 a)用 a 表示  停止条件  并且有一个新的中断  START 条件  创建一个新的串行器
      情况 b)通过 a 重复 开始  地址和数据读取 阶段之间的条件

    情况 b)因回读值为0而失败、同时器件似乎正在进行复位(所有其他寄存器回读0并且所有端口都被禁用)。 情况 a)工作正常。 有趣的是、案例 b)适用于所有其他寄存器地址、但地址为0x01。

    根据我的理解、情况 a)和 b)分别等同于数据表图22中描述的"读取操作" a)和 b)。

      

    此致、

     汉斯

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

    汉斯,这是一个有趣的问题! 您能否读取一些其他寄存器、看看它们的值是否会改变这个寄存器的变化方式?

    此外、是否还有方法可以 更改 此等待期间的时序

    让我们知道您找到什么、我们可以从那里开始。  

    此致、

    Arash

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

    尊敬的 Arash:

    当然、下面是三个用于直接比较的曲线: 第一个是按标准等待时间读取寄存器0x01、第二个是等待时间从~25us 增加到~113us 的相同访问-仍然失败、第三个是对寄存器0x07的读取访问成功(其他寄存器读取也成功)。 我怀疑 I2C 状态机在寻址到的寄存器中产生毛刺脉冲 、在地址为0x01的情况下、会触发芯片的异步复位。  如果在以重复启动条件从 GPO 控制寄存器读取时直接观察到这种干扰、则检查配置为高电平有效(或低电平)输出的 GPIO 引脚将很有趣。 但是、我的定制电路板无法访问这些引脚。

    此致、

     汉斯

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

    您好、Hans、感谢您 进行测试、并确认这仅在 插入重复读取时发生在该寄存器中。 我倾向于同意您的观点、即这似乎是 特定寄存器上的状态机出现干扰。 我认为唯一的补救措施是有一个完整的停止,然后阅读,尽管如此, 我会 咨询其他工程师,并 让你在星期四之前知道。

    此致、

    Arash

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

    您好 Arash、这里是 在将探针连接到 GPO1引脚后我能够运行的另一个测试。 首先、GPO1控制寄存器0x1b 被设定为0x01以强制 GPO1为高电平。 寄存器使用一个重复起始条件成功回读。 然后、我 用一个重复的 START 条件读回寄存器0x01、并且 GPO1在地址阶段结束时最终的 SCL 上升沿切换为低电平(其默认状态)。 这似乎是配置寄存器被错误复位的时刻。 我还检查了(重复)启动条件的设置和保持时序、它们都在规格范围内。 此外、切换到 I2C 快速模式不会改变观察到的行为。

    此致、

     汉斯

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

    谢谢 Hans、我将与我的同事一起审阅这些内容、并在周四返回给您。

    此致、

    Arash

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

    您好、Hans、 RST 引脚是如何连接的?  您能否监控 RST 引脚行为。 我们想知道此引脚是否会触发复位条件。

    所有 I2C 波形都在协议范围内  

    此致、

    Arash

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

    大家好、Arash、RST 引脚由推挽配置中的微控制器输出驱动、并且在这条线路上没有看到任何寄生信号。 如果有的话、 读取其它地址时也会发生复位。

    此致

     汉斯

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

    您好、Hans、只有2个机制来触发复位。 一个是外部 RST 引脚、另一个是器件内部引脚。 由于您监控引脚并且上面没有杂散信号、因此只剩下一个问题、就是我们一开始就怀疑的问题、也就是寄存器01中重复读取中的尖峰。

    我无法访问设计库来查看或模拟它、看看我是否能找到任何东西来解释它对 该寄存器执行此操作的原因。  我 认为唯一的选择是解决它,如果可能的话,做阅读,而不是重复开始.  

    此致、

    Arash

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

    您好 Arash、我知道从 BB 时代返回设计数据库(和设计工程师)非常困难。 不使用这个重复起始条件根本不是一个问题。 我只是想知道是否可以跟踪该误差。 不过、如果该芯片系列中可能使用相同 I2C 宏的其他器件(PCM9211、SRC4192、DIX9211等)显示同样的问题、也会很有趣。 感谢您的观看。

    此致、

     汉斯