The problem every Feather host brings
Every Feather host carries its own 1S charger and exposes BAT, USB, EN and 3V on the header. A power module that drove the host's BAT position would have the host's charger pushing current into the Snowbird cell, behind the BMS switch and outside Snowbird's control, every time the host's own USB was plugged in.
So Snowbird hands power over on the 3.3 V side, and never touches BAT or USB.
The power handoff
| Host position | Snowbird | Default | Why |
|---|---|---|---|
| 3V | Snowbird's 3.3 V rail, hard-wired | connected | The host runs from Snowbird's regulator |
| EN | Pulled to GND through a solder jumper | closed | Turns the host's own regulator off so the two never fight |
| BAT | not connected | The host's charger must never see the Snowbird cell. There is no jumper, on purpose | |
| USB | not connected | Two 5 V sources in parallel otherwise | |
| GND | GND | connected | |
| SDA, SCL | I2C, 3.3 V | connected | The host talks to the supervisor on the same bus as the Qwiic connectors |
Adafruit documents feeding 3V with EN held low as the supported way to run a Feather from an external 3.3 V supply. That is exactly what Snowbird does.
The host's USB may still be plugged in while stacked. Its charger finds no battery, its regulator is disabled, and its MCU keeps running from Snowbird's 3V. You can program the host over its own USB with the stack assembled.
Open the EN jumper only for a host that must keep its own regulator on. The classic reason is a host with a peripheral on its own regulated rail that Snowbird's 3V does not reach. With the jumper open, the host's regulator and Snowbird's are both driving 3V; this works on hosts whose regulator tolerates back-drive, and it is your job to check.
Stacking
Snowbird goes under the host. Fit stacking headers to the Snowbird and plain headers to the host, or use a Feather Doubler or Tripler and put both boards side by side. On a Doubler the two sockets are wired in parallel, so the handoff is identical to stacking.
With a FeatherWing on top as well, the Wing's power positions are also in parallel. A Wing that draws from BAT gets nothing, which is correct. A Wing that draws from USB gets nothing, which is also correct. Wings draw from 3V in practice.
The Snowbird Pack has the Feather header on one long edge and the rest of the board hanging off to the side. It stacks the same way; the extra width sits beside the host.
Which positions the signals use
A register read cannot wake a sleeping host, but a pin can. So PG, CHG_DONE, INT and EN5V each have a Feather position behind a solder jumper that ships open. See Pinout for the electrical details. The positions were chosen so that nothing collides with the Wings people actually stack.
| Position | Signal | Why this one |
|---|---|---|
| 11 | INT | Interrupt-capable on every current Feather host: a pin-change interrupt on the 32u4, its own external interrupt on the SAMD21, any-pin interrupts on nRF52, ESP32 and RP2040. Not a host LED or battery-sense pin on any current Feather. Adafruit's own Wings use it only on the radio Wing, where the user wires it by hand |
| A2 | PG | Wings do not use analog positions. On the classic ESP32 Feathers this is an input-only GPIO, which suits a signal into the host |
| A3 | CHG_DONE | Same reasoning as A2. On the SAMD21 it shares its external-interrupt line with position 6, which only matters if both are used as interrupts |
| A5 | EN5V | Output-capable on every current Feather host, and unused by Wings. With the jumper open the 5 V rail follows the software setting alone |
Positions rejected, so you do not have to rediscover why:
- 12 is GPIO12 on the classic ESP32 Feathers, a strapping pin. Held high at reset it selects a 1.8 V flash supply and the board fails to boot. PG is high before the host boots, by definition.
- 13 is the host LED on most Feathers.
- 9 is the battery-sense input on several Feathers, and button A on the OLED Wing.
- 10, 5, 6 are the SD chip select and the OLED and TFT Wing buttons and chip selects.
- The 16th position is unconnected on older Feathers and a different GPIO on each newer one.
Hosts verified
Each host below has been run stacked on a Snowbird Feather 1S with the EN jumper closed, programmed over its own USB while stacked, and woken from deep sleep by INT on position 11.
| Host | MCU | INT | PG / CHG_DONE | EN5V | Notes |
|---|---|---|---|---|---|
| Feather 32u4 | ATmega32u4 | pin-change | polled | ok | Analog pins have no interrupt on the 32u4 |
| Feather M0 | SAMD21 | external | external | ok | A3 shares its interrupt line with 6 |
| Feather M4 | SAMD51 | external | external | ok | |
| Feather nRF52840 | nRF52840 | any-pin | any-pin | ok | Snowbird's own BLE and the host's coexist; they are separate radios |
| Feather ESP32 | ESP32 | any-pin | any-pin, input-only | ok | A2 and A3 are input-only on this host, which suits them |
| Feather ESP32-S3 | ESP32-S3 | any-pin | any-pin | ok | |
| Feather RP2040 | RP2040 | any-pin | any-pin | ok |
The current pinout card of each host is checked against this table whenever Adafruit revises one; the table on the Snowbird Feather 1S page is generated from the same data.
Not a Feather
Anything with a 3.3 V input and an I2C bus works through the pads and the Qwiic connector. Raspberry Pi Pico: feed VSYS from the Snowbird 3.3 V rail or the 5 V terminal, pull 3V3_EN low, and wire Qwiic to any I2C pair. Bare ESP32 modules: 3.3 V to the module's 3V3, Qwiic to any two GPIO. The library does not care what the host is.