This is the module detection documentation for the Pimoroni Yukon, a high-power modular robotics and engineering platform, powered by the Raspberry Pi RP2040.
Yukon detects which modules are attached to it by reading the state of each slot's ADC and SLOW IO pin prior to module initialisation and power-up. This forms an "address" that is used to verify that the module attached to a slot matches what the code has been configured with, preventing unexpected or potentially dangerous behaviour.
Below are the states that the two ADC pins and three SLOW IO pins support.
Pin | States | Disconnected State |
---|---|---|
ADC1 | LOW or FLOAT or HIGH | FLOAT |
ADC2 | LOW or FLOAT or HIGH | HIGH (due to thermistor 5.1k pull-up) |
SLOW1 | LOW or HIGH | HIGH (due to IO expander pull-up) |
SLOW2 | LOW or HIGH | HIGH (due to IO expander pull-up) |
SLOW3 | LOW or HIGH | HIGH (due to IO expander pull-up) |
Also shown is the state these pins will have if they are left disconnected, such as when a slot is empty. This "address" should be avoided by any custom module.
If a module does not have a single state it can start in, or it retains a state from a previous power-up, then it will need to be assigned multiple addresses. All modules that feature an onboard thermistor automatically take up three addresses minimum to account for the different temperatures the sensor can read during detection. Similarly, any modules that expose an ADC pin to the user will automatically require addresses to cover the full voltage range of that pin, with the worst case being 9 addresses if both ADC1 and ADC2 are user accessible.
Here is the current address list for Yukon modules produced by Pimoroni.
>ADC1 | ADC2 | SLOW1 | SLOW2 | SLOW3 | Module | Condition (if any) |
---|---|---|---|---|---|---|
LOW | LOW | 0 | 0 | 0 | Quad Servo Direct | A1 low, A2 low |
FLOAT | A1 low, A2 mid | |||||
HIGH | A1 low, A2 high | |||||
FLOAT | LOW | A1 mid, A2 low | ||||
FLOAT | A1 mid, A2 mid | |||||
HIGH | A1 mid, A2 high | |||||
HIGH | LOW | A1 high, A2 low | ||||
FLOAT | A1 high, A2 mid | |||||
HIGH | A1 high, A2 high | |||||
LOW | LOW | 0 | 0 | 1 | Big Motor + Encoder | No Fault |
FLOAT | ||||||
HIGH | ||||||
FLOAT | LOW | 0 | 0 | 1 | ||
FLOAT | FLOAT | 0 | 0 | 1 | ||
FLOAT | HIGH | 0 | 0 | 1 | ||
HIGH | LOW | 0 | 0 | 1 | Dual Motor | |
FLOAT | ||||||
HIGH | ||||||
LOW | LOW | 0 | 1 | 0 | ||
LOW | FLOAT | 0 | 1 | 0 | ||
LOW | HIGH | 0 | 1 | 0 | ||
FLOAT | LOW | 0 | 1 | 0 | ||
FLOAT | FLOAT | 0 | 1 | 0 | ||
FLOAT | HIGH | 0 | 1 | 0 | ||
HIGH | LOW | 0 | 1 | 0 | Quad Servo Regulated | Power Not Good |
FLOAT | ||||||
HIGH | ||||||
LOW | LOW | 0 | 1 | 1 | Big Motor + Encoder | Faulted |
FLOAT | ||||||
HIGH | ||||||
FLOAT | LOW | 0 | 1 | 1 | Audio Amp Mono | |
FLOAT | ||||||
HIGH | ||||||
HIGH | LOW | 0 | 1 | 1 | Quad Servo Regulated | Power Good |
FLOAT | ||||||
HIGH | ||||||
LOW | LOW | 1 | 0 | 0 | Bench Power | Output Discharged |
FLOAT | ||||||
HIGH | ||||||
FLOAT | LOW | Output Discharging | ||||
FLOAT | ||||||
HIGH | ||||||
HIGH | LOW | 1 | 0 | 0 | ||
HIGH | FLOAT | 1 | 0 | 0 | Reserved | |
HIGH | HIGH | 1 | 0 | 0 | Serial Bus Servo | |
LOW | LOW | 1 | 0 | 1 | Reserved | |
LOW | FLOAT | 1 | 0 | 1 | RM2 Wireless | |
LOW | HIGH | 1 | 0 | 1 | Reserved | |
FLOAT | LOW | 1 | 0 | 1 | Dual Switched Output | |
FLOAT | ||||||
HIGH | ||||||
HIGH | LOW | 1 | 0 | 1 | ||
HIGH | FLOAT | 1 | 0 | 1 | ||
HIGH | HIGH | 1 | 0 | 1 | ||
LOW | LOW | 1 | 1 | 0 | ||
LOW | FLOAT | 1 | 1 | 0 | ||
LOW | HIGH | 1 | 1 | 0 | Proto Potentiometer | Min Position |
FLOAT | LOW | 1 | 1 | 0 | ||
FLOAT | FLOAT | 1 | 1 | 0 | ||
FLOAT | HIGH | 1 | 1 | 0 | Proto Potentiometer | Between Min and Max |
HIGH | LOW | 1 | 1 | 0 | ||
HIGH | FLOAT | 1 | 1 | 0 | Reserved | |
HIGH | HIGH | 1 | 1 | 0 | Proto Potentiometer | Max Position |
LOW | LOW | 1 | 1 | 1 | LED Strip | |
FLOAT | ||||||
HIGH | ||||||
FLOAT | LOW | 1 | 1 | 1 | ||
FLOAT | FLOAT | 1 | 1 | 1 | ||
FLOAT | HIGH | 1 | 1 | 1 | Empty Slot | |
HIGH | LOW | 1 | 1 | 1 | Reserved | |
HIGH | FLOAT | 1 | 1 | 1 | Reserved | |
HIGH | HIGH | 1 | 1 | 1 | Reserved |