Are you interested in making something that works with the Adafruit Feather & FeatherWing system?
That's awesome! Adafruit encourages you to do so! Here's some guidelines to make it easy to make sure you can mix & match in the nearly-100-board ecosystem.
We will do our best to update this whenever we can!
The 'classic' Feather and Wing size is 0.9" x 2.0" with 0.1" holes at each corner.
There is one 16-pin breakout strip on the bottom side, centered 1.0" from the left edge. There is one 12-pin breakout strip on the top side, 1.2" from the left side. The spacing between the two strips is 0.8" Don't change the GPIO spacing or location, or you will not maintain compatibility with Wings!
This Proto Featherwing shows off those dimensions:
If you need more space, you can, of course, go double-sided or you can go longer. For example, the 32u4 FONA Feather has the same width but is longer:
If you are making a Feather main-board, we don't recommend going any wider, or adding space on the 'left side' where the USB port is. If you do go wider, or add space, make the USB side (the left two holes, and the breakout pins with-respect-to bottom left corner) the same.
If you do go wider, it wont fit nicely in a breakout board.
For Feather Wings, you don't have to keep the same size. You can have it be a 'bottom' Wing like this terminal block Wing, where the Feather pops on top:
Or you can do what we did with the TFT FeatherWing where the board plugs into the back.
Note that even with these larger wings, you can use stacking headers to add more wings on top.
One of the goals of Feather was to unify the pinouts so that we only have to make one OLED display and have it work with all the mainboards.
If you maintain compatibility you can expect to be able to work with any current or future Wings! (Note, however, we only test our own boards for guaranteed compatibility)
All Feathers and Featherwings use 3.3V logic - so do not make anything that requires 5.0V logic. You must accept and emit 3.3V logic on any Feather/Wing (except for Analog inputs)
The power pins on all Feather mainboards must be the same:
This is the power that comes from the USB port. It should be 4.5-5.5V or so, 500mA. You can put a fuse on this pin if you like, but it is not required. This pin can be at approx the same voltage as VBAT if the USB power is removed (some of our older Feathers did this), or it can disconnect completely (our newer Feathers including the ESP32 do this with a transistor switch). FeatherWings can use this for powering larger items like servos or lots of LEDs, but they need to cope/understand that it can go away when the Feather is unplugged from USB
This is the power that comes from the 'optional' LiPoly battery. It should be 3.0-3.7V or so, with variable current capability.
If you are making a mainboard Feather you must have onboard LiPoly charging (its a core expectation) and the LiPo connection must be a JST 2-PH that matches Adafruit batteries. The connector must be in the same location, 0.425" from the left edge
Also, you must have some charge indication LED, we strongly recommend sticking a yellow CHG LED below the microUSB connector.
We tend to require no smaller than a 250mAh battery for WiFi/Radio Feathers. On the Cellular Feathers, its reasonable to require 750mAh or higher, and have the charge rate be 500mA. We don't recommend setting the charge rate below 100mA or above 500mA but as long as its well documented why you chose it, its fine.
We strongly recommend you design your Feather and Wings to not require a LiPoly plugged in. For cellular, a LiPo is required but that is the one exception we've made so far!
FeatherWings can use this pin for powering larger items like servos or lots of LEDs, but they need to cope/understand that it can go away if the LiPo dies or if it is not unplugged.
We recommend that if your Wing does need high power, to use 2 x 1A Schottky diodes to give higher-of-either for your power input.
We also recommend that you use a simple invert+switch to disable the power source when ENable is low:
The 3.3V pin is power from Feathers to Wings. You must have a regulator or buck converter on the Feather mainboard to take VUSB/VBAT to 3.3V. It is OK to have the 3.3V drop down to 3.0V when the battery is dead. We like the AP2112K-3.3 regulator, it's ultra low dropout, a good price, and has up to 500mA current output. If you pick something else, we recommend that after powering the Feather, you have at least 100mA remaining in the budget for Wings.
The EN pin is an input to your Feather Mainboard and must be used to depower the 3.3V output. We tend to tie it to the Enable pin on the 3.3V regulator, with a 100K pullup. It does not disable VBAT/VUSB, see above for a circuit that will let you do that. It is OK if you decide to have EN de-power USB/BAT as well, but not required.
To make it easy to create add-ons, we have fixed inter-chip bus pins:
- RX & TX - these are UART pins. If your mainboard has a spare hardware UART, put these here. If your board uses the sole UART for bootloader/debug (e.g. ESP8266) then you can put those here as well. If designing a Feather, try to not use these as they are not always available. The pins names are relative to the Feather and not the Wing.
- SDA & SCL - this should be your main I2C bus. I2C pullups are put on the Wings, not on the mainboard. These are 3.3V logic, we strongly recommend avoiding clock-stretch I2C on Featherwings. Repeated start is OK! This is our recommended interface for sensors and Wings, try to stick to it.
- SCK/MOSI/MISO - this should be your main SPI bus. 3.3V logic. If you share these with devices on the main featherwing, keep the CS pin from being exposed so that you don't have SPI bus contentions.
- I2S - we don't fix the I2S pins! I2S is not as common and often are very restricted. We don't have any guarantees on where the I2S pins may lay.
There are 6 reserved spots for Analog pins between the power pins and SPI pins. You do not have to have the analog pins in order (e.g. A0 first, then A1) but it is considered in good taste to do so. We do our best to put any DAC pins on the first two pins (e.g. Feather M0 has the DAC on A0, ESP32 has the DACs on A0 and A1)
The ESP8266 only has one analog pin and its 1.0V max, so be aware that while every other Feather mainboard has 6 analog-ins, if you want your wing to work with the ESP8266 there are restrictions. We tend not to use the analog inputs on Wings for these reasons.
While we dont require all 6 pins to be analog inputs, it would be unusual if they were not. So please do your best to keep those pins analog!
Between BAT and I2C pins there are 7 GPIO pins you can break out. These are every day 3.3V GPIO pins. The vast majority of Feather boards have these pins available and with customizable pullups.
However, the ESP8266 is the one constrained board and shares 3 of the GPIO with SPI and the other 4 have some unusual pull up/down requirements. So if you make a Wing that uses these GPIO, please test it with the ESP8266 Feather as it is the most challenging, or make it clear that the ESP8266 Feather is not compatible.
We don't expect all FeatherWings that use these GPIO to be stackable with other GPIO-using Wings (only I2C is really stackable) so feel free to use these however you like.
- AREF - this is the Analog Reference if there is one for the chip. If there is not, keep this pin not-connected. We recommend Wings don't require this pin as not all chips have external ARef's.
RESET - this is the main feather board reset line. It must be active low - that is you tie it to ground to reset the main Feather. Nearly all our Wings have a reset button that can be used. You must have a reset tactile button on your Feather.
A reset button on Wings is not required but is strongly recommended as the Wing usually covers up the button!
- 'Free' Pin - This is the pin to the right of TX. You can use it for an extra GPIO or if you have some onboard module that has a useful breakout. Sometimes we tie it to ground. Do whatever you like! FeatherWings should not require or use this pin unless there's some really good reason.
Added May 26th, 2021
The pin naming on silkscreen and pinout cards impacts software written for the Feather ecosystem. Therefore, we strongly suggest following the numbering below and discourage any other D# or A# labeling. Silkscreen numbers without a letter prefix should follow the D# numbering because that is the existing expectation.
Other microcontroller names can be put on silkscreen if room allows or on a pinout card. For example, the Adafruit Feather RP2040 has the GP# numbering on the bottom of the Feather. This is OK because it does not conflict with the standard A# and D# numbering.
The pin labeled * is the free pin and has no consistent functionality or name.
D24 and D25 can be used in place of A4 and A5 when the pins do not feature any analog capabilities.
The user led should be shared with the D13 pin. There is no consistent name for when the user LED is not shared. In CircuitPython, both versions should be made available as
Naming is as follows, oriented with USB at the top.
|A4 or D24||D12|
|A5 or D25||D11|
|RX or D0||D5|
|TX or D1||SCL|
The M in MI and MO names used to refer to the term "master" from the SPI specification. We recommend using the term "microcontroller" or "microprocessor" instead for clarity.
USB is used for debug, upload and battery charge. We use micro B USB but you can also use USB C if you like! USB B wont fit (too chunky) and Mini B is deprecated so please stay away from those two.
Feather mainboards must have USB debug upload with a micro USB connector in the center left of the board. If your mainboard has native USB debug/upload, use that! If you do not, use a USB-serial converter chip such as CP2104, FT23x, etc.
You do not need to have RX/TX USB activity LEDs, but they're nice if you can!
There must be at least one USER LED, we recommend it also indicate when the bootloader is active. Put this LED above the microUSB connector. We recommend red but not required. You can share this with one of the general purpose 7 IO pins, but if you can have it be separate and not-exposed, that's best!
- JTAG, ISP or SWD connector - if you can fit one, great! But it is not required if you have a bootloader.
- Bootloader - if your board for some reason cannot come with a bootloader (because, say it is an FPGA board) just make it super clear. For anything else, a USB bootloader is very, very strongly recommended. UF2 file update support is required for CircuitPython-compatible boards.
- Power LED - we don't include one in general, but a power-good LED is fine to add
- Additional Breakouts - if the 12+16 pins are not enough, you can add more breakout strips if you have space - but note that FeatherWings may not use them