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.

[参考译文] TCA9535:未检测到 I2C GPIO 扩展器器件- Linux 主机

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1164566/tca9535-i2c-gpio-expander-device-not-detected---linux-host

器件型号:TCA9535
主题中讨论的其他器件: PCA9535

请查看以下为该案例提供的更多信息:

您好!
如数据表中的应用手册所述、使用 TCA9535和 PCA9535时、i2c 总线上无法识别器件。 我使用 Linux 作为主机控制器。 我已经使用示波器验证了线路是否有活动。 我还验证了其他非 TCA9535 i2c 器件在置于线路上时的功能。 您对如何解决此问题是否有任何建议? 我在 SDA/SCL 上有10k 上拉电阻器。 我将 A0 A1 A2全部接地(0x20地址)。 引脚12至接地24至 VCC 3.3V

我尝试使用"i2cdetect -y 2 0x20"。 我还使用 i2c_smbus_***接口编写了一个 C 应用程序,该接口是 i2c-tools/i2c/libi2c-dev.h Linux 库的一部分,无法读取/写入设备的字节。 我还尝试了"i2cget 2 0x20 0x00"和"i2cset 2 0x20 0x00"。

有关如何继续调试此问题的任何建议?

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

    您好、Greg、

    我们的 TCA 器件需要通过写事务来设置器件中的指针、然后才能响应 I2C 读取(例如 I2CDetect、因为这些通常是读取事务)。  

    您需要写入 TCA9535以设置要从中读取的寄存器/指针、然后它才会应答任何类型的读取事务(如 I2CDetect)。

    -Bobby

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

    我尝试在 C 应用程序中使用 Linux 文件 Read()和 write()函数以及 i2c_smbus_write_data_Byte()函数写入器件,但写入失败。 C errno 报告"无此类设备或地址"。

    当我尝试使用 Linux 命令行发出"i2cset -y 2 0x20 0x00 0x00"时、我从器件获得"写入失败"。 我已验证其他器件在同一线路上工作。 我还尝试了多个不同的模块。 如果成功、我会尝试 i2cget -y 0x20 0x00、因为我假设我刚刚命令它加载寄存器0x00以进行所有连续读取。


    另一个详细信息:我不知道会尝试从器件读取什么寄存器"i2cdete"、数据表仅记录寄存器0x00至0x07、这些寄存器用于输入、输出、配置和极性。 因此、在发出 i2cdetect 之前、我不知道"i2cset"的寄存器是什么。 无论如何、写入任何0x00-0x07寄存器也会失败。


    是否可能需要为 Linux 更改设备树设置才能使用此设备? 作为参考、我运行的是内核5.15.15和 Ubuntu 20.04

    我运行的是400kHz I2C


    谢谢、

    Gary

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

    Gary、

    您是否能够发布 TCA 器件无法通信的原理图以及写入时的范围?

    -Bobby

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

    感谢您的回复 Bobby、

    在示波器中、如果我没有错的话、我看到主器件发送起始条件后跟随地址、但我没有从器件中得到任何响应。 我怀疑器件运行不正常、但我尝试了几种不同的芯片、并验证了分线板上的无短路、连接良好、因此我想了解可以进行哪些操作以及它是否可以与 Linux 相关。 我尝试了100k 和400k 频率。




    请注意、下面两个是 "i2cset -y 2 0x20 0x00 0x00"的结果
    蓝色表示时钟黄色表示 sda。
    请注意、频率应设置为100kHz




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

    另一个注意事项是、在将命令写入0x00时、我注意到了中断引脚上的这一活动、我不知道这是否正常、我已经在 int 行中添加了一个上拉电阻器:

    注意每分频50us、时钟应为100kHz







    供参考我焊接了一个新芯片、写入期间的瞬态降低似乎不再出现、不确定这是什么。

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

    嗨、Greg、

    感谢您提供更多信息。

    我看了原理图、一切看起来都很好。 您的引脚与数据表匹配、SDA/SCL 网络与 SDA/SCL 引脚匹配、存在上拉电阻器、并根据示波器快照看起来很好。 I2C 写入事务对我来说也是有效的、您发送了起始条件、后跟地址0x20h 和写入操作、但您在第9位收到了一个 NACK。  

    对我来说、您似乎已经正确完成了所有工作。  

    您能告诉我器件顶部的顶部标记代码是什么?  

    您能否使用示波器探针验证 Vcc 引脚是否已通电?  

    TCA 器件的 SDA/SCL 引脚和 I2C 控制器之间是否有任何关系? (可能像电平转换器?)  

    -Bobby