The ItsyBitsy M4 Express has BAT G USB on the top left, right next to the micro USB port
These pins are:
You can always put any voltage you like into BAT and the circuitry will switch between BAT and USB dynamically for you. That means you can have a Batter backup that only gets enabled when USB is disconnected.
If you want to add rechargeable power, a LiPoly backpack can be soldered into these three pins that will let you have a battery that is automatically recharged whenever USB is plugged in, then switches to LiPoly when on the go:
In addition to the three standard power pins, the ItsyBitsy M0 Express has a few more pins available for power sourcing:
- 3V - this is the regulated output from the onboard regulator. You can draw 500mA whether powered by USB or battery.
- Vhi - this is a special pin! It is a dual-Schottkey-diode connected output from BAT and USB. This means this will always have the higher-of-the-two voltages, but will always have power output. The voltage will about 5VDC when powered by USB, but can range from 3.5-6VDC when powered from battery. It's not regulated, but it is high-current, great for driving servos and NeoPixels.
- EN - connected to the regulator enable, it will let you shut off power - when running on battery only. But at least you don't have to cut a trace or wire to your battery. This pin does not affect power when using USB
This is the general purpose I/O pin set for the microcontroller. All logic is 3.3V. You can usually use 3V logic as an input to 5V, but the 3V Itsy pins should not be connected to 5V!
Nearly all pins can do PWM output
All pins can be interrupt inputs
Please note this chip has hardware support for Serial, I2C and SPI but does not support I2S. We have no idea why but Atmel disabled I2S on the 48 QFN version of this chip. If you need I2S please pick up a Metro or Feather M4 as those use the I2S-capable 64-QFN ¯\_(ツ)_/¯
Along the right edge
- #0 / RX - GPIO #0, also receive (input) pin for Serial1. PWM output
- #1 / TX - GPIO #1, also transmit (output) pin for Serial1. PWM output
- SDA and SCL - these are the I2C hardware interface pins. There's no pull up on this pin by default so when using with I2C, you may need a 2.2K-10K pullup on each to 3.3V. PWM output
- #5 - GPIO #5. This is a special OUTPUT-only pin that can PWM. It is level-shifted up to Vhi voltage, so its perfect for driving NeoPixels that want a ~5V logic level input. You can use this with our NeoPixel DMA control library to automatically write NeoPixel data without needing any processor time.
- #7 - GPIO #7 can PWM
- #9 - GPIO #9 can PWM
- #10 - GPIO #10 can PWM
- #11 - GPIO #11 can PWM
- #12 - GPIO #12 can PWM
- #13 - GPIO #13 can PWM, is connected to the red LED next to the Reset button
Along the left edge
None of the analog input pins A0 thru A5 or the SPI pins have PWM outputs but they can be used for general purpose I/O otherwise
- A0 - This pin is analog input A0 but is also an analog output due to having a DAC (digital-to-analog converter). This is the first DAC, and is 'independent' of A1. You can set the raw voltage to anything from 0 to 3.3V, unlike PWM outputs this is a true analog output
- A1 - This pin is analog input A1 but is also an analog output due to having a DAC (digital-to-analog converter). This is the second DAC, and is 'independent' of A0. You can set the raw voltage to anything from 0 to 3.3V, unlike PWM outputs this is a true analog output
- A2 thru A5 - These are each analog input as well as digital I/O pins. A4 and A5 have PWM output.
- SCK/MOSI/MISO - These are the hardware SPI pins, you can use them as everyday GPIO pins but recommend keeping them free as they are best used for hardware SPI connections for high speed. MOSI and SCK have PWM output.
Along the short edge:
- #2 - GPIO #2, also analog input A6 and has PWM output.
- #3 - GPIO #3.
- #4 - GPIO #4. Can also do PWM output
- SWCLK & SWDIO - These are the debug-interface pins, used if you want to reprogram the chip directly or attach a debugger.
These pins are available in CircuitPython under the
board module. Names that start with # are prefixed with D and other names are as is. So #0 / RX above is available as
board.RX for example.
Parallel Capture Peripheral
There's a 'camera' input peripheral you can use with some camera chips to capture video with 8-bit data width. We thought this was neat so we made sure all those pins were available. Here are the PCC pins (left) and the Itsy M4 pins it's mapped to. Unlike other peripherals, you cannot mux these signals to other pins!
- DEN1: SDA
- DEN2: SCL
- CLK: D4
- D0: RX
- D1: TX
- D2: D7
- D3: D9
- D4: D10
- D5: D11
- D6: D13
- D7: D12
As part of the 'Express' series of boards, this ItsyBitsy is designed for use with CircuitPython. To make that easy, we have added two extra parts: a mini DotStar (RGB LED) and a 2 MB QSPI (Quad SPI) Flash chip
The DotStar is connected to pin #6 (clock) and #8 (data) in Arduino, so just use our DotStar library and set it up as a single-LED strand on pins 6 & 8. The DotStar is powered by the 3.3V power supply but that hasn't shown to make a big difference in brightness or color. The DotStar is also used by the bootloader to let you know if the device has enumerated correctly (green) or USB failure (red). In CircuitPython, the LED is used to indicate the run time status.
The QSPI Flash is connected to 6 pins that are not brought out on the GPIO pads. This way you don't have to worry about the SPI flash colliding with other devices on the main SPI connection.
QSPI is neat because it allows you to have 4 data in/out lines instead of just SPI's single line in and single line out. This means that QSPI is at least 4 times faster. But in reality is at least 10x faster because you can clock the QSPI peripheral much faster than a plain SPI peripheral
However, the QSPI port is not also on an SERCOM. So, you have to either use the QSPI peripheral or bit-bang SPI if you want to talk to the chip. We have an Arduino library here which provides QSPI interfacing for Arduino. In CircuitPython, the QSPI flash is used natively by the interpreter and is read-only to user code, instead the Flash just shows up as the writable disk drive!