Hi,
A bit of a challenge here:
I am trying to design a large tree topology network based on low-cost components and good community support. I2C seems generally good for the last two aspects.
Ideally, a large number of hubs would be daisy-chained, resulting in a large tree structure. After each hub, the only slave device in this segment is the next hub. So it is rather point-to-point than a bus. The slave modules will be designed in the same project. I envisage addressing them by a broadcast call to all and using a proprietary addressing system in the sent data, in order to be able to address >112 devices. On each slave module, ideally up to 14 I2C connections would be available (yes, a massive tree structure).
If the problem is not clear, I can include some sketches.
It seems however that the hubs, for instance PCA9518, produce signal quality that depends on their incoming signal, and can therefore not be daisy chained. When the incoming signal has been degraded by a previous hub in the tree structure, at some point the outgoing signal will not be readable for the next module/hub.
Therefore, I am looking for a cheap and fast solution to recreate the original signal quality with each hub, so I do not get degradation with the large number of hubs involved. It is possible to limit the number of connected slaves in one network segment to only one - the next hub. Furthermore, the distances between the modules are short (ca. 20cm with one connector in between)
The solution I can think of at the moment is using an inexpensive microprocessor at each slave module supporting I2C as a repeater, recreating I2C signals with original quality. These signals then go into PCA9518 hub(s) on the module, and from there on to the next modules, which do the same.
The problem is that this bit-banging solution would probably be quite slow.
So, is there any simpler, faster possibility to re-create clean, original signal quality with multiple chained hubs? Maybe by combining a I2C repeater IC with PCA9518 hub ICs?
Or should I forget I2C and use bit-banging or hubs with other interfaces possibly geared towards point-to-point connections, such as serdes, serial backplate buses, ieee1394 or CAN? Or is it worth programming FGPAs for the task?
It might be an unusual question, but any help would be very much appreciated, as it is a basic conceptual question for the project.
Best regards,
Christoph