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.

[参考译文] TDA4VMXEVM:USER_LED1 &USER_LED2通过 I2C GPIO EXPADER2 (TCA6424ARGJR)

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/883721/tda4vmxevm-user_led1-user_led2-through-i2c-gpio-expander2-tca6424argjr

器件型号:TDA4VMXEVM

您好!

我使用的是 TDA4 EVM。 在通用处理器板中、有2个用户 LED。  

令人困惑的部分是 I2C0、它控制此扩展板、也连接到其他 IC。  

请指导我如何切换 LED?

谢谢、此致、

Gurudath

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

    您好!

    控制用户 LED 的 i2c 扩展器位于总线 i2c0和芯片地址0x21

    这可以使用 i2cset 命令来完成

    LED 连接到引脚 P26和 P27

    此致、

    Nikhil D

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

    您好 Naveen、

    感谢您的回答。 在 I2C 命令说明中、我找到了以下警告。 那么、您能否为 USER_LED1提供 i2cset 命令格式? :

    警告

    如果使用不当、i2cset 会非常危险。 它可能会混淆 I2C 总线、导致数据丢失或产生更严重的副作用。 写入内存 DIMM (芯片地址在0x50和0x57之间)上的串行 EEPROM 可能会破坏内存,使系统无法引导! 使用此程序时要格外小心。

    谢谢你。

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

    请查看 i2cset 的帮助和手册

    例如 i2cset --help 或 i2cset -h 应该会提供该值。

    通常如下所示:

    i2cset -f -y

    您需要为要写入的芯片确定地址和值。

    有关寄存器的详细信息、请参阅 TRM、查看 GPIO 扩展器的数据表。

    此致、

    Nikhil D

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

    您好、Nikhil、

    我尝试使用以下命令在 P26上打开 LED1:

    i2cset -y 0 0x21 0x06 0xBF  

    但我得到了"写入失败"作为响应。

    然后、我尝试使用以下命令将 P26的配置更改为输出:

    i2cset -y 0 0x21 0x0E 0xBF  

    然后、我还得到 了"写入失败"作为响应。

    我尝试使用以下命令读取 i2c 寄存器值:

    i2cget -y 0x21 0x06

    我收到"读取失败"的响应。

    因此 i2c 无法正常工作。 原因可能是什么?如何进行调试?

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

    您忘记了-f 参数

    此致、

    Nikhil D

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

    即使使用-f 参数、我也会得到相同的结果。

    原因可能是什么?如何进行调试?

    如果我执行"i2cdetect -l "、则会列出 i2c0。

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

    即使使用-f 参数、我也会得到相同的结果。

    原因可能是什么?如何进行调试?

    如果我执行"i2cdetect -l "、则会列出 i2c0。 以下是输出,其中未列出0x21:

    i2cdetect -y 0
    警告:无法使用 SMBus 快速写入命令、将跳过一些地址
        0 1 2 3 4 5 6 7 8 9 A b c d e f
    00:                                                 
    10:                                                 
    20:                                                 
    30:------------ ------                         
    40:                                                 
    50:50 51 ---------- ------------ ----------
    60:                                                 
    70:  

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

    尝试 i2cdetect -r -y 0

    理想情况下、i2cdetect 应首先显示器件以地址栈进行响应。

    您的器件需要首先显示。 这将确认地址正确。

    此致、

    Nikhil D

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

    即使这样、它也会提供相同的结果。

    i2cget、i2cset 失败。

    是否有可能要求进一步澄清? 这可能会加速解决方案。 征求您的意见。

    谢谢、此致、

    Gurudath

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

    您好 Gurudath、

    尝试"i2cdetect -r -y 3"
    这是 MAIN_i2c0、还有其他 MCU/主 i2c、得到数字0、1和2。 因此、主 i2c 编号从3开始。

    GPIO 扩展器也位于地址0x22上。 EVM 通用处理器板 原理图的代码段 如下所示。




    以下命令用于 EVM 切换 LED、

    i2cdetect -r -y 3.
    i2cset -f -y 3 0x22 0x06 0xBF
    i2cset -f -y 3 0x22 0x0E 0xBF



    此致、
    Vishal

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

    我尝试了建议的命令。 我现在没有获得"读/写失败"状态。 但是 LED 不闪烁。

    我有2个问题:

    如同一原理图文档中所述、该表显示了器件地址为0x21。 哪一个是正确的?

    2.正如我在另一篇文章中提到的,  

    我们如何将数据表中提到的从器件地址包括在内?  

    如果尚未为此 ASIC 准备好命令、我可以编写 C 函数。 请进一步指导。

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

    原理图中似乎存在错误。

    您可以在运行时检查 LED 的正确地址

    i2cdetect -r -y 3 #This 将显示0x22处的器件

    GPIO 扩展器数据表 http://www.ti.com/lit/ds/symlink/tca6424a.pdf

    您可以运行以下操作来查看它与器件 TCA6424ARGJR 具有相同的寄存器映射

    i2cdump -f -y 3 0x22

    您可以通过将位设置为0来设置 P26和 P27的输出方向

    Val=`i2cget -f -y 3 0x22 0x0E`

    Echo $val

    Val=`printf 0x%x $(($val & 0x3f))` #掩码第6位和第7位以将其设置为零

    Echo $val

    i2cset -f -y 3 0x22 0x0E $val

    类似地、将输出值设置为高电平

    Val=`i2cget -f -y 3 0x22 0x06`

    Echo $val

    Val=`printf 0x%x $(($val & 0x3f))` #掩码第6位和第7位以将其设置为零

    Echo $val

    i2cset -f -y 3 0x22 0x06 $val

    希望这对您有所帮助。

    此致、

    Nikhil D

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

    您好、Nikhil、

    这解决了我的问题。 总之、在之前的尝试中有2个错误

    1. 如原理图表中所述、I2C 器件地址为0x21。
    2.  I2C 总线编号用作0、因为原理图中提到了 i2c0。 在实际 i2c 总线列表中、没有将其映射到3的附加信息。

    请您在下一版原理图中记下此信息的更正。

    非常感谢您的支持。

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

    您好!

    是的、将更新原理图表以反映正确的地址。
    关闭此主题。

    此致、
    Vishal