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.

[参考译文] TCA9548A:TCA9548A、无通道开关、具有 I2C 频率<100KHz

Guru**** 2393725 points
Other Parts Discussed in Thread: TCA9548A, LDC1614, LDC1614EVM

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1107817/tca9548a-tca9548a-no-channel-switching-with-i2c-frequency-100khz

器件型号:TCA9548A
主题中讨论的其他器件: LDC1614LDC1614EVM

大家好、

我发现 TCA9548A 设置有一个非常奇怪的问题:

-我可以按预期读写控制寄存器,已经在10kHz - 400kHz 的时钟范围内进行了测试。

-这里有趣的部分:只有当时钟频率为100kHz 或更高时、通道切换命令才会选择请求的通道、
 我已经用10kHz、90Khz、100kHz 和400kHz 测试了这个。

示例(基于 clk 90Khz):

1) 向控制寄存器写入1。

2) 按预期读回控制寄存器返回1的 vale。

3) 无法与通道1通信。

示例(基于 clk 100kHz):

1) 向控制寄存器写入1。

2) 按预期读回控制寄存器返回1的 vale。

3) 使用通道1进行通信。

我已使用示波器进行了仔细检查、以下几点正常:

-在 I2C API 中选择波特率

-完全绕过 TCA9548A、MCU 直接连接到 I2C 从器件。 无论 clk 频率如何、都不会发现任何问题。


任何想法都非常感激。

此致

Jo

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

    我已执行的其他测试:

    1) 1)选择 I2C 主器件波特率100kHz。

    2) 2)选择 TCA98548A 通道1

    3)将 I2C 主设备波特率更改为10kHz。

    4) 与从属设备建立通道1通信。

    一切都好。 关于报告的问题、我已经针对不同供应商的芯片进行了测试-没有区别。

    此致、
    Jo

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

    你好、Jo、

    您能否在90kHz 时包含一些您的写入范围截图? 只需确认通道是否已实际启用、您是否能够在另一侧看到 I2C 通信或保持高电平?

    您能否包含您的设置原理图?

    最棒的

    Chris

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

    您好 Chris、

    感谢您的反馈。

    我可以提供示波器照片、但只有从初级侧(MCU 和 TCA9548A 之间的总线段)提供90Khz 测试用例、
    因为通道侧没有可用的信号-探测 SDA 和 SCL 不显示任何信号。

    在初级侧、它对我来说是完美的-无论波特率设置如何、我都可以更改控制寄存器字节。

    在阅读数据表时、我感觉控制寄存器确实直接反映了多路复用器的物理状态
    通道状态。 但它看起来所有通道都已禁用、就好像器件在上电后会输出、尽管有控制寄存器值
    建议使用其他方法。

    关于原理图、我无法提供详细的原始文档-请说明是否简化了(方框图样式)原理图
    将在当前阶段帮助您的支持团队。

    今天、我创建了一个新的测试用例、它在硬件方面与原始设置更加隔离。 测试结果完全正确
    同样、问题也会重现。

    -将 MCU I2C 主设备连接到 Adafruit TCA9548A 分线板、同一 MCU 板、但未组装 TCA9548A 部件。
    - SCL0和 SDA0线(通道0)连接到传感器目标板的一个通道。 对于该测试用例、有7个通道
     我仅使用了1个通道。 每个通道在地址0x2A 和0x2B 上与2个 TI LDC1614器件通信。
    -上拉初级侧(MCU 板) 4k7和通道侧(传感器板) 2k2。
    -所有逻辑 VDD 3.3VDC。

    当使用 I2C 时钟发出 TCA9548A 控制寄存器写入时、连接了全部7个通道的整个传感器板工作正常
    100kHz 而不是90Khz。

    目的是以100kHz 的频率运行生产单元、因此降低 I2C 速度的测试用例现在不是门限位器。
    不过,我担心一些潜在的问题会在周围出现,也许永远不会出现或稍后出现,所以我并不是很严重
    深信让它在该阶段用于生产目的。

    此致、
    Jo

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

    尊敬的 Chris:

    明天回到工作岗位、我可以安排一个新的测试用例、在硬件方面甚至与原始设置更加隔离:

    让 MCU 主设备与 TI LDC1614 EVM 板通信、其中中间有 TCA9548A。 我在办公室周围安装了此类 EVM 板、
    已知处于工作状态。 我将通过3.3VDC 从 MCU 目标板为 EVM 供电。

    此类测试应清楚地表明传感器目标板是否是问题的一部分。

    此致、
    Jo

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

    尊敬的 Chris:

    器件数据表第一页显示支持的 I2C 速度为0..400kHz。

    更进一步、仅提及2种标准模式(100kHz 和400kHz)。

    您能不能确认通道选择在非标准 I2C 时钟速度下是否可靠工作?

    此致、
    Jo

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

    尊敬的 Chris:

    我不是试验电路板的粉丝、因此我已经焊接了一个小型适配器原型板、该板托管 TI LDC1614 EVM 板和 Adafruit
    TCA9548A 板并连接到目标 MCU 板。 这是照片左侧的电路板、通常插入到中
    大得多的传感器板(未显示):

    因此、通过这种设置、具有13个 LDC1614器件的传感器板将从公式中取出、从而进一步减小
    硬件依赖性。 所有4个上拉电阻器2k2。  

    测试结果:相同问题。 与 LDC1614的通信以大约91Khz 的时钟速度开始工作。 以及低于该值的时间
    I probe 具有示波器次级 SCL 和 SDA 线路、我看到的所有内容都是非常干净的3.3VDC 电平。

    您是否仍然希望我在初级侧90Khz 测试模式上提供 SLC 和 SDA 波形?

    我个人认为 TDA9548A 芯片(至少是 Adafruit 板上的型号)的设计简单、最低频率为100kHz
    以确保正常工作。 如果这不是真的、请告诉我。

    感谢您的支持、谢谢。

    此致、
    Jo

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

    你好、Jo、

    我将通读所有这些信息、并在明天返回给您。

    最棒的

    Chris

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

    你好、Jo、

    我将在实验中测试这个、我能够找到合适的器件。 同时、您能否发送一份失败 I2C 通信的示波器截图。 此器件没有最低 I2C 速度。 该器件基于内部状态机工作、仅在检测到下一个时钟脉冲时使状态机递增。 因此、只要时钟脉冲正确对线、您就可以使用所需的任何速度。

    最棒的

    Chris

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

    您好 Chris、

    很好的支持、尝试复制我的测试结果。

    我的问题是、就目前而言、我没有看到 I2C 通信在任何时候发生故障、否则我会怎么做
    以任何时钟速度读回之前写入的控制寄存器? 这意味着必须有来自 I2C 器件的 ACK (或 NACK)。

    此致、

    Jo

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

    你好、Jo、

    您说的

    [~用户 id="356511" url="支持/interface-group/interface/f/interface-forum/1107817/tca9548a-tca9548a-no channel-switching-with i2c-frequency-100kHz/4106394#4106394)]测试结果:相同的问题。 与 LDC1614的通信以大约91Khz 的时钟速度开始工作。 以及低于该值的时间
    我使用示波器次级 SCL 和 SDA 线进行探测、我看到的所有内容都是非常干净的3.3VDC 电平。[/QUERP]

    这意味着、在91kHz 下、您的控制器器件(以前称为主器件)无法正确发送 I2C 数据? 还是数据仍然能够发送、但 TCA9548A 无法正确解码信号以更改内部控制寄存器。

    最棒的

    Chris

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

    尊敬的 Chris:

    这正是我不理解的- MCU 板(I2C 主设备)能够通过寻址与 TCA9548A 模块通信
    并成功更新了控制寄存器。 在任何时间以任何时钟速度运行-在10kHz 至400kHz 之间进行测试、无问题。

    只有多路复用器引擎对时钟很挑剔、低于91Khz 时、它根本不会切换任何内容。 (就像器件仍处于复位状态一样、
    这意味着所有通道看起来都与初级侧断开连接)。

    此致、
    Jo

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

    为了更加精确、我打算使用器件通道0 -这是与 LDC1614EVM 的通道连接、正如我在上一个测试设置中所说的那样。
    我尚未测试其余 通道。 但是、在将"1"写入控制寄存器(并成功回读)后、我必须假设是这样
    通道0应该是选定的通道-这里没有其他逻辑选择、因此我省略了使用最后的测试设置来测试所有通道。

    在实际应用中(组装有13个 LDC1614器件的传感器板)、只要时钟速度>= 91Khz、7个通道就能完美工作。

    此致、
    Jo

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

    尊敬的 Chris:

    也许值得一提的是我之前没有提到过的另一个技术细节:

    Adafruit 模块的复位引脚上拉至 VCC、 在我的上一个测试设置中、我没有尝试
    微控制器将其拉低一小段时间、以实现干净的复位。

    但是、我使用生产 MCU 控制器板执行了该操作、TCA9548A 的复位引脚被拉取
    10k 电阻器、还连接到 MCU 引脚以进行复位。

    我可以告诉大家、报告的测试用例没有差异、是否在上电后再次复位 TCA9548A。

    一般而言、我的测试结果没有随机性-使用100kHz 时钟、所有测试设置(生产和生产)
    简化的设置)运行了几个小时、没有单一的干扰或挂起、我已经尝试过几次了
    都是稳定的。 (生产传感器板始终通过七个多路复用器通道快速切换
    100kHz 时钟-未观察到任何问题)。

    使用90Khz 时钟时、多路复用器切换通道完全不起作用-始终可重复。

    此致、
    Jo

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

    你好、Jo、

    我将芯片焊接到分线板上、明天我将能够在实验室中对其进行测试。 如果您无法提供任何示波器截图、您至少可以告诉我您将向芯片发送哪些代码、以便我复制您的测试设置。

    最棒的

    Chris

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

    你好、Jo、

    我今天在实验室中测试了芯片、并使其能够在低至10kHz 的频率下工作。 我想此时我需要看到一些示波器截图、以便能够为您提供帮助。

    您能否以90kHz 的频率发送写操作的示波器截图? 然后、如果您有4通道示波器、您可以发送随机 I2C 写入的示波器快照、通过两个探针探测 SDA 和 SCL 通道。 然后在另外两个探针上探测 SD0和 SC0通道。 我想看看当您降低速度时、您的驱动器会发生什么情况。

    最棒的

    Chris

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

    您好 Chris、

    非常感谢您的测试、很抱歉耽误您的回复。 准备好后、我将按照第二个已组装 PCB 的要求继续进行测试、
    另一个已经在产品原型测试中、因此需要一段时间-我将告诉您。

    此致、
    Jo

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

    您好 Chris、

    在准备示波器探测时、还有一些想法/问题:SD0和 SC0在我的测试中是高电平(3.3VDD)、此时主时钟为90Khz、即使 TCA9548控制寄存器读回后显示为"1"。 在此时钟速度下、我在无限循环中进行写入/读取以进行测试:

    -主机将"1"写入控制寄存器   =>确定
    -主器件从控制寄存器读回"1"=>确定
    -主器件尝试读取 LDC1614器件的配置寄存器、连接到 SD0和 SC0 =>如果 f clk <91Khz、这里的循环停止、否则正常  
    -等待10ms
    -再次循环。

    我担心在 SD0和 SCO (对于 f clk <91Khz)上、除了始终显示高电平之外、我不能显示任何活动-或者您是否希望我使用100kHz 主时钟开始测试、然后动态降低测试速度?

    此致、
    Jo

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

    它可能有助于显示用于控制寄存器写入和以下回读的 SCL/SDA/SC0/SD0。 (理论上、Sx0对于后者应该是有效的。)

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

    您好 Chris、

    我对浪费时间深表歉意-在向 TCA9548A 写入控制寄存器和从 LDC1614读取寄存器之间出现6 us 延迟后、报告的问题消失了。

    这里有一张控制寄存器写入"1"@90Khz clk 的照片

    此致、

    Jo

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

    不需要延迟。 但是、没有延迟的访问是否可能不会产生停止条件?

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

    可能的话、我必须检查我正在使用的 Atmel AVR I2C 库。

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

    不过、它不是位拆裂、我使用的是 MCU 密钥

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

    lib 轮询停止条件-很有可能它永远挂起、而没有超时延迟

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

    lib 通过设置密钥 I2C 控制寄存器中的相关标志来发出开始和停止条件。 可能在停止条件和下一个启动条件之间存在时序要求

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

    Jo、

    不用担心浪费时间、这就是我在这里的目的。

    我不记得您是否已经完成了此测试、但是如果您断开 LDC1614与 TCA9548A 的连接并 保持上拉电阻、那么当您不使用延迟时、您是否会在 TCA9548A 的另一侧看到数据。

    如果 TCA9548A 能够正确读回已选择的通道、则它只是处于该状态的 PassFET、一端的任何信息都应传播到另一端。 除非通道尚未开启、否则 TCA9548A 无法通过该通道发送数据。 如果您能够正确地读取已选择的通道、我对此表示怀疑。

    我认为您在上面所说的更有可能是、当您尝试在没有延迟的情况下发送另一条命令时、您所使用的库永远不会发送停止位、但我仍然希望地址字节至少能够传播。 在发送读取命令时是否通过任何数据。

    最棒的

    Chris

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

    尊敬的 Chris:

    我将尽快执行该附加测试-感谢您的深入调查。

    我很少使用 I2C、因此我对该协议的了解非常基本。 我在 I2C 中找到的内容
    有关时序限制的规范是、时序至少在遵循规范的情况下取决于总线速度
    实例:

    100kHz 时的总线空闲时间(停止和下一次启动之间的最小时间):~4.7us、但在400kHz 时为1us。
    在10kHz 时、可能会更长。 我认为我违反了这一限制。

    对库进行代码检查后、我确信 I2C 事务可以在许多地方挂起、因为没有
    实现超时。 基本而言、库正在启动 启动/停止条件、正在操作 MCU 中的一些标志
    I2C 控制寄存器。 之后、库只轮询这些标志、等待将指示的切换
    MCU 已接受启动或停止条件。 可能是那里出现了问题、为了进一步调查、
    我可能需要检查状态寄存器的每个错误代码。

    此致、
    Jo

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

    只需显示旧代码的示波器迹线。 (一个停止条件是在 SCL 为高电平时 SDA 上的上升沿。)

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

    将使用逻辑分析仪实现它。

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

    尊敬的 Chris:您好、Clemens。

    我想分步执行、并按照我的简化硬件测试设置设置来设置逻辑分析仪、如之前发布的照片所示。
    (MCU <=>TCA9548A <=>LDC1614)。

    LA 连接至 SCL、SDA、SD0、SD1

    对于测试、我没有执行任何 LDC1614访问、只需使用 TCA9548A 控制寄存器写入/读取即可。

    奇怪(或可能正常)观察:

    之间无延迟的写入/读取(由用 C 语言编写的 I2C API 引起的除外):SD0、SC0上无活动
    写入/读取之间增加了大约25us 的延迟、然后在 SD0、SC0上进行活动:

    此致、

    Jo

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

    LA 表明访问之间没有停止条件("P")。

    显然、当发生以下 μ I²C 事务时、您的 μ I²C 软件(或硬件)会自动忽略停止。 这是 μ I²C 规格允许的、但对 TCA9548A 没有帮助。 您使用的是哪个库?

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

    它是一个旧的爱特梅尔(Microchip) AVR 图书馆、称为 Fleury TWI 图书馆

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

    在我的包装函数下面、直接调用库函数。 我不知道有什么重复
    条件、但我将检查库的 Asap。

    uint8_t readControlRegister (uint8_t i2cAddr)

    uint8_t 结果= 0;
    startTwi (i2cAddr、tum_read);
    result=readNackTwi();
    stopTwi();
    返回结果;

    空 writeControlRegister (uint8_t i2cAddr、uint8_t val)

    startTwi (i2cAddr、tulm_write);
    writeTwi (val);
    stopTwi();

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

    在写入/读取之间有一个长延迟为25us 的迹线中有一个"P"。  
    那么、另一种情况违反了最小总线空闲时间、可能是这样吗?  

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

    您好!

    这个问题现已修复-我正在使用的库代码中有一个错误、在发出停止条件时轮询错误的标志。
    当然、原始库不会出现这种情况、但我将对其进行仔细检查。

    此致、
    Jo

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

    非常感谢您的检查。

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

    很高兴听到 Jo 的讲话。 如果您需要其他信息、请告诉我。

    最棒的

    Chris