0
\$\begingroup\$

I'm designing modular hardware; many modules can be plugged into different slots on the motherboard. Modules can be stacked by placing them on top of each other by mezzanine connectors. My problem is knowing which slot the modules are in and in which layer. Modules will be identical in software and hardware and can communicate with each other via SMBUS. How can I find the location of the modules and which layer they are in?

Example with identical modules:

  • MoBo Location X0Y0: 2 Modules stacked
  • MoBo Location X1Y0: No modules attached
  • MoBo Location X1Y1: 4 Modules stacked
\$\endgroup\$
12
  • 1
    \$\begingroup\$ give each motherboard connector an ID number \$\endgroup\$
    – jsotola
    Feb 2 at 20:42
  • \$\begingroup\$ Does the motherboard also contain a control unit? How many pins are still available on your connectors? \$\endgroup\$
    – Velvet
    Feb 2 at 20:42
  • \$\begingroup\$ @jsotola modules have connectors but they are identical in software and hardware. I can communicate by SMBUS with all the modules(different slots also included) so how can I be sure of the location? \$\endgroup\$
    – devscg
    Feb 2 at 20:46
  • \$\begingroup\$ @Velvel I have SMBUS and SWD pins of STM32 on the connector, I can use SWD pins for alternate functions. \$\endgroup\$
    – devscg
    Feb 2 at 20:47
  • 1
    \$\begingroup\$ What do you have and what can you alter? You need a way to address each slot separately and each layer in the stack. How to do that or if it is already impossible depends how much this feature requires extra pins or extra chips on motherboard or each module. How do you even communicate with any module, if they all are identical, i.e. share the same address? Also why is it important to know which module is at which location if they are all identical? \$\endgroup\$
    – Justme
    Feb 2 at 20:54

2 Answers 2

0
\$\begingroup\$

Use something like this to detect module stack position.

The logic high signal will be at a different pin for each module in the stack.

schematic

simulate this circuit – Schematic created using CircuitLab

\$\endgroup\$
1
  • \$\begingroup\$ I can use smbus and swd pins only on the connector which means I can use 2 pins with alternate function. \$\endgroup\$
    – devscg
    Feb 3 at 18:05
0
\$\begingroup\$

You can to set aside a few pins on each stacking connector on the mainboard to binary encode the connector number.

These pins are read by the module and could be requested over SM-bus. This only numbers the slot on mainboard, and the module knows it is on lowest position in this connector.

To sort out modules stacked on modules one could think of a 1-wire daisy chain communication between stacked modules where the lowest in stack tells the next one "you are on mainboard slot x, and I am the first sitting here". This module tells the next one "slot x, I am No. 2" and so on.

If you can have 1 routable pin to each slot, also the slot assignment could be done with just using 2 pins on each connector... 1 pin for incoming, another for outgoing.

Do you need hot-plugging?

\$\endgroup\$
2
  • \$\begingroup\$ Thank you for the answer! I can do daisy chain by using 1 pin for each slot but it is not convenient to trust and wait other modules answers, some modules can be busy or corrupted. So the solution must work independently from other modules. Also, I need to route 30 pin to an MCU on the MoBo. I can use smbus and swd pins only on the connector which means I can use 2 pins with alternate function. So that I cant use binary encoded connector number by setting few bits \$\endgroup\$
    – devscg
    Feb 3 at 18:04
  • \$\begingroup\$ You could use a multiplexer (probably controlled over I2C) so only 1 extra pin on the CPU. \$\endgroup\$
    – datenheim
    Feb 3 at 19:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.