Design advice on hot-pluggable I2C bus system and connector choice - Page 1
Forum section: electronics / projects

author: sephalon
author_rank: Newbie
timestamp: March 13, 2021, 12:20:34 pm
content: Hi all,I would like to ask for some design advice on a bus system for a game I am working on right now. Sorry for the long text, but I would like to explain my requirements as detailed as possible.I have 12 module slots sized 130 x 130 x 60 mm in a large box, with half of the module slots on the front and the other half on the back of the box, each side in a 2 x 3 configuration. Due to its size, I do not want to use a PCB as backplane but use ribbon or twisted pair cables for bus wiring.Each slot connector has +5 V and +3.3 V power rails, GND lines, the bus signals (more on that later) and a 4 bit address, set via a resistor network on the backplane connector. The module will first sample this 4 bit address to select its own bus address. The game controller, which is a pluggable module as well that can be put in any free slot, then performs a bus discovery at the start of the game, by first probing all 11 remaining module slots for their module ID (there is a bunch of different module types). Besides the 12 module slots, there is a bunch of fixed (i.e. non-pluggable) bus participants (not yet sure how many, but definitely less than a dozen) as well as a power board, feeding the power rails from a battery.Modules must be hot-pluggable in the sense that it must be possible to insert/remove modules while the bus is powered. As soon as the user starts the game and the game controller finished with discovering the bus, it can be considered an error if a module is inserted/removed, however it would be beneficial (but not absolutely required) if the system is not in an undefined state afterwards.The load on the bus is very low, with packet lengths of a few bytes each. Bus activity is always triggered by human interaction, therefore limiting the bus load essentially to how fast the human operator can interact with the module controls. I need multi-master support; while the game controller will act as sole master during bus discovery, after the game has started every module must be able to report to the game controller on its own initiative.I would like to use the most simple and cost-efficient bus protocol suitable for the application, which seems to be I2C. I am aware of the fact that I2C is not really designed for long bus lengths and hot-plugging, but it seems like I could come around these limitations by putting a hot-swappable bus buffer like theTCA9511Aon every module. What concerns me a bit is section 9.2.1.2, "Multiple connections to a common node", which is a bit difficult to understand, especially since it lacks advice on mitigations. Does somebody have experience in designing hot-pluggable I2C busses and could give me some advice here if my approach is feasible, especially with a dozen of pluggable modules?If I2C is out for some reason, I would most likely go for CAN, but I have not put much thought into that yet. Or are there other good alternative bus protocols that fit me requirements?Now to the connectors: It is crucial that the module connectors survive lots of cycles (several 1000 at least) because every time you (re-)start the game, the modules will normally be replugged. As of my current understanding, I will need a staggered connector for the power pins (as illustrated in Figure 3 of "I2C Solutions on Hot Swap Applications"), otherwise the hot plugging will not work. I also would like to use two connectors, one for power and bus signals and the other one for the 4 bit address, mostly in order to make the slot mechanically more stable. Ideally, the connector would have enough retention force to hold the module in place against gravity and shacking, but I doubt this will be possible; so I likely will need to add some kind of mechanical retention mechanism later on.However I am having great difficulty in finding an appropriate connector.Samtecs Edge Ratesystem was my first choice, but there seems to be no staggered option available, or at least I cannot find it. Or should I just design my own staggered edge connector and use e.g. theirEdge Cardsystem as recipient? As of my understanding, normal edge connectors are not suitable for high-cycle applications, but maybe I am wrong here?Thanks and kind regards,Sephalon