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.

[参考译文] PCF8575:什么是读取从器件地址

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1133164/pcf8575-what-is-reading-slave-address

器件型号:PCF8575
主题中讨论的其他器件: C2000WARE

大家好、我正在开发 IO 扩展器 PCF8575的驱动程序。  该规范规定写入地址为0x40、读取地址为0x41。 但我扫描了 I2C 器件、得到的从器件地址为0x20。 如果0x20是从器件地址、则应使用哪个地址从该器件读取数据。 感谢您的帮助!

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

    您好、Crane、

    I2C 使用7位(有时为10位)地址。 数据表中的数据表似乎显示了8位版本、其中包括读取/写入位。 假设您将地址引脚连接到 GND、则器件本身的写入地址为7位0x20h、读取地址为8位0x40h、读取地址为0x41h。 这些是相同的。

    -Bobby

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

    好的。 如果它是7位地址、用于读取、是否有 单独的读取地址可供使用、或者我们只能使用与写入地址相同的地址?

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

    7位地址用于读取和写入是相同的。

    μ I²C 传输的第一个字节包含7位地址和读/写位。 这个字节通常被称为"地址字节"、但是读取/写入位不是地址的一部分。

    如果您的硬件或库只要求您指定7位地址、则使用0x20。
    如果您的硬件或库要求您指定整个字节、则使用0x40或0x41。

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

    好的。 如何知道我的硬件是否要求我指定7位地址或8位地址? 现在、当我扫描 I2C 器件时、我从使用7位地址获得了响应。 这是否意味着我的硬件只需要7位地址?

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

    我想您的扫描软件知道如何正确使用软件/硬件。

    我不知道您的驱动程序必须连接哪些软件或硬件。

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

    起重机、

    从听起来、您只需要使用7位寻址、但我不知道您使用的是哪种库或 IDE。  

    -Bobby

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

    好的。 但我尝试了7位0x20、它看起来不起作用。 我正在使用 CCS 和 C2000Ware。 用于写入和读取 I2C 的驱动程序来自 C2000Ware。  

    还有一个问题、如何将 IO 设置为输入或输出? 我没有从规格中看到它。

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

    只需添加更多信息、用于写入和读取 I2C 的驱动 程序来自 C2000Ware 中的示例。 它可以与 I2C 传感器和 I2C 开关配合使用。  

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

    是的、C2000Ware 使用7位地址。

    您能不能显示失败的 μ I²C 事务的示波器或逻辑分析仪跟踪?

    PCF8575具有准双向 I/O。 它们仅驱动低电平并弱高电平;要将其用作输入、请将其配置为输出高电平。

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

    好的、我现在看到了。 因此、当加电时、它会自动输入。 写入后、它可以根据写入的内容来改变输出、对吧?  

    但我仍然没有看到、从初始三态中、"writing 1"为高电平、或"writing 0"为高电平。 有没有任何示例可以看到写入和读取的顺序?

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

    这就是我在加电后从0x20读取时在示波器上看到的内容。

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

    第8.2.2节和图18显示1对应于高电平。

    请同时显示 SCL 和 SDA、并放大以查看时序。

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

    在这里。 它是0、与我从软件获得的相同。 但是、当我将一个或两个引脚连接到高电平(打开开关)时、读取的值不会改变。

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

    这是对地址1111111的读取。 该地址是保留的、因此没有器件应答。

    我猜 μ I²C 主器件未正确初始化或使用。 这个问题可能会在 C2000论坛中得到更好的解答

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

    好的。 我进行了一些更改、然后我得到了这个。 读数仍然为0x0000、并 在其中一个输入变为高电平时保持0x0000。

     

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

    第一个事务写入一个零字节。 这是不允许的;您必须写入16位。

    第二个事务读取三个字节。 (这对16位器件没有意义。) 我想您读取的是低输入、因为之前的写入强制引脚为低电平。

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

    明白了。  

    现在、我能够控制 IO、但当前的问题是:

    1:输出不会锁存;

    二、读数不一致;  

    如下面的屏幕截图所示、有时读数与写入相同。 有时不是、而是0。

    3、只有当 P0-P7被写入0xFF 时、我才能观察到读取值随一个输入 P12的变化而变化。

    您认为问题可能是什么?

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

    我不知道您的电路。 如果没有外部负载、您应该能够读取写入的值。

    所有引脚都应该是独立的。 当您将1写入 P12时、应该可以读取 P12。

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

    我仍在调查 P12读数问题。 但现在、最令我困惑的是这个问题:

    输出不会锁存? 当我输出高电平到 P0-P7时、LED 亮起、然后在几百毫秒后熄灭。 (示波器上的信号相反)

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

    高 µA 只能驱动100 μ A。 如果您想点亮 LED、请将其阴极驱动为低电平。

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

    好的、明白了。 它现在可以工作了。  

    但现在的读数与写入的读数不同。 读取值应与写入值相同、对吧?

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

    我不知道您的电路。

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

    这是电路。

    我测试了6种不同的场景、并获得了以下结果。 我不理解这一点、无论输出是0还是1、引脚都不能用作输入、读数始终为0。  

     

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

    您好、Crane、

    对于该器件、应将设置为输出高电平的端口视为输入(因为它们具有弱上拉偏置、外部驱动器应能够克服弱偏置)。 任何设置为输出低电平的内容都应显示为输出低电平。 (我同意第1号3和第4号)。

    如果引脚设置为输出高电平且未连接、我们应期望引脚读数为高电平(除非存在某种泄漏电流将引脚驱动为低电平)

    如果输出为高电平并连接到 GND 或任何会将引脚驱动到低于 Vcc 30%的位置、我们应该会看到其读数为低电平。

    如果输出设置为高电平并连接到任何将引脚偏置在70% Vcc 以上的引脚(如外部上拉电阻器)、则在执行读取操作后、引脚应读为高电平。  

    您是否确认您正在 I2C 线路上正确读取、并且器件是总线上唯一具有该地址的器件?  

    -Bobby

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

    因此、我想将 IO 用作输入。 我需要输出1并将开关的另一个引脚连接到接地、对吧?

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

    我确定在地址为0x20的总线上只有这个。 这是我在示波器上看到的、当我应该读取0xFFFF 时、我得到了0x40BF、有时是0x60BF、有时是0x70BF、当我连续读取时。 红色圆圈表示第一个字节中的位不正确。 绿色圆圈表示第二个字节中正确的位。

    由于16位中的8位被正确读取、我假设读取正常、问题来自硬件连接。 唯一的问题是、我在读取时看到第三个字节、该字节不应该出现在那里。   

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

    是的、您需要将 IO 设置为和输出1/HIGH。 您可以根据需要将引脚连接到连接到 GND 的开关、这是可行的。  

    器件本身将仅读取引脚的当前状态、因此需要保持开关直到您读取端口。 (它不会锁定更改、只会在读取期间读取当前状态)。  

    您能否验证器件的顶部标记?  

    -Bobby

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

    芯片 太小、现在没有放大镜、无法读取器件的顶部标记。

    不管怎样、我通过 LED 将所有16个引脚连接到5V、并且一个电阻器和所有引脚上的控制是正确的。 现在读数始终正确。 恐怕这些引脚会有某种关联。 我认为这很可能是由面包板引起的、但我不太确定。

    我观察到的一点是、当引脚 在未连接时为输出1时、读数为0、而不是1。

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

    PCF8575和 PCF8575C 之间的区别在于后者没有内部上拉电阻、即1输出将悬空、并可能会向下漂移以读为低电平。

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

    好的、那么这是有道理的。 立即清除。 非常感谢您的帮助!