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.

[参考译文] CCS/AM4379:I2C 问题

Guru**** 2391415 points
Other Parts Discussed in Thread: AM4379, TMDSEVM437X, AM4372

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/855476/ccs-am4379-i2c-issue

器件型号:AM4379
主题中讨论的其他器件: TMDSEVM437XAM4372

工具/软件:Code Composer Studio

您好、TI 专家、

我正在使用 AM4379定制板(VARSOMAM43)、并尝试通过 I2C 连接 AD5933。  

我使用 i2cdetect 命令来读取从器件地址、并且能够成功读取地址0x0D。 运行命令 i2cdump 时 、我甚至能够看到所有寄存器中的数据。  

我已经编写了一个简单的代码来从寄存器0x82读取该值、该代码应该为我提供与我在终端中看到的值完全相同的值(在执行 i2cdump 时)。 但由于某种原因、代码每次都为我提供0。  

有人能告诉我有什么问题吗?

注意:我尚未手动初始化任何 I2C 引脚。 如果必须这样做,请向我建议如何做到这一点。

谢谢

e2e.ti.com/.../testing.txt

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

    您好、Adarsh、

    您是否使用 AM437x PSDK Linux? 如果是、是哪个版本? 最新版本为6.01 (内核 4.19.59)、可从以下位置获取:

    http://software-dl.ti.com/processor-sdk-linux/esd/AM437X/latest/index_FDS.html


    您可以在 Linux 主 DTS 文件中配置 I2C 引脚多路复用寄存器。 例如、请查看以下文件、其中设置了 AM437x GP EVM (TMDSEVM437X) i2c 引脚:

    {PSDK}/board-support/linux-kernel/arch/arm/boot/dts/am437x-gp-evm.dts

    am43xx_pinmux{(am43xx_pinmux)}

    i2c0_pins:i2c0_pins{
          pinctrl-single、pins =<
             AM4372_IOPAD (0x988、PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* i2c0_sda.i2c0_sda *
             AM4372_IOPAD (0x98c、PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* i2c0_SCL.i2c0_SCL *
          >;
       };

       i2c1_pins:i2c1_pins{
          pinctrl-single、pins =<
             AM4372_IOPAD (0x95c、PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_Mode2) /* spi0_cs0.i2c1_SCL *
             AM4372_IOPAD (0x958、PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_Mode2) /* spi0_D1.i2c1_sda *
          >;
       };

    通常、如果 i2c-tools (i2cdetect、i2cdump、i2cset、i2cget)正常工作、而您的自定义用户空间应用程序失败、则这表示用户空间应用程序错误、超出了本论坛支持的范围。

    我建议您比较 I2C 模块和引脚多路复用器寄存器设置中 i2c 工具使用情况和自定义应用使用情况。 可能会有一些差异、这可以为您提供一些调试方向。 您还可以使用示波器 AM437x I2C 引脚进行测量、并比较 i2c-tools 使用情况和自定义应用使用情况之间的信号。

    此致、
    帕维尔

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

    感谢 Pavel。

    我遇到了一些愚蠢的用户空间应用错误、并解决了这个问题。 我刚才使用了 IOCTL 命令来读取数据、并且它完全正常工作 fine.can 您可以通过查看我的代码、告诉我如何以类似的方式将数据写入寄存器?

    感谢 e2e.ti.com/.../working.c

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

    Adarsh、

    请参阅以下 e2e 线程、这些可能会有所帮助:

    https://e2e.ti.com/support/legacy_forums/embedded/linux/f/354/t/196935

    e2e.ti.com/.../519259

    e2e.ti.com/.../346308

    此致、
    帕维尔

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

    感谢 Pavel、

    这解决了我的问题。

    i2c-dev.h/ i2c.h 中是否有任何标志会在传输成功后自动置位? 我的意思是说 Arduino 具有Wire.endTransmission ()、 在成功传输时返回0。  


    谢谢

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

    [quote user="Adarsh Kumar"> i2c-dev.h/ i2c.h 中是否有任何标志会在传输成功后自动设置? 我的意思是说 Arduino 具有Wire.endTransmission ()、 在成功传输时返回0。  [/报价]

    这个问题不是 TI 特有的、这是一个通用的 Linux 问题。 我建议您在一些通用/主线 Linux 论坛中查看/咨询。

    此致、
    帕维尔