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.

[参考译文] PCM1864-Q1:第二个寄存器读取始终返回 0x00。

Guru**** 2826755 points

Other Parts Discussed in Thread: PCM1864

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1608813/pcm1864-q1-the-second-register-read-always-returns-0x00

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

多次运行以下命令以读取​​PCM1864Q1 ADC 芯片的寄存器值。
i2cget -y -f 33 0x4a 0x72
i2cget -y -f 33 0x4a 0x72
i2cget -y -f 33 0x4a 0x72


【观察到】:
只有前一个 i2cget 获得正确的值、但后续 i2cget 命令始终返回 0。

【预期】:
所有 i2cget 命令都应该能够读取正确的寄存器值。

此外、ADC 芯片始终工作正常、我可以通过麦克风录制音频帧。

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

    我有机会探测 I2C 数据和时钟线、并附上了捕获结果。 我还‑了启动信号

     

    I2C 行为:

    1. 使用第一个 I2C 读取:
      ->器件以非零数据 (0x70) 进行响应
      ->在地址和数据之后接收到 ACK
      ->这确认寄存器是可读的并保存了一个值。
    2. 使用第二个 I2C 读取:
      -> I2C 器件以 0x0 进行响应、当我尝试读取同一寄存器时、收到 ACK。
      ->其他寄存器也观察到相同的行为。


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

    尊敬的济强:

    POST 未连接任何内容、但通常情况 下、器件中的某些寄存器设置为 在第二次读取寄存器时自行复位。 因此、第一次读取始终读取 预期值、第二次读取将是复位。  

    您可以检查数据表中的一些其他寄存器、并查看您是否可以反复正确读取它们。 如果您仍然有任何问题,请     在第一次和第二次尝试时向我们发送特定的寄存器(至少提供 5 到 6 个寄存器,如寄存器 1、11、52 和 54 )及其值读数。  

    此致、

    Arash

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

    第二个读取问题不仅发生在单个或特定的寄存器上、而且发生在所有寄存器上。

    系统引导后、一旦您读取任何寄存器、对任何寄存器的后续读取都将返回 0。

    此外,我还尝试使用内核驱动程序中的 regmap_read () 函数来读取,这个问题也仍然存在。  

    我还尝试在读取前调用 regmap_cache_bypass (regmap、true) 以绕过缓存访问、但问题仍然存在。

    附件如下。

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

    事实上,你说它读取 0 的所有寄存器,并且部件工作正常,告诉我一些关于 I2C 通信(读回) 不正确。 我不确定我是否可以按照上面的图中的 I2C W/R 操作方式进行操作。

    例如、读取命令应提供器件地址和 寄存器编号、并将读取该地址中寄存器的值。

    例如、对于写入和读取、我发送以下信息:

    W 30 07 8A  

    R 30 07 01.

    当我读取器件地址 30 处的寄存器 07 时、读数应为 8A  

    地址 30:  0011 0000

    reg 07   :0000 0111

    值 8A ;1000 1010

    因此、 在示波器上、它应该有 3 个段、如下所示:地址、寄存器、值(和每个段末尾的 ACK)  

    在第 2 次和第 3 次尝试时所有读数为 0 的图中、您将指令发送到哪个器件地址和寄存器?

    同样在您的第一个图表上、 您说写入的是 x4A、但在我看来是 0x94。

    确认您 正确写入和读取的一种方法是使用 Aardvark I2C。  

    您还可以 使用以下应用手册表格阅读有关 I2C 格式的更多信息: 了解 I2C 总线  (SLVA704)。

    此致、

    Arash

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

    首先、  我添加了图中的 0x4A 注释。 这是我的 Linux 驱动程序中使用的 7 位地址、
    而 0x94 是 I²C SDA 上反映的地址。 它包括最低阶 1 位读取/写入标志位:0x94 >> 1 = 0x4A。

    以下是对这些数字的数据分析:

    下图是  第一次读取的结果、我读取了页 0 寄存器 0x70(器件状态寄存器)。  我读取了预期值 0x70(指示运行状态)。  它的工作案例。

    1001010   0        0       01110000   0         1001010 1.         0      01110000 1.   

    0x4A      W        确认   0x70        ACK       0x4A      R      确认   0x70       NACK

    1.下图是  第二次读数、我读取了页 0 寄存器 0x70。   读取预期值 0x00、  这种情况不起作用。

    1001010.      0    0      01110000     0       1001010 1.         0      00000000    1

    0x4A         W    ACK  0x70         ACK    0x4A        R    ACK   0x00         NACK

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

    尊敬的济强:

    我已经请 我们的  ADC 专家 查看这个问题。 请等待他 ,以便他可以通过文章,并回应它.

    谢谢。

    Arash

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

    您好、

    您是否比较了 2 个器件? 您能否在我们的 EVM 上复制您的序列、然后将其替换为出现 I2C 问题的单元?

    如果不能很快解决问题、可以使用几种快速的故障排除技术:

    -确保 I2C 被上拉至 IOVDD,仔细检查上拉电阻以确保它可以在同一总线上支持多个器件(如果适用)

    -间歇性故障可能是由于 I2C 主设备和从设备之间的接地问题,尤其是在较大的设计中,在 I2C 线路附近添加额外的 GND 以稳定连接

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

    是的、这始终是一个问题、并且发生在所有设备上。 我认为这不是 硬件芯片本身的问题。

    我们已确认 AVDD、DVDD 和 IOVDD 已正确连接至 3.3V 电源。

    此外、音频功能正常工作;

    使用 i2cget 或 regmap_read () 读取寄存器值时只有一个问题。

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

    此问题仅在具有特定命令的 Linux 代码中发生、但连接到 EVM 时可以吗?

    请确保 SCL/SDA 上拉至 IOVDD。 然后、您能否仔细检查代码以进行虚拟 i2c 写入以获得正确的读取操作:

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

    仅当我使用 i2cget 命令读取寄存器两次时才会出现此问题。

    当然, 我也尝试 使用内核接口 regmap_read () 来读取寄存器。 问题仍然存在。  

    我们没有 TI EVM 对其进行测试。

    信号

    我不在 page1 上使用任何寄存器。 只有第 0 页上的部分寄存器在使用中。

    代码如下所示:

    静态 uint8_t pcm1864_i2c_reg[][2]={
    {0x0、0x0}、//选择页 0
    {0x0、0x0}、//再次选择 PAGE 0
    {0x01、0x0C}、
    {0x02、0x0C}、
    {0x03、0x0C}、
    {0x04、0x0C}、
    {0x06、0x41}、
    {0x07、0x41}、
    {0x08、0x44}、
    {0x09、0x44}、
    {0x0B、0x13}、
    {0x0C、0x01}、
    {0x19、0x00}、
    {0x20、0x0F}、
    {0x60、0x00}、
    {0x70、0x70}、
    {0x0、0x0}、//选择页 0
    };

    void pcm1864_configure(结构 pcm1864_priv *pcm1864)

    对于 (uint8_t reg_index = 0;reg_index < array_size (pcm1864_i2c_reg);reg_index++){
    RET = regmap_write (pcm1864->regmap、
    pcm1864_i2c_reg[reg_index][0]、
    pcm1864_i2c_reg[reg_index][1]);
    }
    }

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

    您好、

    你可以尝试将假写加入你的脚本中,类似于我在上次答复中粘贴的图像吗?

    请告诉我它是否有效

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

    root@Adv:~# i2cget -y -f 33 0x4a 0x70
    0x70
    root@Adv:~# i2cget -y -f 33 0x4a 0x70
    0x00
    root@Adv:~# i2cset -y -f 33 0x4a 0x00 0x00
    root@Adv:~# i2cset -y -f 33 0x4a 0x00 0x00
    root@Adv:~# i2cget -y -f 33 0x4a 0x70
    0x00
    root@Adv:~# i2cset -y -f 33 0x4a 0x70 0x70
    root@Adv:~# i2cget -y -f 33 0x4a 0x70
    0x00

    我完全删除了 Linux 驱动程序代码、仅使用上述命令来调试此问题。

    您可以看到、在第一次引导期间、当我读取 page0 0x70 寄存器时、它会输出默认值 0x70。

    当我继续读取时、得到的值为 0x00。

    根据您的建议、我连续两次将值 0x00 写入页 0 0x00 寄存器。

    然后、再次继续读取页 0 0x70 寄存器、读取的值仍然是 0x00。

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

    尊敬的 Jiqian:

    联系我们的 Linux 专家以提供支持

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

    您好、i2cget/i2cset/i2cdump 命令始终 能直接读取寄存器值。  我认为它适用于一个器件而不适用于另一个器件时没有任何原因。 这不是 Linux 问题。  您能否仅仅确认 i2cdump 的行为是否相同、以确保它适用于少数寄存器或所有寄存器?

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

    大家好、我提出以下意见:

    1.此问题仅在 PCM1864 芯片上发生。 在 I2C 总线 33 上、除了 PCM1864 外、还有一个放大器芯片作为从器件。

    当使用 I2Cget 读取放大器芯片的寄存器时、不会出现此问题。

    2. i2cdump 的行为相同:

    root@Adv:~# i2cdump -y -f 33 0x4a
    未指定大小(使用字节数据访问)
    0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
    00:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    10:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    20:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    30:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    40:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    50:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    60:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    70:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    80:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    90:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    A0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    b0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    C0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    d0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    E0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    F0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    root@Adv:~# i2cset -y -f 33 0x4a 0x00 0x00
    root@Adv:~# i2cset -y -f 33 0x4a 0x00 0x00
    root@Adv:~# i2cdump -y -f 33 0x4a
    未指定大小(使用字节数据访问)
    0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
    00:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    10:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    20:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    30:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    40:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    50:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    60:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    70:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    80:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    90:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    A0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    b0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    C0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    d0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    E0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    F0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00…
    Root@Adv:~#

    3. i2cget/i2cdump 读取的值始终是页面选择寄存器(页 0 寄存器 0x00)的值

    root@Adv:~# i2cset -y -f 33 0x4a 0x00 0x01
    root@Adv:~# i2cdump -y -f 33 0x4a
    未指定大小(使用字节数据访问)
    0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
    00:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    10:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    20:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    30:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    40:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    50:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    60:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    70: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    80:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    90:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    A0:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    b0:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    C0:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    d0:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    E0:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    F0:01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01?????????????
    Root@Adv:~#
    root@Adv:~# i2cset -y -f 33 0x4a 0x00 0x02
    root@Adv:~# i2cdump -y -f 33 0x4a
    未指定大小(使用字节数据访问)
    0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
    00:02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    10:02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    20: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    30: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    40: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    50: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    60: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    70: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    80: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    90: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    A0:02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    B0:02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    C0:02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    d0:02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    E0:02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    F0:02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02??????????????
    root@Adv:~# i2cset -y -f 33 0x4a 0x00 0x03
    root@Adv:~# i2cdump -y -f 33 0x4a
    未指定大小(使用字节数据访问)
    0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
    00:03 03 03 03 03 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    10:03 03 03 03 03 03. 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    20: 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    30: 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    40: 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    50: 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    60: 03 03 03 03 03 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    70: 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    80: 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    90: 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    A0:03 03 03 03 03 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    b0:03 03 03 03 03 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    C0:03 03 03 03 03 03 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    d0:03 03 03 03 03 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    E0:03 03 03 03 03 03 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    F0:03 03 03 03 03 03 03 03 03 03 03 03. 03 03 03 03 03 03 03. 03?????????????
    Root@Adv:~#

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

    我们的器件具有 00 - 7f 的寄存器。  如果是与器件相关的问题、它应该仅显示寄存器 00 至 7f 的问题。  但转储在寄存器地址 00 到 ff 的转储中的所有值都是 01、02、03。 我怀疑总线/连接有问题。

    我建议检查一下、  

    * TI 与总线上的其他器件之间的 i2c 地址是否存在冲突?  请求您查看设备树、并检查 sysfs 是否提供了一些提示。 (所有设备都在总线 33 -> i2cdetect -y -a -r 0x21 中、该驱动程序是为设备注册的-> cat /sys/bus/i2c/devices/21-004a/name 等。)

    * 如果你有连接到其他巴士的选项,你可以尝试如果它得到解决后移动到新的巴士。  

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

    1. bus33 上有 3 个设备,但我没有发现任何冲突。

    root@Adv:/# i2cdetect -y -a -r 0x21
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00:-------- ----- ----- --
    10:-------- ----- ----- --
    第 20 章:一个男人 ----- ----- --
    第 30 章:你是我的女人 ----- ----- --
    第 40 章:我是你的女人 ------ UU --------
    第 50 章:我是你的女人 ----- ----- --
    第 60 章:我是你的女人 ----- 6a 6b -----
    第 70 章:我的心 ----- ----- --
    root@adb:/#

    root@Adv:/sys/bus/i2c/devices # cat 33-004A/name
    pcm1864
    root@Adv:/sys/bus/i2c/devices #

    2.我确实怀疑总线 33 上的设备冲突可能导致此问题。

    因此、我也尝试从总线 33 中移除其他设备、但问题仍然存在。

    root@Adv:~# i2cdetect -y -a -r 0x21
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00:-------- ----- ----- --
    10:-------- ----- ----- --
    第 20 章:一个男人 ----- ----- --
    第 30 章:你是我的女人 ----- ----- --
    第 40 章:我是你的女人 ------ UU --------
    第 50 章:我是你的女人 ----- ----- --
    第 60 章:我是你的女人 ----- ----- --
    第 70 章:我的心 ----- ----- --
    root@Adv:~# i2cget -y -f 33 0x4a 0x70
    0x70
    Root@Adv:~#
    root@Adv:~# i2cget -y -f 33 0x4a 0x70
    0x00
    Root@Adv:~#

    3.由于硬件连接限制、PCM1864 当前无法移至另一总线。

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

    如果我们删除驱动程序怎么办? 它是否在 4a 处显示设备?

    我将检查此处是否有任何 EVM、并尝试使用 RPI 设置进行测试。

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

    我尝试将 EVM 连接到硬件、并执行寄存器转储。 输出如下所示。  

    多个寄存器转储不会导致问题。 但我觉得这是一个奇怪的地方。 刚刚连接了 SDA 和 SCL 线。  

    nhy@nhyrpi:~/work $ i2cdetect -y -a -r 0x1
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: 40 -- -- -- -- -- -- -- -- -- 4a -- -- -- -- --
    50: 50 -- -- -- 54 -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    nhy@nhyrpi:~/work $ i2cdump -f -y 0x1 0x4a b
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
    00: 00 00 00 00 00 86 41 41 42 42 00 44 00 00 00 00    .....?AABB.D....
    10: 01 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ? ..............
    20: 03 03 00 01 50 07 03 3f 11 01 01 08 00 00 00 00    ??.?P???????....
    30: 00 00 00 01 00 00 01 00 00 00 00 00 00 00 00 00    ...?..?.........
    40: 80 7f 00 80 7f 00 80 7f 00 80 7f 00 80 7f 00 80    ??.??.??.??.??.?
    50: 7f 00 80 7f 00 80 7f 00 00 00 00 00 00 00 00 00    ?.??.??.........
    60: 01 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00    ?.?.............
    70: 70 10 0f 03 32 00 11 44 07 00 00 00 00 00 00 00    p???2.?D?.......
    80: 00 00 00 00 00 86 41 41 42 42 00 44 00 00 00 00    .....?AABB.D....
    90: 01 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ? ..............
    a0: 03 03 00 01 50 07 03 3f 11 01 01 08 00 00 00 00    ??.?P???????....
    b0: 00 00 00 01 00 00 01 00 00 00 00 00 00 00 00 00    ...?..?.........
    c0: 80 7f 00 80 7f 00 80 7f 00 80 7f 00 80 7f 00 80    ??.??.??.??.??.?
    d0: 7f 00 80 7f 00 80 7f 00 00 00 00 00 00 00 00 00    ?.??.??.........
    e0: 01 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00    ?.?.............
    f0: 70 10 0f 03 32 00 11 44 07 00 00 00 00 00 00 00    p???2.?D?.......
    
    
    nhy@nhyrpi:~/work $ i2cdump -f -y 0x1 0x4a b
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
    00: 00 00 00 00 00 86 41 41 42 42 00 44 00 00 00 00    .....?AABB.D....
    10: 01 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ? ..............
    20: 03 03 00 01 50 07 03 3f 11 01 01 08 00 00 00 00    ??.?P???????....
    30: 00 00 00 01 00 00 01 00 00 00 00 00 00 00 00 00    ...?..?.........
    40: 80 7f 00 80 7f 00 80 7f 00 80 7f 00 80 7f 00 80    ??.??.??.??.??.?
    50: 7f 00 80 7f 00 80 7f 00 00 00 00 00 00 00 00 00    ?.??.??.........
    60: 01 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00    ?.?.............
    70: 70 10 0f 03 32 00 11 44 07 00 00 00 00 00 00 00    p???2.?D?.......
    80: 00 00 00 00 00 86 41 41 42 42 00 44 00 00 00 00    .....?AABB.D....
    90: 01 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ? ..............
    a0: 03 03 00 01 50 07 03 3f 11 01 01 08 00 00 00 00    ??.?P???????....
    b0: 00 00 00 01 00 00 01 00 00 00 00 00 00 00 00 00    ...?..?.........
    c0: 80 7f 00 80 7f 00 80 7f 00 80 7f 00 80 7f 00 80    ??.??.??.??.??.?
    d0: 7f 00 80 7f 00 80 7f 00 00 00 00 00 00 00 00 00    ?.??.??.........
    e0: 01 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00    ?.?.............
    f0: 70 10 0f 03 32 00 11 44 07 00 00 00 00 00 00 00    p???2.?D?.......
    
    

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

    我删除了驱动程序 pcm1864.ko、 它 在 4a 处显示设备。

    此外、我还观察到、系统启动后、首先运行 i2cdetect、第一个 i2cget 也出现了这个问题、其值为 0x00。

    在不运行 i2cdetect 的情况下重新启动系统时、第一次读取会返回一个正常值。

    启动后:
    root@Adv:~# i2cdetect -y -a -r 0x21
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00:-------- ----- ----- --
    10:-------- ----- ----- --
    第 20 章:一个男人 ----- ----- --
    第 30 章:你是我的女人 ----- ----- --
    第 40 章:我是你的女人 -------------------–4a----------------
    第 50 章:我是你的女人 ----- ----- --
    第 60 章:我是你的女人 ----- 6a 6b -----
    第 70 章:我的心 ----- ----- --
    root@Adv:~# i2cget -y -f 33 0x4a 0x70
    0x00
    root@Adv:~# i2cget -y -f 33 0x4a 0x70
    0x00

    重新引导目标:
    root@Adv:~# i2cget -y -f 33 0x4a 0x70
    0x70
    root@Adv:~# i2cget -y -f 33 0x4a 0x70
    0x00

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

    您是否可以与 i2c 总线上连接的所有器件共享原理图?

    此外、我们是否使用已知良好的设备进行了 IC 交换?

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

    此问题在所有设备上都发生、因此我们没有执行 IC 交换。

    此外、之前的构建版本中不存在该问题。

    在之前的构建中、SFI (FreeRTOS) 使用了 SFI (1_2)_I2C_SCL SFI (1_2)_I2C_SDA 用于初始化 PCM1864 的引脚。

    在当前构建中、SFI 功能已删除、并且使用配置了 PCM1864 USI (16_2)_I2C_SCL USI (16_2)_I2C_SDA 匹配引脚。

    在所有构建中、我们使用 USI (16_2)_I2C_SCL  和  USI (16_2)_I2C_SDA  用于读取​​Linux 端寄存器值的引脚。

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

    您好、

    所有研讨会幻灯片

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

    您好、

    原理图也与之前的构建相同? I2C 总线驱动器只是作了更改?

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

    是的

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

    尊敬的济强:

    好的、问题听起来更像是以下问题之一:

    - Linux 12c 驱动程序事务类型

    - i2c 多路复用器/开关/上拉配置

    -首次访问后的总线堆栈

    -生成之间的时间/顺序差异

    对于新驱动器、请仔细检查 i2c 事务的上升和下降时间、并确保它们符合数据表的表 7.9

    其次、我会检查写入格式。 从 SFI 切换到 Linux 可能在写入寄存器、插入和未知延迟方面发生了序列更改、或者执行停止/启动方法。

    然后确保多路复用器保持 i2c 总线上拉至 IOVDD