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.

[参考译文] PCA9518:I2C (或其他)集线器的菊花链式连接,用于创建大型树状网络的多点对点连接

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/616909/pca9518-daisy-chaining-of-i2c-or-other-hubs-for-multiple-point---to---point-connections-creating-a-large-tree-network

部件号:PCA9518

您好,

这里有一些挑战:

我正在尝试设计一个基于低成本组件和良好社区支持的大型树拓扑网络。 I2C似乎在最后两个方面都很好。

理想情况下,大量集线器将采用菊花链式,从而形成较大的树状结构。 在每个集线器之后,此段中的唯一从属设备是下一个集线器。 因此,它更像是点对点,而不是总线。 从模块将在同一项目中设计。 我设想通过向所有人发出广播呼叫并在发送的数据中使用专有寻址系统来寻址它们,以便能够寻址>112个设备。 在每个从属模块上,理想情况下最多可提供14个I2C连接(是的,一个巨大的树结构)。  

如果问题不清楚,我可以包括一些草图。

但是,集线器(例如PCA9518)的信号质量似乎取决于其传入信号,因此不能采用菊花链方式。 当树状结构中的上一个集线器降级了传入信号时,下一个模块/集线器有时无法读取传出信号。

因此,我正在寻找一种廉价而快速的解决方案来重新创建每个集线器的原始信号质量,因此,我不会因为涉及大量集线器而降低性能。 可以将一个网段中连接的从属设备的数量限制为仅一个-下一个集线器。 此外,模块之间的距离很短(ca。 20 cm ,中间有一个连接器)

我现在能想到的解决方案是在每个从属模块上使用一个廉价的微处理器,支持I2C作为中继器,以原始质量重新创建I2C信号。 然后,这些信号进入模块上的PCA9518集线器,再从该处进入下一个模块,这些模块执行相同操作。

问题是这种比特冲击解决方案可能会相当缓慢。  

那么,是否有更简单,更快速的方法来使用多个链式集线器重新创建原始清晰的信号质量? 可能通过将I2C中继器IC与PCA9518集线器IC相结合?

或者,我是否应该忘记I2C并使用位冲击或集线器,这些集线器可能是针对点对点连接的,例如SerDes,串行背板总线,IEEE1394或CAN? 或者是否值得为该任务对FGPAs进行编程?  

这可能是一个不寻常的问题,但任何帮助都将受到极大的赞赏,因为这是项目的一个基本概念问题。

此致,

Christoph

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Christoph:
    对于I2C来说,这样的大型网络一直都在运行,但它是一个相对较慢的协议,因为它是一个漏极开路的体系结构。 I2C是一种价格低廉,简单且功能强大的通信协议。 您建议连接哪些类型的从属设备以及您必须以多快的速度进行通信。 "网络"的确切含义是什么。 请向我提供有关您的申请的更多信息。
    Francis Houde
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的Francis:

    感谢您回答我的帖子。

    您可以在下面找到要求。 在计算必要的带宽后,我不确定I2C是否是正确的解决方案。 它将帮助我了解合适的接口解决方案和相关的TI IC,应用说明或其他文献。 也许我忽略了某些内容或缺少一些信息,我可以很快提供。

    我正在寻找数据传输和接口解决方案来实施以下高度可重配置的树总线设计:

    不同配置的电路板安装连接器最多可连接1000个相同的集线器模块。 每个模块总共可以容纳8个连接。 最大树深度(串联的模块)为300。 在每个模块上,本地 µC侦听总线,读取发送给它的所有数据包,然后对它们进行处理。 我 µC发送到所有模块的所有数据包,使用10位寻址(最多1024个从属设备),每个模块上的组件的成本应该在USD2-3左右,其中,n ü r大约需要USD1。

    请参阅下面的树结构方案。

     ###

    一个模块(树的根)连接至微处理器,微处理器用于接收,处理和分发树结构中所有模块的数据。

    连接是双向的,但从主微控制器(树根)传输到树中模块的数据比从模块传输到主微控制器的数据要高得多。

    让我们从从主控制器传输到树模块的数据开始:

    在大约10ms的“帧”内,中央微处理器需要向每个模块分配大约30字节的数据。

    由于模块相同且可自由重新配置,因此可以在一条线路中连接300个模块。 这意味着,每个连接的带宽和集线器延迟都需要能够维持所有1000个模块的完整数据吞吐量。

    也就是说,1000个模块x 30个字节的吞吐量加上寻址,错误检查字节等=每10毫秒大约40千字节的数据,这意味着4兆字节/秒,包括集线器延迟。

    由于树深度约为300,这意味着从输入向模块1-7输出传输40k字节的可用时间约为33µsec º(10ms /300模块深度)。 在此期间,还必须检查所有数据,以查看是否存在发送到当前模块的数据包。 然后,本地n ü µC对该数据包的数据进行处理。

    如果我假设集线器延迟占可用33 µsec的一半,并且模块之间的数据流可能占用另一时间,

    • 所需带宽约为8 MB/秒
    • 每个集线器的延迟约为17 µs。

    当然,如果集线器速度更快,我可以使用较小的带宽,反之亦然。

    由于可以菊花链方式连接的模块数量众多(最多300个),输出信号的信号质量可能不会比输入信号恶化。  

    从输入到输出连接的距离约为20 cm / 8英寸。 必要时,电气连接的数量可以超过两根电线,但串行连接比并行连接更好,因为将有许多连接器,其可靠性至关重要。

    现在,对于从树模块到主树节点的数据传输 µC:在每个10ms的帧中,最多有100个单个模块将向主微控制器发送数据,数据包大小仅为4字节,从而产生40 KB的带宽(包括集线器延迟)。

    目前,我可以想出几个办法来达到必要的速度。 请比较以下数据:

    • 使用标准总线协议和具有所需速度的标准集线器组件。 本地n ü µC使用集成总线接口连接。 但是,通常的总线(如I2C)似乎无法提供必要的带宽。 以太网似乎太贵了,µCs只有1个或2个端口,价格为2到3美元。 (见下文备选案文1)
    • 使用点对点连接和FPGA来执行集线器的工作,并检查数据包是否发送到当前模块。 然后将该数据包传输到本地 µC (备选方案2)。
    • 使用点对点连接和本地n ü µC接收,处理数据并将其输出到使用的树下连接的模块
      • 其I/O针脚
      • 或单独的收发器IC,例如SERDES功能
      • (备选案文3)
    • 使树的子部分使信号质量在网段内足够,并在该网段内使用标准总线。 由于树可以重新配置,因此在更改连接时也需要重新配置段。 根据配置,需要检测网段的限制。 这似乎很难理解,因此我不相信这种解决办法。 (因此 没有数字)

    备选案文1:

    备选案文2:

    备选案文3:

    由于双向的数据速率如此不同,我想知道使用两个速度不同的单向连接而不是一个双向连接是否有意义。

    我们高度赞赏任何解决方案的想法。 如果以简单得多的方法,可以达到较低但相若的转帐率(低至本报告所述数字的1/4),这对我来说也是很有趣的。

    谢谢,顺祝商祺!

    Christoph

     

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

    您是否考虑过将RS-485用作这些节点之间的总线接口? 许多现代RS-485收发器被指定为在通用差动总线上支持多达256个节点,数据速率可高达~50 Mbps。 听起来好像不可能有单个总线(假设您的节点数可能高达1000), 但是,如果每个模块上都有MCU,则应该相对简单地将总线划分为不同的段,并使用MCU (甚至简单的中继器电路)在它们之间桥接。

    以下是对标准的简要概述,如果您不熟悉,可用作介绍:

    www.ti.com/.../slla070d.pdf

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

    尊敬的Max:

    感谢您的回复。 即使请求可能有点不寻常,我也很感激您的回复。

    RS485听起来很有趣。 我在您的产品系列中找到了多个收发器。 我想问一下,其中是否有一个能够在一端充当总线主控器,接收来自几个从属设备(事实上是8个)的数据,而在另一端能够作为 下一个总线段中的几个从属设备之一传递这些数据。 图示如下:

      

    "菊花链式"收发器的数量是否有限制? 理想情况下,我正在寻找能够以不会出现任何信号降级的方式重新生成信号的收发器。   

    关于节点数:我了解RS485是一种电气协议,编址方案是在软件协议(如Modbus)中实施的。 在上述绘制设置中,是否可以在总线结构中任意处理节点数(>256)?

    如果没有这种类型的收发器,我将需要一些有关替代方案的信息,例如使用带有2个RS485连接的ARM处理器。 我担心使用n ü µC实现高数据吞吐量(高达50 Mbps)和低延迟会很复杂,但也许我错了。

    如果有一些关于菊花链收发器或创建深树拓扑(特别是RS485)的应用说明,我当然也会很感兴趣。

    谢谢,顺祝商祺

    Christoph

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

    是的,只要软件协议可以支持,您就可以对任意数量的节点进行寻址- RS-485作为一项标准,仅涵盖电气信号的各个方面,而不是数据协议。

    如果您的协议能够支持这样的树形结构,并且只需要收发器作为中继器来解决物理信令限制,则可以构建中继器或扇出电路。 以下是1:4扇出集线器的示例:

    www.ti.com/.../TIDA-0.1365万

    这种方法允许君主制网络使用双向半双工信令线路进行通信。 (基本上,技巧是根据数据是沿树向上还是沿树向下流动来控制驱动器/接收器启用控制。 此类半双工网络需要确保在给定信号线路上的给定时间只有一个发射器处于活动状态,以避免数据损坏。)

    需要考虑的一些限制因素是所需的"间接费用"时间。 例如,如果每个从属设备仅在主中继器发出请求后传输,则这些请求需要通过多个中继器传播到每个从属设备。 同样,返回的响应需要进入每个节点。 传播延迟本身通常相当短(除非使用长电缆),但如果在每条消息上添加额外开销来指示传输开始,传输结束,并在传输之间等待一段时间,则所有这些都会开始累加并限制总吞吐量。 不过,您可以通过协议优化此功能,例如,通过对从属设备使用顺序寻址,并通过从主设备发出的单个请求从其中的几个设备中读取数据。

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

    尊敬的Max:

    感谢您的解释。 我会更详细地研究一下,这可能是我想要的。 我只需要了解是每个树段需要一个收发器,还是每个分支需要一个收发器(每个树段需要8个收发器,因为每个树节点有8个连接)。 如果是8,可能太贵(我看到每个收发器的价格约为1美元)。 在这种情况下,我需要看看像扇出式集线器这样的部件是否可以通过更少的组件实现,例如一个FPGA或一个微控制器或类似的组件。 我只是担心这会影响吞吐量。

    还有几个问题:

    事实上,两个方向可以分开,因为两个方向的数据流是独立的(很抱歉,我之前没有提到):在我的应用程序中,当从属设备的传感器捕获事件时,它们需要发送数据。 我想他们不能说是奴隶,而是多个巴士主。 但是,这些总线用户的数据只需要在树根处读取和处理(无需编址)。 另一方面,主服务器(树根)发送的数据不需要树中总线用户的回复,而是需要发送给各个收件人。 无需确认。  

    我知道,如果总线用户想要发送数据,而另一个总线用户正在发送数据,我必须意识到某种总线仲裁/碰撞检测。 我想我需要研究总线协议算法。 我很高兴听到有人就此发表意见。

    为了避免不必要地使事情复杂化,我还同时采取一种不同的办法:通过将更多的智能注入从属模块来限制带宽。 这样,我应该能够使用带宽低于RS485的总线,例如I2C或CAN总线。 如果带宽较低,您是否仍建议使用RS485,或者是否使用不同的总线更适合实现这样的深树拓扑,例如因为集线器作为IC存在? 但在I2C下,我没有找到可读卡的集线器。 与此相关,会否有助两条分开的单向巴士,而不是一条双向巴士?   

    谢谢,此致,

    Christoph

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

    我不认为我完全理解您关于分支与树段收发器数量的第一个问题,但通常您需要在每个节点上都有一个收发器(将逻辑级别数据从MCU转换为总线信令),而只需要几个中继器节点 (仅需要尽可能多的数据,以防止任何给定的数据段通过所选收发器支持的最大节点数)。

    但是,将体系结构更改为多主机确实会改变一些事情。 RS-485作为物理层的设置不好,无法支持冲突检测或仲裁(尽管您可能会找到适合您的应用的解决方案)。 因为这可能是一个更自然的选择。 因此,面临的挑战是降低信令速率,因为CAN仅适用于高达1 Mbps (对于"传统" CAN)或~5 Mbps (对于较新的"灵活数据速率"或FD CAN)的信令速率。 某些CAN收发器可在网络上支持多达100个节点(前提是布线本身可以支持该功能),但您仍需要一些集线器或网关节点。

    以下是对CAN的出色介绍:

    www.ti.com/.../slla270.pdf

    请告诉我您还有什么问题。

    此致,
    最大