docs/samd: Add documentation for the samd port.
Includes a general overview, a quickref, pinout tables, and the beginnings of a tutorial.
This commit is contained in:
parent
64af916c11
commit
11910e2fa1
@ -17,3 +17,4 @@ MicroPython documentation and references
|
||||
unix/quickref.rst
|
||||
zephyr/quickref.rst
|
||||
renesas-ra/quickref.rst
|
||||
samd/quickref.rst
|
||||
|
88
docs/samd/general.rst
Normal file
88
docs/samd/general.rst
Normal file
@ -0,0 +1,88 @@
|
||||
.. _samd_general:
|
||||
|
||||
General information about the SAMD port
|
||||
=======================================
|
||||
|
||||
The SAMD21/SAMD51 MCU family is a high performance family of devices made by MicroChip.
|
||||
The SAMD21 devices are based on an ARM M0+ core, the SAMD51 device on ARM Cortex M4 core.
|
||||
They provide many on-chip I/O units for building small to medium sized devices.
|
||||
|
||||
Multitude of boards
|
||||
-------------------
|
||||
|
||||
There is a multitude of modules and boards from different sources which carry
|
||||
an SAMD21/SAMD51 chip. MicroPython aims to provide a generic port which runs on
|
||||
as many boards/modules as possible, but there may be limitations. The
|
||||
Adafruit ItsyBitsy M0 Express, Adafruit Feather M4 Express and the Adafruit ItsyBitsy M4 Express
|
||||
development boards are taken as reference for the port (for example, testing is performed on them).
|
||||
For any board you are using please make sure you have a data sheet, schematics
|
||||
and other reference materials so you can look up any board-specific functions.
|
||||
|
||||
The following boards are at the moment supported by the port:
|
||||
|
||||
- ADAFRUIT FEATHER M0 EXPRESS
|
||||
- ADAFRUIT FEATHER M4 EXPRESS
|
||||
- ADAFRUIT ITSYBITSY M0 EXPRESS
|
||||
- ADAFRUIT ITSYBITSY M4 EXPRESS
|
||||
- ADAFRUIT TRINKET M0
|
||||
- MINISAM M4
|
||||
- SAMD21 XPLAINED PRO
|
||||
- SEEED WIO TERMINAL
|
||||
- SEEED XIAO
|
||||
|
||||
To make a generic SAMD port and support as many boards as possible the
|
||||
following design and implementation decision were made:
|
||||
|
||||
* GPIO pin numbering is based on the board numbering.
|
||||
Please have the manual/pin diagram of your board at hand
|
||||
to find correspondence between your board pins and actual SAMD21/SAMD51 pins.
|
||||
For the boards listed above, the relation between the board pin number and
|
||||
the GPIO number can be found at :ref:`samd_pinout`.
|
||||
* The pins that can be used by MicroPython are limited to those listed
|
||||
in the board definition files.
|
||||
|
||||
Technical specifications and SoC data sheets
|
||||
--------------------------------------------
|
||||
|
||||
The data sheets and other reference material for SAMD21/SAMD51 chip are available
|
||||
from the vendor site: https://www.microchip.com/en-us/products/microcontrollers-and-microprocessors/32-bit-mcus/sam-32-bit-mcus
|
||||
They are the primary reference for the chip technical specifications, capabilities,
|
||||
operating modes, internal functioning, etc.
|
||||
|
||||
For your convenience, a few technical specifications are provided below:
|
||||
|
||||
SAMD21:
|
||||
|
||||
* Architecture: ARM Cortex M0+
|
||||
* CPU frequency: up to 48MHz
|
||||
* Total RAM available: up to 32 kB (see table)
|
||||
* Internal FlashROM: up to 256 kB
|
||||
Some boards provide additional external SPI flash.
|
||||
* GPIO: up to 52 (GPIOs are multiplexed with other functions, including
|
||||
external FlashROM, UART, etc.)
|
||||
* UART: up to 6 serial devices, which can used for UART, SPI or I2C.
|
||||
* I2S: 1 I2S interfaces
|
||||
* ADC: One 12-bit SAR ADC converter with 16 channels.
|
||||
* Programming: using BootROM bootloader from USB.
|
||||
|
||||
SAMD51:
|
||||
|
||||
* Architecture: ARM Cortex M4
|
||||
* CPU frequency: up to 120MHz
|
||||
* Total RAM available: up to 256 kB
|
||||
* Internal FlashROM: up to 1 MB
|
||||
Some boards provide additional external SPI flash.
|
||||
* GPIO: up to 99 (GPIOs are multiplexed with other functions, including
|
||||
external FlashROM, UART, etc.)
|
||||
* UART: up to 8 serial devices, which can used for UART, SPI or I2C.
|
||||
* I2S: 1 I2S interfaces
|
||||
* ADC: Dual 12-bit SAR ADC converter with 16 channels.
|
||||
* Programming: using BootROM bootloader from USB.
|
||||
|
||||
|
||||
For more information see the excellent SAMD21/SAMD51 data sheets or reference manuals.
|
||||
|
||||
At the moment, the SAM21 port of MicroPython requires 256kB flash, of which 64kB is used
|
||||
for a small file system. The SAM51 port requires 512 kB of flash, of which all flash beyond
|
||||
384kB is used for a file system. Some boards have additional flash memory, which can be used
|
||||
as additional file space.
|
BIN
docs/samd/img/itsybitsy_m4_express.jpg
Normal file
BIN
docs/samd/img/itsybitsy_m4_express.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 148 KiB |
850
docs/samd/pinout.rst
Normal file
850
docs/samd/pinout.rst
Normal file
@ -0,0 +1,850 @@
|
||||
.. _samd_pinout:
|
||||
|
||||
Pinout for the SAMD machine modules
|
||||
===================================
|
||||
|
||||
The assignment of device functions to pins is very flexible. The same function may be used
|
||||
at different pins. The representation of the assignment choices are given by a table,
|
||||
which is a subset of the MCU's Pin MUX table and is specific to each board, as the
|
||||
available pin set varies. The structure of the table is the same for each board, but
|
||||
the set of rows is different.
|
||||
|
||||
.. _samd21_pinout_table:
|
||||
|
||||
Adafruit ItsyBitsy M0 Express pin assignment table
|
||||
--------------------------------------------------
|
||||
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
Pin GPIO Pin name IRQ ADC Serial Serial TCC/TC TCC/TC
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
0 PA11 D0 11 19 0/3 2/3 1/1 0/3
|
||||
1 PA10 D1 10 18 0/2 2/2 1/0 0/2
|
||||
2 PA14 D2 14 - 2/2 4/2 3/0 0/4
|
||||
3 PA09 D3 9 17 0/1 2/1 0/1 1/3
|
||||
4 PA08 D4 - 16 0/0 2/0 0/0 1/2
|
||||
5 PA15 D5 15 - 2/3 4/3 3/1 0/5
|
||||
7 PA21 D7 5 - 5/3 3/3 7/1 0/7
|
||||
9 PA07 D9 7 7 - 0/3 1/1 -
|
||||
10 PA18 D10 2 - 1/2 3/2 3/0 0/2
|
||||
11 PA16 D11 0 - 1/0 3/0 2/0 0/6
|
||||
12 PA19 D12 3 - 1/3 3/3 3/1 0/3
|
||||
13 PA17 D13 1 - 1/1 3/1 2/1 0/7
|
||||
14 PA02 A0 2 0 - - - -
|
||||
15 PB08 A1 8 2 - 4/0 4/0 -
|
||||
16 PB09 A2 9 3 - 4/1 4/1 -
|
||||
17 PA04 A3 4 4 - 0/0 0/0 -
|
||||
18 PA05 A4 5 5 - 0/1 0/1 -
|
||||
19 PB02 A5 2 - - 5/0 6/0 -
|
||||
20 PA22 SDA 6 - 3/0 5/0 4/0 0/4
|
||||
21 PA23 SCL 7 - 3/1 5/1 4/1 0/5
|
||||
22 PB10 MOSI 10 - - 4/2 5/0 0/4
|
||||
23 PA12 MISO 12 - 2/0 4/0 2/0 0/6
|
||||
24 PB11 SCK 11 - - 4/3 5/1 0/5
|
||||
25 PA00 DOTSTAR_CLK 0 - - 1/0 2/0 -
|
||||
26 PA01 DOTSTAR_DATA 1 - - 1/1 2/1 -
|
||||
27 PB22 FLASH_MOSI 6 - - 5/2 7/0 -
|
||||
28 PB03 FLASH_MISO 3 - - 5/1 6/1 -
|
||||
29 PB23 FLASH_SCK 7 - - 5/3 7/1 -
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
|
||||
|
||||
Description of the columns:
|
||||
|
||||
- *Pin* - The number that is expected at ``machine.Pin(n)``, if the pin is given
|
||||
as a number. This is NOT the GPIO number, but the board pin number, as
|
||||
given in the board specific definition file.
|
||||
- *GPIO* - The GPIO number.
|
||||
- *Pin Name* - The name of a Pin which is expected argument to ``machine.Pin("name")``.
|
||||
- *IRQ* - The IRQ number assigned to that GPIO, used internally by ``Pin.irq()``. When
|
||||
using ``Pin.irq()``, different pins must use different IRQs
|
||||
- *ADC* - The ADC channel assigned to the pin. When using ADC, different pins must
|
||||
not use the same ADC channel.
|
||||
- *Serial* - Two columns with optional Serial signal assignments. Both may be used.
|
||||
The cell content is device #/pad #. The pad # is the respective internal
|
||||
signal of that serial device. Details below.
|
||||
- *TCC/TC* - Two columns with assignments of the TCC modules for PWM.
|
||||
The cell content is device #/output #. For PWM, devices 0, 1, and 2
|
||||
are used. The TC device pair 3/4 is used for ``ticks_us()``.
|
||||
|
||||
SAMD21 UART assignments
|
||||
```````````````````````
|
||||
The UART devices and signals must be chosen according to the following rules:
|
||||
|
||||
- The TX signal must be at a Pin with pad numbers 2 or 0, like Pin 1 with serial
|
||||
device 0 or 2.
|
||||
- The RX pin may be assigned to one of the other pads.
|
||||
|
||||
Examples for Adafruit ItsyBitsy M0 Express:
|
||||
|
||||
- uart 0 at pins 0/1 This is the default UART at the RX/TX labelled pins
|
||||
- uart 1 at pins 12/10
|
||||
- uart 2 at pins 0/1
|
||||
- uart 3 at pins 11/13
|
||||
- uart 4 at pins 2/5
|
||||
- uart 5 at pins SCL/SDA
|
||||
|
||||
or other combinations.
|
||||
|
||||
SAMD21 I2C assignments
|
||||
``````````````````````
|
||||
The I2C devices and signals must be chosen according to the following rules:
|
||||
|
||||
- The SDA signal must be at a Pin with pad numbers 0.
|
||||
- The SCL signal must be at a Pin with pad numbers 1.
|
||||
|
||||
Examples for Adafruit ItsyBitsy M0 Express:
|
||||
|
||||
- I2C 0 at Pin A3/A4
|
||||
- I2C 1 at pins 11/13
|
||||
- I2C 2 at the pins 4/3
|
||||
- I2C 3 at the pins SDA/SCL This is the default I2C device at the SDA/SCl labelled pin
|
||||
- I2C 4 at the pins A1/A2
|
||||
- I2C 5 at the pins SDA/SCL,
|
||||
|
||||
or other combinations.
|
||||
|
||||
SAMD21 SPI assignments
|
||||
``````````````````````
|
||||
The I2C devices and signals must be chosen according to the following rules:
|
||||
|
||||
- The following pad number pairs are suitable for MOSI/SCK: 0/1, 2/3, 3/1, and 0/3.
|
||||
- The MISO signal must be at a Pin with a different pad number than MOSI or SCK.
|
||||
|
||||
Examples for Adafruit ItsyBitsy M0 Express:
|
||||
|
||||
- SPI 0 at pins 0/4/1
|
||||
- SPI 1 at pins 11/12/13
|
||||
- SPI 2 at pins 0/4/1
|
||||
- SPI 3 at pins 11/12/13
|
||||
- SPI 4 at Pin MOSI/MISO/SCK This is the default SPI device at the MOSI/MISO/SCK labelled pins.
|
||||
|
||||
or other combinations.
|
||||
|
||||
|
||||
SAMD21 PWM assignments
|
||||
``````````````````````
|
||||
|
||||
The TCC/TC device numbers 0, 1 and 2 can be used for PWM. Device 0 has four
|
||||
channels, device 1 and 2 have two channels. So in total 3 different PWM
|
||||
frequencies can be used, and 8 different duty cycle values.
|
||||
|
||||
The DAC output for the Adafruit ItsyBitsy M0 Express board is available at the pin A0.
|
||||
|
||||
.. _samd51_pinout_table:
|
||||
|
||||
Adafruit ItsyBitsy M4 Express pin assignment table
|
||||
--------------------------------------------------
|
||||
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
Pin GPIO Pin name IRQ ADC ADC Serial Serial TC PWM PWM
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
2 PA02 A0 2 0 - - - - - -
|
||||
5 PA05 A1 5 5 - - 0/1 0/1 - -
|
||||
40 PB08 A2 8 2 0 - 4/0 4/0 - -
|
||||
41 PB09 A3 9 3 1 - 4/1 4/1 - -
|
||||
4 PA04 A4 4 4 - - 0/0 0/0 - -
|
||||
6 PA06 A5 6 6 - - 0/2 1/0 - -
|
||||
16 PA16 D0 0 - - 1/0 3/1 2/0 1/0 0/4
|
||||
17 PA17 D1 1 - - 1/1 3/0 2/1 1/1 0/5
|
||||
7 PA07 D2 7 7 - - 0/3 1/1 - -
|
||||
54 PB22 D3 22 - - 1/2 5/2 7/0 - -
|
||||
14 PA14 D4 14 - - 2/2 4/2 3/0 2/0 1/2
|
||||
15 PA15 D5 15 - - 2/3 4/3 3/1 2/1 1/3
|
||||
18 PA18 D7 2 - - 1/2 3/2 3/0 1/2 0/6
|
||||
19 PA19 D9 3 - - 1/3 3/3 3/1 1/3 0/7
|
||||
20 PA20 D10 4 - - 5/2 3/2 7/0 1/4 0/0
|
||||
21 PA21 D11 5 - - 5/3 3/3 7/1 1/5 0/1
|
||||
23 PA23 D12 7 - - 3/1 5/0 4/1 1/7 0/3
|
||||
22 PA22 D13 6 - - 3/0 5/1 4/0 1/6 0/2
|
||||
34 PB02 DOTSTAR_CLK 2 14 - - 5/0 6/0 2/2 -
|
||||
35 PB03 DOTSTAR_DATA 9 15 - - 5/1 6/1 - -
|
||||
43 PB11 FLASH_CS 12 - - - 4/3 5/1 0/5 1/1
|
||||
11 PA11 FLASH_HOLD 11 11 - 0/3 2/3 1/1 0/3 1/7
|
||||
9 PA09 FLASH_MISO 9 9 3 0/1 2/0 0/1 0/1 1/5
|
||||
8 PA08 FLASH_MOSI - 8 2 0/0 2/1 0/0 0/0 1/4
|
||||
42 PB10 FLASH_SCK 10 - - - 4/2 5/0 0/4 1/0
|
||||
10 PA10 FLASH_WP 10 10 - 0/2 2/2 1/0 0/2 1/6
|
||||
55 PB23 MISO 7 - - 1/3 5/3 7/1 - -
|
||||
0 PA00 MOSI 0 - - - 1/0 2/0 - -
|
||||
1 PA01 SCK 1 - - - 1/1 2/1 - -
|
||||
13 PA13 SCL 13 - - 2/1 4/0 2/1 0/7 1/3
|
||||
12 PA12 SDA 12 - - 2/0 4/1 2/0 0/6 1/2
|
||||
30 PA30 SWCLK 14 - - 7/2 1/2 6/0 2/0 -
|
||||
31 PA31 SWDIO 15 - - 7/3 1/3 6/1 2/1 -
|
||||
24 PA24 USB_DM 8 - - 3/2 5/2 5/0 2/2 -
|
||||
25 PA25 USB_DP 9 - - 3/3 5/3 5/1 - -
|
||||
3 PA03 - 3 10 - - - - - -
|
||||
27 PA27 - 11 - - - - - - -
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
|
||||
|
||||
Description of the columns:
|
||||
|
||||
- *Pin* - The number that is expected at ``machine.Pin(n)``, if the pin is given
|
||||
as a number. This is NOT the GPIO number, but the board pin number, as
|
||||
given in the board specific definition file.
|
||||
- *GPIO* - The GPIO number.
|
||||
- *Pin Name* The name of a Pin which is expected argument to ``machine.Pin("name")``.
|
||||
- *IRQ* - The IRQ number assigned to that GPIO, used internally by ``Pin.irq()``. When
|
||||
using ``Pin.irq()``, different pins must use different IRQs
|
||||
- *ADC* - The ADC0/1 channel assigned to the pin. When using ADC, different pins must
|
||||
not use the same ADC device and channel.
|
||||
- *Serial* - Two columns with optional Serial signal assignments. Both may be used.
|
||||
The cell content is device #/pad #. The pad # is the respective internal
|
||||
signal of that serial device. Details below.
|
||||
- *TC* - These device are currently not assigned to Pin. the TC device pair 0/1
|
||||
is used for ``ticks_us()``.
|
||||
- *PWM* - Two columns with assignments of the TCC modules for PWM
|
||||
The cell content is device #/output #. Details below.
|
||||
|
||||
SAMD51 UART assignments
|
||||
```````````````````````
|
||||
The UART devices and signals must be chosen according to the following rules:
|
||||
|
||||
- The TX signal must be at a Pin with pad numbers 0, like Pin 1 with serial
|
||||
device 3.
|
||||
- The RX pin may be assigned to one of the other pads.
|
||||
|
||||
Examples for Adafruit ItsyBitsy 4 Express:
|
||||
|
||||
- uart 0 at pins A4/A1
|
||||
- uart 1 at pins 1/0 This is the default UART at the RX/TX labelled pins
|
||||
- uart 2 at pins SCL/SDA This is the default I2C device at the SDA/SCl labelled pin
|
||||
- uart 3 at pins 0/1
|
||||
- uart 4 at pins SDA/SCL
|
||||
- uart 5 at pins D12/D13
|
||||
|
||||
or other combinations.
|
||||
|
||||
SAMD51 I2C assignments
|
||||
``````````````````````
|
||||
The I2C devices and signals must be chosen according to the following rules:
|
||||
|
||||
- The SDA signal must be at a Pin with pad numbers 0.
|
||||
- The SCL signal must be at a Pin with pad numbers 1.
|
||||
|
||||
Examples for Adafruit ItsyBitsy M0 Express:
|
||||
|
||||
- I2C 0 at pins A3/A4
|
||||
- I2C 1 at pins 0/1
|
||||
- I2C 2 at the pins SDA/SCL
|
||||
- I2C 3 at the pins 1/0
|
||||
- I2C 4 at the pins A2/A3
|
||||
- I2C 5 at the pins 12/13
|
||||
|
||||
or other combinations.
|
||||
|
||||
SAMD51 SPI assignments
|
||||
``````````````````````
|
||||
The SPI devices and signals must be chosen according to the following rules:
|
||||
|
||||
- The following pad number pairs are suitable for MOSI/SCK: 0/1 and 3/1.
|
||||
- The MISO signal must be at a Pin with a different pad number than MOSI or SCK.
|
||||
|
||||
Examples for Adafruit ItsyBitsy M0 Express:
|
||||
|
||||
- SPI 1 at Pin MOSI/MISO/SCK This is the default SPI device at the MOSI/MISO/SCK labelled pins.
|
||||
- SPI 3 at pins 13/11/12
|
||||
- SPI 5 at pins 12/3/13
|
||||
|
||||
or other combinations.
|
||||
|
||||
|
||||
SAMD51 PWM assignments
|
||||
``````````````````````
|
||||
|
||||
The TCC/PWM device numbers 0 through 4 can be used for PWM. Device 0 has six
|
||||
channels, device 1 has four channels, device 2 has three channels and devices
|
||||
3 and 4 have two channels. So in total up to 5 different PWM frequencies
|
||||
can be used, and up to 17 different duty cycle values. Note that these numbers
|
||||
do not apply to every board.
|
||||
|
||||
The DAC outputs for the Adafruit ItsyBitsy M4 Express board are available at the pins A0 and A1.
|
||||
|
||||
Adafruit Feather M4 Express pin assignment table
|
||||
------------------------------------------------
|
||||
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
Pin GPIO Pin name IRQ ADC ADC Serial Serial TC PWM PWM
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
2 PA02 A0 2 0 - - - - - -
|
||||
5 PA05 A1 5 5 - - 0/1 0/1 - -
|
||||
40 PB08 A2 8 2 0 - 4/0 4/0 - -
|
||||
41 PB09 A3 9 3 1 - 4/1 4/1 - -
|
||||
4 PA04 A4 4 4 - - 0/0 0/0 - -
|
||||
38 PB06 A5 6 - 8 - - - - -
|
||||
49 PB17 D0 1 - - 5/1 - 6/1 3/1 0/5
|
||||
48 PB16 D1 0 - - 5/0 - 6/0 3/0 0/4
|
||||
14 PA14 D4 14 - - 2/2 4/2 3/0 2/0 1/2
|
||||
16 PA16 D5 0 - - 1/0 3/1 2/0 1/0 0/4
|
||||
18 PA18 D6 2 - - 1/2 3/2 3/0 1/2 0/6
|
||||
19 PA19 D9 3 - - 1/3 3/3 3/1 1/3 0/7
|
||||
3 PA03 AREF 3 10 - - - - - -
|
||||
20 PA20 D10 4 - - 5/2 3/2 7/0 1/4 0/0
|
||||
21 PA21 D11 5 - - 5/3 3/3 7/1 1/5 0/1
|
||||
22 PA22 D12 6 - - 3/0 5/1 4/0 1/6 0/2
|
||||
23 PA23 D13 7 - - 3/1 5/0 4/1 1/7 0/3
|
||||
43 PB11 FLASH_CS 12 - - - 4/3 5/1 0/5 1/1
|
||||
11 PA11 FLASH_HOLD 11 11 - 0/3 2/3 1/1 0/3 1/7
|
||||
9 PA09 FLASH_MISO 9 9 3 0/1 2/0 0/1 0/1 1/5
|
||||
8 PA08 FLASH_MOSI - 8 2 0/0 2/1 0/0 0/0 1/4
|
||||
42 PB10 FLASH_SCK 10 - - - 4/2 5/0 0/4 1/0
|
||||
10 PA10 FLASH_WP 10 10 - 0/2 2/2 1/0 0/2 1/6
|
||||
54 PB22 MISO 22 - - 1/2 5/2 7/0 - -
|
||||
55 PB23 MOSI 7 - - 1/3 5/3 7/1 - -
|
||||
35 PB03 NEOPIXEL 9 15 - - 5/1 6/1 - -
|
||||
17 PA17 SCK 1 - - 1/1 3/0 2/1 1/1 0/5
|
||||
13 PA13 SCL 13 - - 2/1 4/0 2/1 0/7 1/3
|
||||
12 PA12 SDA 12 - - 2/0 4/1 2/0 0/6 1/2
|
||||
30 PA30 SWCLK 14 - - 7/2 1/2 6/0 2/0 -
|
||||
31 PA31 SWDIO 15 - - 7/3 1/3 6/1 2/1 -
|
||||
24 PA24 USB_DM 8 - - 3/2 5/2 5/0 2/2 -
|
||||
25 PA25 USB_DP 9 - - 3/3 5/3 5/1 - -
|
||||
33 PB01 VDIV 1 13 - - 5/3 7/1 - -
|
||||
0 PA00 - 0 - - - 1/0 2/0 - -
|
||||
1 PA01 - 1 - - - 1/1 2/1 - -
|
||||
6 PA06 - 6 6 - - 0/2 1/0 - -
|
||||
7 PA07 - 7 7 - - 0/3 1/1 - -
|
||||
15 PA15 - 15 - - 2/3 4/3 3/1 2/1 1/3
|
||||
27 PA27 - 11 - - - - - - -
|
||||
32 PB00 - 9 12 - - 5/2 7/0 - -
|
||||
34 PB02 - 2 14 - - 5/0 6/0 2/2 -
|
||||
36 PB04 - 4 - 6 - - - - -
|
||||
37 PB05 - 5 - 7 - - - - -
|
||||
39 PB07 - 7 - 9 - - - - -
|
||||
44 PB12 - 12 - - 4/0 - 4/0 3/0 0/0
|
||||
45 PB13 - 13 - - 4/1 - 4/1 3/1 0/1
|
||||
46 PB14 - 14 - - 4/2 - 5/0 4/0 0/2
|
||||
47 PB15 - 15 - - 4/3 - 5/1 4/1 0/3
|
||||
62 PB30 - 14 - - 7/0 5/1 0/0 4/0 0/6
|
||||
63 PB31 - 15 - - 7/1 5/0 0/1 4/1 0/7
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
|
||||
For the definition of the table columns see the explanation at the table for
|
||||
Adafruit ItsyBitsy M4 Express :ref:`samd51_pinout_table`.
|
||||
|
||||
The default devices at the board are:
|
||||
|
||||
- UART 5 at pins 0/1, labelled RX/TX
|
||||
- I2C 2 at pins 21/20, labelled SDA/SCL
|
||||
- SPI 1 at pins 22/23/24, labelled MOSI, MISO and SCK
|
||||
- DAC output on pins 14 and 15, labelled A0 and A1
|
||||
|
||||
SEEED XIAO pin assignment table
|
||||
-------------------------------
|
||||
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
Pin GPIO Pin name IRQ ADC Serial Serial TCC/TC TCC/TC
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
2 PA02 A0_D0 2 0 - - - -
|
||||
4 PA04 A1_D1 4 4 - 0/0 0/0 -
|
||||
10 PA10 A2_D2 10 18 0/2 2/2 1/0 0/2
|
||||
11 PA11 A3_D3 11 19 0/3 2/3 1/1 0/3
|
||||
8 PA08 A4_D4 - 16 0/0 2/0 0/0 1/2
|
||||
9 PA09 A5_D5 9 17 0/1 2/1 0/1 1/3
|
||||
40 PB08 A6_D6 8 2 - 4/0 4/0 -
|
||||
41 PB09 A7_D7 9 3 - 4/1 4/1 -
|
||||
7 PA07 A8_D8 7 7 - 0/3 1/1 -
|
||||
5 PA05 A9_D9 5 5 - 0/1 0/1 -
|
||||
6 PA06 A10_D10 6 6 - 0/2 1/0 -
|
||||
18 PA18 RX_LED 2 - 1/2 3/2 3/0 0/2
|
||||
30 PA30 SWCLK 10 - - 1/2 1/0 -
|
||||
31 PA31 SWDIO 11 - - 1/3 1/1 -
|
||||
19 PA19 TX_LED 3 - 1/3 3/3 3/1 0/3
|
||||
24 PA24 USB_DM 12 - 3/2 5/2 5/0 1/2
|
||||
25 PA25 USB_DP 13 - 3/3 5/3 5/1 1/3
|
||||
17 PA17 USER_LED 1 - 1/1 3/1 2/1 0/7
|
||||
0 PA00 - 0 - - 1/0 2/0 -
|
||||
1 PA01 - 1 - - 1/1 2/1 -
|
||||
3 PA03 - 3 1 - - - -
|
||||
12 PA12 - 12 - 2/0 4/0 2/0 0/6
|
||||
13 PA13 - 13 - 2/1 4/1 2/0 0/7
|
||||
14 PA14 - 14 - 2/2 4/2 3/0 0/4
|
||||
15 PA15 - 15 - 2/3 4/3 3/1 0/5
|
||||
16 PA16 - 0 - 1/0 3/0 2/0 0/6
|
||||
20 PA20 - 4 - 5/2 3/2 7/0 0/4
|
||||
21 PA21 - 5 - 5/3 3/3 7/1 0/7
|
||||
22 PA22 - 6 - 3/0 5/0 4/0 0/4
|
||||
23 PA23 - 7 - 3/1 5/1 4/1 0/5
|
||||
27 PA27 - 15 - - - - -
|
||||
28 PA28 - 8 - - - - -
|
||||
34 PB02 - 2 10 - 5/0 6/0 -
|
||||
35 PB03 - 3 11 - 5/1 6/1 -
|
||||
42 PB10 - 10 - - 4/2 5/0 0/4
|
||||
43 PB11 - 11 - - 4/3 5/1 0/5
|
||||
54 PB22 - 6 - - 5/2 7/0 -
|
||||
55 PB23 - 7 - - 5/3 7/1 -
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
|
||||
For the definition of the table columns see the explanation at the table for
|
||||
Adafruit ItsyBitsy M0 Express :ref:`samd21_pinout_table`.
|
||||
|
||||
The default devices at the board are:
|
||||
|
||||
- UART 4 at pins 7/6, labelled A6_D6/A7_D7
|
||||
- I2C 2 at pins 4/5, labelled A4_D4/A5_D5
|
||||
- SPI 0 at pins 10/9/8, labelled A10_D10, A9_D9 and A8_D8
|
||||
- DAC output on pin 0, labelled A0_D0
|
||||
|
||||
Adafruit Feather M0 Express pin assignment table
|
||||
------------------------------------------------
|
||||
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
Pin GPIO Pin name IRQ ADC Serial Serial TCC/TC TCC/TC
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
2 PA02 A0 2 0 - - - -
|
||||
40 PB08 A1 8 2 - 4/0 4/0 -
|
||||
41 PB09 A2 9 3 - 4/1 4/1 -
|
||||
4 PA04 A3 4 4 - 0/0 0/0 -
|
||||
5 PA05 A4 5 5 - 0/1 0/1 -
|
||||
34 PB02 A5 2 10 - 5/0 6/0 -
|
||||
11 PA11 D0 11 19 0/3 2/3 1/1 0/3
|
||||
10 PA10 D1 10 18 0/2 2/2 1/0 0/2
|
||||
14 PA14 D2 14 - 2/2 4/2 3/0 0/4
|
||||
9 PA09 D3 9 17 0/1 2/1 0/1 1/3
|
||||
8 PA08 D4 - 16 0/0 2/0 0/0 1/2
|
||||
15 PA15 D5 15 - 2/3 4/3 3/1 0/5
|
||||
20 PA20 D6 4 - 5/2 3/2 7/0 0/4
|
||||
21 PA21 D7 5 - 5/3 3/3 7/1 0/7
|
||||
7 PA07 D9 7 7 - 0/3 1/1 -
|
||||
55 PB23 RX 7 - - 5/3 7/1 -
|
||||
54 PB22 TX 6 - - 5/2 7/0 -
|
||||
18 PA18 D10 2 - 1/2 3/2 3/0 0/2
|
||||
16 PA16 D11 0 - 1/0 3/0 2/0 0/6
|
||||
19 PA19 D12 3 - 1/3 3/3 3/1 0/3
|
||||
17 PA17 D13 1 - 1/1 3/1 2/1 0/7
|
||||
13 PA13 FLASH_CS 13 - 2/1 4/1 2/0 0/7
|
||||
35 PB03 LED_RX 3 11 - 5/1 6/1 -
|
||||
27 PA27 LED_TX 15 - - - - -
|
||||
12 PA12 MISO 12 - 2/0 4/0 2/0 0/6
|
||||
42 PB10 MOSI 10 - - 4/2 5/0 0/4
|
||||
6 PA06 NEOPIXEL 6 6 - 0/2 1/0 -
|
||||
43 PB11 SCK 11 - - 4/3 5/1 0/5
|
||||
23 PA23 SCL 7 - 3/1 5/1 4/1 0/5
|
||||
22 PA22 SDA 6 - 3/0 5/0 4/0 0/4
|
||||
30 PA30 SWCLK 10 - - 1/2 1/0 -
|
||||
31 PA31 SWDIO 11 - - 1/3 1/1 -
|
||||
24 PA24 USB_DM 12 - 3/2 5/2 5/0 1/2
|
||||
25 PA25 USB_DP 13 - 3/3 5/3 5/1 1/3
|
||||
0 PA00 - 0 - - 1/0 2/0 -
|
||||
1 PA01 - 1 - - 1/1 2/1 -
|
||||
3 PA03 - 3 1 - - - -
|
||||
28 PA28 - 8 - - - - -
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
|
||||
For the definition of the table columns see the explanation at the table for
|
||||
Adafruit ItsyBitsy M0 Express :ref:`samd21_pinout_table`.
|
||||
|
||||
The default devices at the board are:
|
||||
|
||||
- UART 5 at pins 21/20, labelled RX/TX
|
||||
- I2C 3 at pins 22/23, labelled SDA/SCL
|
||||
- SPI 4 at pins 24/25/26, labelled MOSI, MISO and SCK
|
||||
- DAC output on pin 14, labelled A0
|
||||
|
||||
Adafruit Trinket M0 pin assignment table
|
||||
------------------------------------------------
|
||||
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
Pin GPIO Pin name IRQ ADC Serial Serial TCC/TC TCC/TC
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
8 PA08 D0 - 16 0/0 2/0 0/0 1/2
|
||||
2 PA02 D1 2 0 - - - -
|
||||
9 PA09 D2 9 17 0/1 2/1 0/1 1/3
|
||||
7 PA07 D3 7 7 - 0/3 1/1 -
|
||||
6 PA06 D4 6 6 - 0/2 1/0 -
|
||||
1 PA01 DOTSTAR_CLK 1 - - 1/1 2/1 -
|
||||
0 PA00 DOTSTAR_DATA 0 - - 1/0 2/0 -
|
||||
10 PA10 LED 10 18 0/2 2/2 1/0 0/2
|
||||
30 PA30 SWCLK 10 - - 1/2 1/0 -
|
||||
31 PA31 SWDIO 11 - - 1/3 1/1 -
|
||||
24 PA24 USB_DM 12 - 3/2 5/2 5/0 1/2
|
||||
25 PA25 USB_DP 13 - 3/3 5/3 5/1 1/3
|
||||
3 PA03 - 3 1 - - - -
|
||||
4 PA04 - 4 4 - 0/0 0/0 -
|
||||
5 PA05 - 5 5 - 0/1 0/1 -
|
||||
11 PA11 - 11 19 0/3 2/3 1/1 0/3
|
||||
14 PA14 - 14 - 2/2 4/2 3/0 0/4
|
||||
15 PA15 - 15 - 2/3 4/3 3/1 0/5
|
||||
16 PA16 - 0 - 1/0 3/0 2/0 0/6
|
||||
17 PA17 - 1 - 1/1 3/1 2/1 0/7
|
||||
18 PA18 - 2 - 1/2 3/2 3/0 0/2
|
||||
19 PA19 - 3 - 1/3 3/3 3/1 0/3
|
||||
22 PA22 - 6 - 3/0 5/0 4/0 0/4
|
||||
23 PA23 - 7 - 3/1 5/1 4/1 0/5
|
||||
27 PA27 - 15 - - - - -
|
||||
28 PA28 - 8 - - - - -
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
|
||||
For the definition of the table columns see the explanation at the table for
|
||||
Adafruit ItsyBitsy M0 Express :ref:`samd21_pinout_table`.
|
||||
|
||||
The default devices at the board are:
|
||||
|
||||
- UART 0 at pins 3/4, labelled D3/D4
|
||||
- I2C 2 at pins 0/2, labelled D0/D2
|
||||
- SPI 0 at pins 4/2/3, labelled D4, D2 and D0
|
||||
- DAC output on pin 1, labelled D1
|
||||
|
||||
SAMD21 Xplained PRO pin assignment table
|
||||
----------------------------------------
|
||||
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
Pin GPIO Pin name IRQ ADC Serial Serial TCC/TC TCC/TC
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
32 PB00 EXT1_PIN3 0 8 - 5/2 7/0 -
|
||||
33 PB01 EXT1_PIN4 1 9 - 5/3 7/1 -
|
||||
38 PB06 EXT1_PIN5 6 14 - - - -
|
||||
39 PB07 EXT1_PIN6 7 15 - - - -
|
||||
34 PB02 EXT1_PIN7 2 10 - 5/0 6/0 -
|
||||
35 PB03 EXT1_PIN8 3 11 - 5/1 6/1 -
|
||||
36 PB04 EXT1_PIN9 4 12 - - - -
|
||||
37 PB05 EXT1_PIN10 5 13 - - - -
|
||||
8 PA08 EXT1_PIN11 - 16 0/0 2/0 0/0 1/2
|
||||
9 PA09 EXT1_PIN12 9 17 0/1 2/1 0/1 1/3
|
||||
41 PB09 EXT1_PIN13 9 3 - 4/1 4/1 -
|
||||
40 PB08 EXT1_PIN14 8 2 - 4/0 4/0 -
|
||||
5 PA05 EXT1_PIN15 5 5 - 0/1 0/1 -
|
||||
6 PA06 EXT1_PIN16 6 6 - 0/2 1/0 -
|
||||
4 PA04 EXT1_PIN17 4 4 - 0/0 0/0 -
|
||||
7 PA07 EXT1_PIN18 7 7 - 0/3 1/1 -
|
||||
10 PA10 EXT2_PIN3 10 18 0/2 2/2 1/0 0/2
|
||||
11 PA11 EXT2_PIN4 11 19 0/3 2/3 1/1 0/3
|
||||
20 PA20 EXT2_PIN5 4 - 5/2 3/2 7/0 0/4
|
||||
21 PA21 EXT2_PIN6 5 - 5/3 3/3 7/1 0/7
|
||||
44 PB12 EXT2_PIN7 12 - 4/0 - 4/0 0/6
|
||||
45 PB13 EXT2_PIN8 13 - 4/1 - 4/1 0/7
|
||||
46 PB14 EXT2_PIN9 14 - 4/2 - 5/0 -
|
||||
47 PB15 EXT2_PIN10 15 - 4/3 - 5/1 -
|
||||
43 PB11 EXT2_PIN13 11 - - 4/3 5/1 0/5
|
||||
42 PB10 EXT2_PIN14 10 - - 4/2 5/0 0/4
|
||||
17 PA17 EXT2_PIN15 1 - 1/1 3/1 2/1 0/7
|
||||
18 PA18 EXT2_PIN16 2 - 1/2 3/2 3/0 0/2
|
||||
16 PA16 EXT2_PIN17 0 - 1/0 3/0 2/0 0/6
|
||||
19 PA19 EXT2_PIN18 3 - 1/3 3/3 3/1 0/3
|
||||
2 PA02 EXT3_PIN3 2 0 - - - -
|
||||
3 PA03 EXT3_PIN4 3 1 - - - -
|
||||
15 PA15 EXT3_PIN6 15 - 2/3 4/3 3/1 0/5
|
||||
12 PA12 EXT3_PIN7 12 - 2/0 4/0 2/0 0/6
|
||||
13 PA13 EXT3_PIN8 13 - 2/1 4/1 2/0 0/7
|
||||
28 PA28 EXT3_PIN9 8 - - - - -
|
||||
27 PA27 EXT3_PIN10 15 - - - - -
|
||||
49 PB17 EXT3_PIN15 1 - 5/1 - 6/1 0/5
|
||||
54 PB22 EXT3_PIN16 6 - - 5/2 7/0 -
|
||||
48 PB16 EXT3_PIN17 9 - 5/0 - 6/0 0/4
|
||||
55 PB23 EXT3_PIN18 7 - - 5/3 7/1 -
|
||||
62 PB30 LED 14 - - 5/0 0/0 1/2
|
||||
30 PA30 SWCLK 10 - - 1/2 1/0 -
|
||||
31 PA31 SWDIO 11 - - 1/3 1/1 -
|
||||
24 PA24 USB_DM 12 - 3/2 5/2 5/0 1/2
|
||||
25 PA25 USB_DP 13 - 3/3 5/3 5/1 1/3
|
||||
0 PA00 - 0 - - 1/0 2/0 -
|
||||
1 PA01 - 1 - - 1/1 2/1 -
|
||||
14 PA14 - 14 - 2/2 4/2 3/0 0/4
|
||||
22 PA22 - 6 - 3/0 5/0 4/0 0/4
|
||||
23 PA23 - 7 - 3/1 5/1 4/1 0/5
|
||||
63 PB31 - 15 - - 5/1 0/1 1/3
|
||||
=== ==== ============ ==== ==== ====== ====== ====== ======
|
||||
|
||||
For the definition of the table columns see the explanation at the table for
|
||||
Adafruit ItsyBitsy M0 Express :ref:`samd21_pinout_table`.
|
||||
|
||||
There are no pins labelled for default devices on this board. DAC output
|
||||
is on pin 32, labelled EXT3_PIN3
|
||||
|
||||
Minisam M4 pin assignment table
|
||||
-------------------------------
|
||||
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
Pin GPIO Pin name IRQ ADC ADC Serial Serial TC PWM PWM
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
16 PA16 D0 0 - - 1/0 3/1 2/0 1/0 0/4
|
||||
17 PA17 D1 1 - - 1/1 3/0 2/1 1/1 0/5
|
||||
19 PA19 D3 3 - - 1/3 3/3 3/1 1/3 0/7
|
||||
20 PA20 D4 4 - - 5/2 3/2 7/0 1/4 0/0
|
||||
21 PA21 D5 5 - - 5/3 3/3 7/1 1/5 0/1
|
||||
2 PA02 A0_D9 2 0 - - - - - -
|
||||
40 PB08 A1_D10 8 2 0 - 4/0 4/0 - -
|
||||
41 PB09 A2_D11 9 3 1 - 4/1 4/1 - -
|
||||
4 PA04 A3_D12 4 4 - - 0/0 0/0 - -
|
||||
5 PA05 A4_D13 5 5 - - 0/1 0/1 - -
|
||||
6 PA06 A5 6 6 - - 0/2 1/0 - -
|
||||
7 PA07 A6_D2 7 7 - - 0/3 1/1 - -
|
||||
3 PA03 AREF 3 10 - - - - - -
|
||||
0 PA00 BUTTON 0 - - - 1/0 2/0 - -
|
||||
34 PB02 DOTSTAR_CLK 2 14 - - 5/0 6/0 2/2 -
|
||||
35 PB03 DOTSTAR_DATA 9 15 - - 5/1 6/1 - -
|
||||
15 PA15 LED 15 - - 2/3 4/3 3/1 2/1 1/3
|
||||
55 PB23 MISO 7 - - 1/3 5/3 7/1 - -
|
||||
54 PB22 MOSI 22 - - 1/2 5/2 7/0 - -
|
||||
1 PA01 SCK 1 - - - 1/1 2/1 - -
|
||||
13 PA13 SCL 13 - - 2/1 4/0 2/1 0/7 1/3
|
||||
12 PA12 SDA 12 - - 2/0 4/1 2/0 0/6 1/2
|
||||
30 PA30 SWCLK 14 - - 7/2 1/2 6/0 2/0 -
|
||||
31 PA31 SWDIO 15 - - 7/3 1/3 6/1 2/1 -
|
||||
24 PA24 USB_DM 8 - - 3/2 5/2 5/0 2/2 -
|
||||
25 PA25 USB_DP 9 - - 3/3 5/3 5/1 - -
|
||||
8 PA08 - - 8 2 0/0 2/1 0/0 0/0 1/4
|
||||
9 PA09 - 9 9 3 0/1 2/0 0/1 0/1 1/5
|
||||
10 PA10 - 10 10 - 0/2 2/2 1/0 0/2 1/6
|
||||
11 PA11 - 11 11 - 0/3 2/3 1/1 0/3 1/7
|
||||
14 PA14 - 14 - - 2/2 4/2 3/0 2/0 1/2
|
||||
18 PA18 - 2 - - 1/2 3/2 3/0 1/2 0/6
|
||||
22 PA22 - 6 - - 3/0 5/1 4/0 1/6 0/2
|
||||
23 PA23 - 7 - - 3/1 5/0 4/1 1/7 0/3
|
||||
27 PA27 - 11 - - - - - - -
|
||||
42 PB10 - 10 - - - 4/2 5/0 0/4 1/0
|
||||
43 PB11 - 12 - - - 4/3 5/1 0/5 1/1
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
|
||||
For the definition of the table columns see the explanation at the table for
|
||||
Adafruit ItsyBitsy M4 Express :ref:`samd51_pinout_table`.
|
||||
|
||||
The default devices at the board are:
|
||||
|
||||
- UART 1 at pins 6/7, labelled D0/D1
|
||||
- I2C 2 at pins 14/15, labelled SDA/SCL
|
||||
- SPI 1 at pins 16/17/18, labelled MOSI, MISO and SCK
|
||||
- DAC output on pins 0 and 4, labelled A0_D9 and A4_D13
|
||||
|
||||
Seeed WIO Terminal pin assignment table
|
||||
---------------------------------------
|
||||
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
Pin GPIO Pin name IRQ ADC ADC Serial Serial TC PWM PWM
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
33 PB01 CS 1 13 - - 5/3 7/1 - -
|
||||
59 PB27 RX 13 - - 2/1 4/0 - 1/3 -
|
||||
58 PB26 TX 12 - - 2/0 4/1 - 1/2 -
|
||||
79 PC15 3V3_ENABLE 15 - - 7/3 6/3 - 0/5 1/1
|
||||
78 PC14 5V_ENABLE 14 - - 7/2 6/2 - 0/4 1/0
|
||||
40 PB08 A0_D0 8 2 0 - 4/0 4/0 - -
|
||||
41 PB09 A1_D1 9 3 1 - 4/1 4/1 - -
|
||||
7 PA07 A2_D2 7 7 - - 0/3 1/1 - -
|
||||
36 PB04 A3_D3 4 - 6 - - - - -
|
||||
37 PB05 A4_D4 5 - 7 - - - - -
|
||||
38 PB06 A5_D5 6 - 8 - - - - -
|
||||
4 PA04 A6_D6 4 4 - - 0/0 0/0 - -
|
||||
39 PB07 A7_D7 7 - 9 - - - - -
|
||||
6 PA06 A8_D8 6 6 - - 0/2 1/0 - -
|
||||
90 PC26 BUTTON_1 10 - - - - - - -
|
||||
91 PC27 BUTTON_2 11 - - 1/0 - - - -
|
||||
92 PC28 BUTTON_3 12 - - 1/1 - - - -
|
||||
107 PD11 BUZZER 6 - - 7/3 6/3 - 0/4 -
|
||||
47 PB15 GPCLK0 15 - - 4/3 - 5/1 4/1 0/3
|
||||
44 PB12 GPCLK1 12 - - 4/0 - 4/0 3/0 0/0
|
||||
45 PB13 GPCLK2 13 - - 4/1 - 4/1 3/1 0/1
|
||||
48 PB16 I2C_BCLK 0 - - 5/0 - 6/0 3/0 0/4
|
||||
20 PA20 I2S_LRCLK 4 - - 5/2 3/2 7/0 1/4 0/0
|
||||
21 PA21 I2S_SDIN 5 - - 5/3 3/3 7/1 1/5 0/1
|
||||
22 PA22 I2S_SDOUT 6 - - 3/0 5/1 4/0 1/6 0/2
|
||||
50 PB18 LCD_MISO 2 - - 5/2 7/2 - 1/0 -
|
||||
51 PB19 LCD_MOSI 3 - - 5/3 7/3 - 1/1 -
|
||||
52 PB20 LCD_SCK 4 - - 3/0 7/1 - 1/2 -
|
||||
53 PB21 LCD_CS 5 - - 3/1 7/0 - 1/3 -
|
||||
70 PC06 LCD_D/C 6 - - 6/2 - - - -
|
||||
71 PC07 LCD_RESET 9 - - 6/3 - - - -
|
||||
74 PC10 LCD_XL 10 - - 6/2 7/2 - 0/0 1/4
|
||||
76 PC12 LCD_XR 12 - - 7/0 6/1 - 0/2 1/6
|
||||
77 PC13 LCD_YD 13 - - 7/1 6/0 - 0/3 1/7
|
||||
75 PC11 LCD_YU 11 - - 6/3 7/3 - 0/1 1/5
|
||||
15 PA15 LED_BLUE 15 - - 2/3 4/3 3/1 2/1 1/3
|
||||
69 PC05 LED_LCD 5 - - 6/1 - - - -
|
||||
94 PC30 MIC 14 - 12 - - - - -
|
||||
32 PB00 MISO 9 12 - - 5/2 7/0 - -
|
||||
34 PB02 MOSI 2 14 - - 5/0 6/0 2/2 -
|
||||
35 PB03 SCK 9 15 - - 5/1 6/1 - -
|
||||
12 PA12 SCL0 12 - - 2/0 4/1 2/0 0/6 1/2
|
||||
13 PA13 SDA0 13 - - 2/1 4/0 2/1 0/7 1/3
|
||||
16 PA16 SCL1 0 - - 1/0 3/1 2/0 1/0 0/4
|
||||
17 PA17 SDA1 1 - - 1/1 3/0 2/1 1/1 0/5
|
||||
117 PD21 SD_DET 11 - - 1/3 3/3 - 1/1 -
|
||||
83 PC19 SD_CS 3 - - 6/3 0/3 - 0/3 -
|
||||
82 PC18 SD_MISO 2 - - 6/2 0/2 - 0/2 -
|
||||
80 PC16 SD_MOSI 0 - - 6/0 0/1 - 0/0 -
|
||||
81 PC17 SD_SCK 1 - - 6/1 0/0 - 0/1 -
|
||||
30 PA30 SWCLK 14 - - 7/2 1/2 6/0 2/0 -
|
||||
31 PA31 SWDIO 15 - - 7/3 1/3 6/1 2/1 -
|
||||
108 PD12 SWITCH_B 7 - - - - - 0/5 -
|
||||
116 PD20 SWITCH_U 10 - - 1/2 3/2 - 1/0 -
|
||||
104 PD08 SWITCH_X 3 - - 7/0 6/1 - 0/1 -
|
||||
105 PD09 SWITCH_Y 4 - - 7/1 6/0 - 0/2 -
|
||||
106 PD10 SWITCH_Z 5 - - 7/2 6/2 - 0/3 -
|
||||
24 PA24 USB_DM 8 - - 3/2 5/2 5/0 2/2 -
|
||||
25 PA25 USB_DP 9 - - 3/3 5/3 5/1 - -
|
||||
0 PA00 - 0 - - - 1/0 2/0 - -
|
||||
1 PA01 - 1 - - - 1/1 2/1 - -
|
||||
2 PA02 - 2 0 - - - - - -
|
||||
3 PA03 - 3 10 - - - - - -
|
||||
5 PA05 - 5 5 - - 0/1 0/1 - -
|
||||
8 PA08 - - 8 2 0/0 2/1 0/0 0/0 1/4
|
||||
9 PA09 - 9 9 3 0/1 2/0 0/1 0/1 1/5
|
||||
10 PA10 - 10 10 - 0/2 2/2 1/0 0/2 1/6
|
||||
11 PA11 - 11 11 - 0/3 2/3 1/1 0/3 1/7
|
||||
14 PA14 - 14 - - 2/2 4/2 3/0 2/0 1/2
|
||||
18 PA18 - 2 - - 1/2 3/2 3/0 1/2 0/6
|
||||
19 PA19 - 3 - - 1/3 3/3 3/1 1/3 0/7
|
||||
23 PA23 - 7 - - 3/1 5/0 4/1 1/7 0/3
|
||||
27 PA27 - 11 - - - - - - -
|
||||
42 PB10 - 10 - - - 4/2 5/0 0/4 1/0
|
||||
43 PB11 - 12 - - - 4/3 5/1 0/5 1/1
|
||||
46 PB14 - 14 - - 4/2 - 5/0 4/0 0/2
|
||||
49 PB17 - 1 - - 5/1 - 6/1 3/1 0/5
|
||||
54 PB22 - 22 - - 1/2 5/2 7/0 - -
|
||||
55 PB23 - 7 - - 1/3 5/3 7/1 - -
|
||||
56 PB24 - 8 - - 0/0 2/1 - - -
|
||||
57 PB25 - 9 - - 0/1 2/0 - - -
|
||||
60 PB28 - 14 - - 2/2 4/2 - 1/4 -
|
||||
61 PB29 - 15 - - 2/3 4/3 - 1/5 -
|
||||
62 PB30 - 14 - - 7/0 5/1 0/0 4/0 0/6
|
||||
63 PB31 - 15 - - 7/1 5/0 0/1 4/1 0/7
|
||||
64 PC00 - 0 - 10 - - - - -
|
||||
65 PC01 - 1 - 11 - - - - -
|
||||
66 PC02 - 2 - 4 - - - - -
|
||||
67 PC03 - 3 - 5 - - - - -
|
||||
68 PC04 - 4 - - 6/0 - - 0/0 -
|
||||
84 PC20 - 4 - - - - - 0/4 -
|
||||
85 PC21 - 5 - - - - - 0/5 -
|
||||
86 PC22 - 6 - - 1/0 3/1 - 0/5 -
|
||||
87 PC23 - 7 - - 1/1 3/0 - 0/7 -
|
||||
88 PC24 - 8 - - 0/2 2/2 - - -
|
||||
89 PC25 - 9 - - 0/3 2/3 - - -
|
||||
95 PC31 - 15 - 13 - - - - -
|
||||
96 PD00 - 0 - 14 - - - - -
|
||||
97 PD01 - 1 - 15 - - - - -
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
|
||||
For the definition of the table columns see the explanation at the table for
|
||||
Adafruit ItsyBitsy M4 Express :ref:`samd51_pinout_table`.
|
||||
|
||||
There seems to be no default pin assignment for this board.
|
||||
|
||||
Sparkfun SAMD51 Thing Plus pin assignment table
|
||||
------------------------------------------------
|
||||
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
Pin GPIO Pin name IRQ ADC ADC Serial Serial TC PWM PWM
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
2 PA02 A0 2 0 - - - - - -
|
||||
40 PB08 A1 8 2 0 - 4/0 4/0 - -
|
||||
41 PB09 A2 9 3 1 - 4/1 4/1 - -
|
||||
4 PA04 A3 4 4 - - 0/0 0/0 - -
|
||||
5 PA05 A4 5 5 - - 0/1 0/1 - -
|
||||
34 PB02 A5 2 14 - - 5/0 6/0 2/2 -
|
||||
13 PA13 D0 13 - - 2/1 4/0 2/1 0/7 1/3
|
||||
12 PA12 D1 12 - - 2/0 4/1 2/0 0/6 1/2
|
||||
6 PA06 D4 6 6 - - 0/2 1/0 - -
|
||||
15 PA15 D5 15 - - 2/3 4/3 3/1 2/1 1/3
|
||||
20 PA20 D6 4 - - 5/2 3/2 7/0 1/4 0/0
|
||||
21 PA21 D7 5 - - 5/3 3/3 7/1 1/5 0/1
|
||||
7 PA07 D9 7 7 - - 0/3 1/1 - -
|
||||
18 PA18 D10 2 - - 1/2 3/2 3/0 1/2 0/6
|
||||
16 PA16 D11 0 - - 1/0 3/1 2/0 1/0 0/4
|
||||
19 PA19 D12 3 - - 1/3 3/3 3/1 1/3 0/7
|
||||
17 PA17 D13 1 - - 1/1 3/0 2/1 1/1 0/5
|
||||
10 PA10 FLASH_CS 10 10 - 0/2 2/2 1/0 0/2 1/6
|
||||
11 PA11 FLASH_MISO 11 11 - 0/3 2/3 1/1 0/3 1/7
|
||||
8 PA08 FLASH_MOSI - 8 2 0/0 2/1 0/0 0/0 1/4
|
||||
9 PA09 FLASH_SCK 9 9 3 0/1 2/0 0/1 0/1 1/5
|
||||
43 PB11 MISO 12 - - - 4/3 5/1 0/5 1/1
|
||||
44 PB12 MOSI 12 - - 4/0 - 4/0 3/0 0/0
|
||||
55 PB23 RXD 7 - - 1/3 5/3 7/1 - -
|
||||
35 PB03 RXLED 9 15 - - 5/1 6/1 - -
|
||||
45 PB13 SCK 13 - - 4/1 - 4/1 3/1 0/1
|
||||
23 PA23 SCL 7 - - 3/1 5/0 4/1 1/7 0/3
|
||||
22 PA22 SDA 6 - - 3/0 5/1 4/0 1/6 0/2
|
||||
30 PA30 SWCLK 14 - - 7/2 1/2 6/0 2/0 -
|
||||
31 PA31 SWDIO 15 - - 7/3 1/3 6/1 2/1 -
|
||||
54 PB22 TXD 22 - - 1/2 5/2 7/0 - -
|
||||
27 PA27 TXLED 11 - - - - - - -
|
||||
24 PA24 USB_DM 8 - - 3/2 5/2 5/0 2/2 -
|
||||
25 PA25 USB_DP 9 - - 3/3 5/3 5/1 - -
|
||||
0 PA00 - 0 - - - 1/0 2/0 - -
|
||||
1 PA01 - 1 - - - 1/1 2/1 - -
|
||||
3 PA03 - 3 10 - - - - - -
|
||||
14 PA14 - 14 - - 2/2 4/2 3/0 2/0 1/2
|
||||
32 PB00 - 9 12 - - 5/2 7/0 - -
|
||||
33 PB01 - 1 13 - - 5/3 7/1 - -
|
||||
36 PB04 - 4 - 6 - - - - -
|
||||
37 PB05 - 5 - 7 - - - - -
|
||||
38 PB06 - 6 - 8 - - - - -
|
||||
39 PB07 - 7 - 9 - - - - -
|
||||
42 PB10 - 10 - - - 4/2 5/0 0/4 1/0
|
||||
46 PB14 - 14 - - 4/2 - 5/0 4/0 0/2
|
||||
47 PB15 - 15 - - 4/3 - 5/1 4/1 0/3
|
||||
48 PB16 - 0 - - 5/0 - 6/0 3/0 0/4
|
||||
49 PB17 - 1 - - 5/1 - 6/1 3/1 0/5
|
||||
62 PB30 - 14 - - 7/0 5/1 0/0 4/0 0/6
|
||||
63 PB31 - 15 - - 7/1 5/0 0/1 4/1 0/7
|
||||
=== ==== ============ ==== ==== ==== ====== ====== ===== ===== =====
|
||||
|
||||
For the definition of the table columns see the explanation at the table for
|
||||
Adafruit ItsyBitsy M4 Express :ref:`samd51_pinout_table`.
|
||||
|
||||
The default devices at the board are:
|
||||
|
||||
- UART 1 at pins 2/3, labelled RXD/TXD
|
||||
- I2C 5 at pins 20/21, labelled SDA/SCL
|
||||
- SPI 4 at pins 22/23/24, labelled MOSI, MISO and SCK
|
||||
- DAC output on pins 14 and 18, labelled A0 and A4
|
||||
|
||||
Scripts for creating the pin assignment tables
|
||||
----------------------------------------------
|
||||
|
||||
The tables shown above were created with small a Python script running on the target board::
|
||||
|
||||
from samd import pininfo
|
||||
from machine import Pin
|
||||
import os
|
||||
|
||||
def print_entry(e, txt):
|
||||
print(txt, end=": ")
|
||||
if e == 255:
|
||||
print(" - ", end="")
|
||||
else:
|
||||
print("%d/%d" % (e >> 4, e & 0x0f), end="")
|
||||
|
||||
def print_pininfo(pin, info):
|
||||
print("%3d" % pin, end=" ")
|
||||
print("P%c%02d" % ("ABCD"[pin // 32], pin % 32), end="")
|
||||
print(" %12s" % info[0], end="")
|
||||
print(" IRQ:%2s" % (info[1] if info[1] != 255 else "-"), end="")
|
||||
print(" ADC0:%2s" % (info[2] if info[2] != 255 else "-"), end="")
|
||||
if len(info) == 7:
|
||||
print_entry(info[3], " Serial1")
|
||||
print_entry(info[4], " Serial2")
|
||||
print_entry(info[5], " PWM1" if (info[5] >> 4) < 3 else " TC")
|
||||
print_entry(info[6], " PWM2")
|
||||
else:
|
||||
print(" ADC1:%2s" % (info[3] if info[3] != 255 else "-"), end="")
|
||||
print_entry(info[4], " Serial1")
|
||||
print_entry(info[5], " Serial2")
|
||||
print_entry(info[6], " TC")
|
||||
print_entry(info[7], " PWM1")
|
||||
print_entry(info[8], " PWM2")
|
||||
print()
|
||||
|
||||
def tblkey(i):
|
||||
name = i[1][0]
|
||||
if name != "-":
|
||||
if len(name) < 3:
|
||||
return " " + name
|
||||
else:
|
||||
return name
|
||||
else:
|
||||
return "zzzzzzz%03d" % i[0]
|
||||
|
||||
def table(num = 127):
|
||||
pintbl = []
|
||||
for i in range(num):
|
||||
try:
|
||||
pintbl.append((i, pininfo(i)))
|
||||
except:
|
||||
pass
|
||||
# print("not defined")
|
||||
|
||||
pintbl.sort(key=tblkey)
|
||||
for item in pintbl:
|
||||
print_pininfo(item[0], item[1])
|
||||
|
||||
table()
|
469
docs/samd/quickref.rst
Normal file
469
docs/samd/quickref.rst
Normal file
@ -0,0 +1,469 @@
|
||||
.. _samd_quickref:
|
||||
|
||||
Quick reference for the SAMD21/SAMD51 family
|
||||
============================================
|
||||
|
||||
.. image:: img/itsybitsy_m4_express.jpg
|
||||
:alt: Adafruit ItsyBitsy M4 Express board
|
||||
:width: 640px
|
||||
|
||||
The Adafruit ItsyBitsy M4 Express board.
|
||||
|
||||
Below is a quick reference for SAMD21/SAMD51-based boards. If it is your first time
|
||||
working with this board it may be useful to get an overview of the microcontroller:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
general.rst
|
||||
tutorial/intro.rst
|
||||
pinout.rst
|
||||
|
||||
|
||||
Installing MicroPython
|
||||
----------------------
|
||||
|
||||
See the corresponding section of tutorial: :ref:`samd_intro`. It also includes
|
||||
a troubleshooting subsection.
|
||||
|
||||
General board control
|
||||
---------------------
|
||||
|
||||
The MicroPython REPL is on the USB port, configured in VCP mode.
|
||||
Tab-completion is useful to find out what methods an object has.
|
||||
Paste mode (Ctrl-E) is useful to paste a large slab of Python code into
|
||||
the REPL.
|
||||
|
||||
The :mod:`machine` module::
|
||||
|
||||
import machine
|
||||
|
||||
machine.freq() # get the current frequency of the CPU
|
||||
machine.freq(96_000_000) # set the CPU frequency to 96 MHz
|
||||
|
||||
The range accepted by the function call is 1_000_000 to 200_000_000 (1 MHz to 200 MHz)
|
||||
for SAMD51 and 1_000_000 to 48_000_000 (1 MHz to 48 MHz) for SAMD21. The safe
|
||||
range for SAMD51 according to the data sheet is 96 MHz to 120 MHz.
|
||||
At frequencies below 8 MHz USB will be disabled. Changing the frequency below 48 MHz
|
||||
impacts the baud rates of UART, I2C and SPI. These have to be set again after
|
||||
changing the CPU frequency. The ms and µs timers are not affected by the frequency
|
||||
change.
|
||||
|
||||
|
||||
Delay and timing
|
||||
----------------
|
||||
|
||||
Use the :mod:`time <time>` module::
|
||||
|
||||
import time
|
||||
|
||||
time.sleep(1) # sleep for 1 second
|
||||
time.sleep_ms(500) # sleep for 500 milliseconds
|
||||
time.sleep_us(10) # sleep for 10 microseconds
|
||||
start = time.ticks_ms() # get millisecond counter
|
||||
delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
|
||||
|
||||
|
||||
Clock and time
|
||||
--------------
|
||||
|
||||
Two groups of functions are provided for time information. All boards have the
|
||||
datetime(), mktime() and time() functions. Boards with a 32kHz crystal also
|
||||
provide an RTC() module. The epoch start date is 1.1.2000.
|
||||
|
||||
Use the :mod:`time <time>` module::
|
||||
|
||||
import time
|
||||
|
||||
date_time = time.localtime() # Show the actual date/time information
|
||||
date_time = time.localtime(seconds) # decode the date/time form the seconds value
|
||||
seconds = time.mktime(date_time_tuple) # Convert seconds to a datetime tuple
|
||||
second = time.time() # Return the actual system time.
|
||||
|
||||
The format of the date_time tuple follows the standard. The µs value of the date_time
|
||||
tuple is ignored. On boards without the RTC module, time.localtime(seconds) sets the
|
||||
system time. Use of the Use the :mod:`RTC <RTC>` module::
|
||||
|
||||
from machine import RTC
|
||||
rtc = RTC()
|
||||
date_time = rtc.datetime() # return the actual date & time.
|
||||
rtc.datetime(date_time_tuple) # Set date & time, ignoring weekday
|
||||
date_time = rtc.now() # Return date & time in Unix order.
|
||||
rtc.calibration(value) # Set a calibration factor
|
||||
|
||||
The weekday value set will be ignored and calculated in the returned tuple from the
|
||||
actual date. rtc.now() is only provided at SAMD51 boards. The value used in the
|
||||
rtc.calibration() call has a range from -127 - 127. It defines roughly a
|
||||
ppm quantity, by which the clock can run faster or slower.
|
||||
|
||||
|
||||
Timers
|
||||
------
|
||||
|
||||
The SAMD21/SAMD51 uses software timers. Use the :ref:`machine.Timer <machine.Timer>` class::
|
||||
|
||||
from machine import Timer
|
||||
|
||||
tim0 = Timer()
|
||||
tim0.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print(0))
|
||||
|
||||
tim1 = Timer()
|
||||
tim1.init(period=2000, mode=Timer.PERIODIC, callback=lambda t:print(1))
|
||||
|
||||
The period is in milliseconds.
|
||||
|
||||
.. _samd_Pins_and_GPIO:
|
||||
|
||||
Pins and GPIO
|
||||
-------------
|
||||
|
||||
Use the :ref:`machine.Pin <machine.Pin>` class::
|
||||
|
||||
from machine import Pin
|
||||
|
||||
p0 = Pin('D0', Pin.OUT) # create output pin on GPIO0
|
||||
p0.on() # set pin to "on" (high) level
|
||||
p0.off() # set pin to "off" (low) level
|
||||
p0.value(1) # set pin to on/high
|
||||
|
||||
p2 = Pin('D2', Pin.IN) # create input pin on GPIO2
|
||||
print(p2.value()) # get value, 0 or 1
|
||||
|
||||
p4 = Pin('D4', Pin.IN, Pin.PULL_UP) # enable internal pull-up resistor
|
||||
p7 = Pin("PA07", Pin.OUT, value=1) # set pin high on creation
|
||||
|
||||
Pins can be denoted by a string or a number. The string is either the
|
||||
pin label of the respective board, like "D0" or "SDA", or in the form
|
||||
"Pxnn", where x is A,B,C or D, and nn a two digit number in the range 0-31.
|
||||
Examples: "PA03", PD31".
|
||||
|
||||
Pin numbers are the MCU port numbers in the range::
|
||||
|
||||
PA0..PA31: 0..31
|
||||
PB0..PB31: 32..63
|
||||
PC0..PC31: 64..95
|
||||
PD0..PD31: 96..127
|
||||
|
||||
Note: On Adafruit Feather and ItsyBity boards, pin D5 is connected to an external
|
||||
gate output and can therefore only be used as input.
|
||||
|
||||
UART (serial bus)
|
||||
-----------------
|
||||
|
||||
See :ref:`machine.UART <machine.UART>`. ::
|
||||
|
||||
# Use UART 3 on a ItsyBitsy M4 board
|
||||
from machine import UART
|
||||
|
||||
uart3 = UART(3, tx=Pin(1), rx=Pin(0), baudrate=115200)
|
||||
uart3.write('hello') # write 5 bytes
|
||||
uart3.read(5) # read up to 5 bytes
|
||||
|
||||
The SAMD21/SAMD51 MCUs have up to eight hardware so called SERCOM devices, which can be used as UART,
|
||||
SPI or I2C device, but not every MCU variant and board exposes all
|
||||
TX and RX pins for users. For the assignment of Pins to devices and UART signals,
|
||||
refer to the :ref:`SAMD pinout <samd_pinout>`.
|
||||
|
||||
PWM (pulse width modulation)
|
||||
----------------------------
|
||||
|
||||
Up to five timer device of the SAMD21/SAMD51 MCUs are used for creating PWM signals.
|
||||
|
||||
The PWM functions are provided by the :ref:`machine.PWM <machine.PWM>` class.
|
||||
It supports all basic methods listed for that class. ::
|
||||
|
||||
# Samples for Adafruit ItsyBitsy M4 Express
|
||||
|
||||
from machine import Pin, PWM
|
||||
|
||||
pwm = PWM(Pin(7)) # create PWM object from a pin
|
||||
pwm.freq() # get current frequency
|
||||
pwm.freq(1000) # set frequency
|
||||
pwm.duty_u16() # get current duty cycle, range 0-65535
|
||||
pwm.duty_u16(200) # set duty cycle, range 0-65535
|
||||
pwm.deinit() # turn off PWM on the pin
|
||||
|
||||
pwm # show the PWM objects properties
|
||||
|
||||
|
||||
PWM Constructor
|
||||
```````````````
|
||||
|
||||
.. class:: PWM(dest, freq, duty_u16, duty_ns, *, invert, device)
|
||||
:noindex:
|
||||
|
||||
Construct and return a new PWM object using the following parameters:
|
||||
|
||||
- *dest* is the Pin object on which the PWM is output.
|
||||
|
||||
PWM objects are provided by TCC timer module. The TCC timer modules have up
|
||||
to six channels and eight outputs. All channels of a module run at the same
|
||||
frequency, but allow for different duty cycles. Outputs are assigned to channels
|
||||
in modulo-n fashion, where n is the number of channels. Outputs of a channel
|
||||
have the same frequency and duty rate, but may have different polarity.
|
||||
So if for instance a module has four channels, output 0 and 4, 1 and 5,
|
||||
2 and 6, 3, and 7 share the same frequency and duty rate.
|
||||
|
||||
Only one of *duty_u16* and *duty_ns* should be specified at a time.
|
||||
|
||||
Keyword arguments:
|
||||
|
||||
- *freq* should be an integer which sets the frequency in Hz for the
|
||||
PWM cycle. The valid frequency range is 1 Hz to 24 MHz.
|
||||
- *duty_u16* sets the duty cycle as a ratio ``duty_u16 / 65536``.
|
||||
The duty cycle of a X channel can only be changed, if the A and B channel
|
||||
of the respective submodule is not used. Otherwise the duty_16 value of the
|
||||
X channel is 32768 (50%).
|
||||
- *duty_ns* sets the pulse width in nanoseconds. The limitation for X channels
|
||||
apply as well.
|
||||
- *invert*\=True|False. Setting a bit inverts the respective output.
|
||||
- *device*\=n Use TCC module n if available. At some pins two TCC modules could be
|
||||
used. If not device is mentioned, the software tries to use a module which is not yet
|
||||
used for a PWM signal. But if pins shall have the same frequency and/or duty cycle
|
||||
to be changed synchronously, they must be driven by the same TCC module.
|
||||
|
||||
PWM Methods
|
||||
```````````
|
||||
|
||||
The methods are identical to the generic :ref:`machine.PWM <machine.PWM>` class,
|
||||
with additional keyword arguments to the init() method, matchings those of the constructor.
|
||||
|
||||
PWM Pin Assignment
|
||||
``````````````````
|
||||
|
||||
Pins are specified in the same way as for the Pin class. For the assignment of Pins
|
||||
to PWM signals, refer to the :ref:`SAMD pinout <samd_pinout>`.
|
||||
|
||||
ADC (analog to digital conversion)
|
||||
----------------------------------
|
||||
|
||||
On the SAMD21/SAMD51 ADC functionality is available on Pins labelled 'Ann'.
|
||||
|
||||
Use the :ref:`machine.ADC <machine.ADC>` class::
|
||||
|
||||
from machine import ADC
|
||||
|
||||
adc0 = ADC(Pin("A0")) # create ADC object on ADC pin, average=16
|
||||
adc0.read_u16() # read value, 0-65536 across voltage range 0.0v - 3.3v
|
||||
adc1 = ADC(Pin("A1"), average=1) # create ADC object on ADC pin, average=1
|
||||
|
||||
The resolution of the ADC is 12 bit with 12 bit accuracy, irrespective of the
|
||||
value returned by read_u16(). If you need a higher resolution or better accuracy, use
|
||||
an external ADC.
|
||||
|
||||
ADC Constructor
|
||||
```````````````
|
||||
|
||||
.. class:: ADC(dest, *, average=16)
|
||||
:noindex:
|
||||
|
||||
Construct and return a new ADC object using the following parameters:
|
||||
|
||||
- *dest* is the Pin object on which the ADC is output.
|
||||
|
||||
Keyword arguments:
|
||||
|
||||
- *average* is used to reduce the noise. With a value of 16 the LSB noise is about 1 digit.
|
||||
|
||||
DAC (digital to analog conversion)
|
||||
----------------------------------
|
||||
|
||||
The DAC class provides a fast digital to analog conversion. Usage example::
|
||||
|
||||
from machine import DAC
|
||||
|
||||
dac0 = DAC(0) # create DAC object on DAC pin A0
|
||||
dac0.write(1023) # write value, 0-4095 across voltage range 0.0v - 3.3v
|
||||
dac1 = DAC(1) # create DAC object on DAC pin A1
|
||||
dac1.write(2000) # write value, 0-4095 across voltage range 0.0v - 3.3v
|
||||
|
||||
The resolution of the DAC is 12 bit for SAMD51 and 10 bit for SAMD21. SAMD21 devices
|
||||
have 1 DAC channel at GPIO PA02, SAMD51 devices have 2 DAC channels at GPIO PA02 and PA05.
|
||||
|
||||
Software SPI bus
|
||||
----------------
|
||||
|
||||
Software SPI (using bit-banging) works on all pins, and is accessed via the
|
||||
:ref:`machine.SoftSPI <machine.SoftSPI>` class. ::
|
||||
|
||||
from machine import Pin, SoftSPI
|
||||
|
||||
# construct a SoftSPI bus on the given pins
|
||||
# polarity is the idle state of SCK
|
||||
# phase=0 means sample on the first edge of SCK, phase=1 means the second
|
||||
spi = SoftSPI(baudrate=100000, polarity=1, phase=0, sck=Pin(7), mosi=Pin(9), miso=Pin(10))
|
||||
|
||||
spi.init(baudrate=200000) # set the baud rate
|
||||
|
||||
spi.read(10) # read 10 bytes on MISO
|
||||
spi.read(10, 0xff) # read 10 bytes while outputting 0xff on MOSI
|
||||
|
||||
buf = bytearray(50) # create a buffer
|
||||
spi.readinto(buf) # read into the given buffer (reads 50 bytes in this case)
|
||||
spi.readinto(buf, 0xff) # read into the given buffer and output 0xff on MOSI
|
||||
|
||||
spi.write(b'12345') # write 5 bytes on MOSI
|
||||
|
||||
buf = bytearray(4) # create a buffer
|
||||
spi.write_readinto(b'1234', buf) # write to MOSI and read from MISO into the buffer
|
||||
spi.write_readinto(buf, buf) # write buf to MOSI and read MISO back into buf
|
||||
|
||||
The highest supported baud rate is 500000.
|
||||
|
||||
Hardware SPI bus
|
||||
----------------
|
||||
|
||||
The SAMD21/SAMD51 MCUs have up to eight hardware so called SERCOM devices, which can be used as UART,
|
||||
SPI or I2C device, but not every MCU variant and board exposes all
|
||||
signal pins for users. Hardware SPI is accessed via the
|
||||
:ref:`machine.SPI <machine.SPI>` class and has the same methods as software SPI above::
|
||||
|
||||
from machine import SPI
|
||||
|
||||
spi = SPI(1, sck=Pin("SCK"), mosi=Pin("MOSI"), miso=Pin("MISO"), baudrate=10000000)
|
||||
spi.write('Hello World')
|
||||
|
||||
If miso is not specified, it is not used. For the assignment of Pins to SPI devices and signals, refer to
|
||||
:ref:`SAMD pinout <samd_pinout>`.
|
||||
|
||||
Note: Even if the highest reliable baud rate at the moment is about 24 Mhz,
|
||||
setting a baud rate will not always result in exactly that frequency, especially
|
||||
at high baud rates.
|
||||
|
||||
Software I2C bus
|
||||
----------------
|
||||
|
||||
Software I2C (using bit-banging) works on all output-capable pins, and is
|
||||
accessed via the :ref:`machine.SoftI2C <machine.SoftI2C>` class::
|
||||
|
||||
from machine import Pin, SoftI2C
|
||||
|
||||
i2c = SoftI2C(scl=Pin(10), sda=Pin(11), freq=100000)
|
||||
|
||||
i2c.scan() # scan for devices
|
||||
|
||||
i2c.readfrom(0x3a, 4) # read 4 bytes from device with address 0x3a
|
||||
i2c.writeto(0x3a, '12') # write '12' to device with address 0x3a
|
||||
|
||||
buf = bytearray(10) # create a buffer with 10 bytes
|
||||
i2c.writeto(0x3a, buf) # write the given buffer to the slave
|
||||
|
||||
The highest supported freq is 400000.
|
||||
|
||||
Hardware I2C bus
|
||||
----------------
|
||||
|
||||
The SAMD21/SAMD51 MCUs have up to eight hardware so called SERCOM devices,
|
||||
which can be used as UART, SPI or I2C device, but not every MCU variant
|
||||
and board exposes all signal pins for users.
|
||||
For the assignment of Pins to devices and I2C signals, refer to :ref:`SAMD pinout <samd_pinout>`.
|
||||
|
||||
Hardware I2C is accessed via the :ref:`machine.I2C <machine.I2C>` class and
|
||||
has the same methods as software SPI above::
|
||||
|
||||
from machine import I2C
|
||||
|
||||
i2c = I2C(2, scl=Pin("SCL"), sda=Pin("SDA"), freq=400_000)
|
||||
i2c.writeto(0x76, b"Hello World")
|
||||
|
||||
OneWire driver
|
||||
--------------
|
||||
|
||||
The OneWire driver is implemented in software and works on all pins::
|
||||
|
||||
from machine import Pin
|
||||
import onewire
|
||||
|
||||
ow = onewire.OneWire(Pin(12)) # create a OneWire bus on GPIO12
|
||||
ow.scan() # return a list of devices on the bus
|
||||
ow.reset() # reset the bus
|
||||
ow.readbyte() # read a byte
|
||||
ow.writebyte(0x12) # write a byte on the bus
|
||||
ow.write('123') # write bytes on the bus
|
||||
ow.select_rom(b'12345678') # select a specific device by its ROM code
|
||||
|
||||
There is a specific driver for DS18S20 and DS18B20 devices::
|
||||
|
||||
import time, ds18x20
|
||||
ds = ds18x20.DS18X20(ow)
|
||||
roms = ds.scan()
|
||||
ds.convert_temp()
|
||||
time.sleep_ms(750)
|
||||
for rom in roms:
|
||||
print(ds.read_temp(rom))
|
||||
|
||||
Be sure to put a 4.7k pull-up resistor on the data line. Note that
|
||||
the ``convert_temp()`` method must be called each time you want to
|
||||
sample the temperature.
|
||||
|
||||
DHT driver
|
||||
----------
|
||||
|
||||
The DHT driver is implemented in software and works on all pins::
|
||||
|
||||
import dht
|
||||
import machine
|
||||
|
||||
d = dht.DHT11(machine.Pin(4))
|
||||
d.measure()
|
||||
d.temperature() # eg. 23 (°C)
|
||||
d.humidity() # eg. 41 (% RH)
|
||||
|
||||
d = dht.DHT22(machine.Pin(4))
|
||||
d.measure()
|
||||
d.temperature() # eg. 23.6 (°C)
|
||||
d.humidity() # eg. 41.3 (% RH)
|
||||
|
||||
Be sure to have a 4.7k pull-up resistor on the data line. Some
|
||||
DHT modules may already have one.
|
||||
|
||||
Driving an APA102 LED
|
||||
---------------------
|
||||
|
||||
The APA102 on some Adafruit boards can be controlled using SoftSPI::
|
||||
|
||||
from machine import SoftSPI, Pin
|
||||
# create the SPI object. miso can be any unused pin.
|
||||
spi=SoftSPI(sck=Pin(25), mosi=Pin(26), miso=Pin(14))
|
||||
|
||||
# define a little function that writes the data with
|
||||
# preamble and postfix
|
||||
def write(red, green, blue):
|
||||
spi.write(b"\x00\x00\x00\x00\xff")
|
||||
spi.write(bytearray((blue, green, red)))
|
||||
spi.write(b"\xff\xff\xff")
|
||||
|
||||
# set the LED to red
|
||||
write(128, 0, 0)
|
||||
|
||||
Since SoftSPI does not allow miso to be undefined, miso has to be
|
||||
assigned to an otherwise unused pin.
|
||||
|
||||
Driving a Neopixel LED
|
||||
----------------------
|
||||
|
||||
The built-in machine.bitstream() method supports driving Neopixel LEDs in combination
|
||||
with the Neopixel driver from the MicroPython driver library::
|
||||
|
||||
import neopixel
|
||||
import machine
|
||||
|
||||
# 1 LED connected to Pin D8 on Adafruit Feather boards
|
||||
p = machine.Pin(8, machine.Pin.OUT)
|
||||
n = neopixel.NeoPixel(p, 1)
|
||||
|
||||
# set the led to red.
|
||||
n[0] = (128, 0, 0)
|
||||
|
||||
# Update the LED.
|
||||
n.write()
|
||||
|
||||
machine.bitstream() is set up for a SAMD21 clock frequency of 48MHz and a SAMD51
|
||||
clock frequency of 120 MHz. At other clock frequencies, the timing will not fit.
|
||||
|
||||
Transferring files
|
||||
------------------
|
||||
|
||||
Files can be transferred to the SAMD21/SAMD51 devices for instance with the
|
||||
:ref:`mpremote <mpremote>` tool. See the MicroPython forum for community-supported
|
||||
alternatives to transfer files to an SAMD21/SAMD51 board, like rshell or Thonny.
|
84
docs/samd/tutorial/intro.rst
Normal file
84
docs/samd/tutorial/intro.rst
Normal file
@ -0,0 +1,84 @@
|
||||
.. _samd_intro:
|
||||
|
||||
Getting started with MicroPython on the SAMD
|
||||
==============================================
|
||||
|
||||
Using MicroPython is a great way to get the most of your SAMD board. And
|
||||
vice versa, the SAMD chip is a great platform for using MicroPython. This
|
||||
tutorial will guide you through setting up MicroPython, getting a prompt, using
|
||||
the hardware peripherals, and controlling some external components.
|
||||
|
||||
Let's get started!
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
The first thing you need is a board with an SAMD chip. The MicroPython
|
||||
software supports the SAMD chip itself and any board should work. The main
|
||||
characteristic of a board is how the GPIO pins are connected to the outside
|
||||
world, and whether it includes a built-in USB-serial converter to make the
|
||||
UART available to your PC.
|
||||
|
||||
Names of pins will be given in this tutorial using the board names ("D0")
|
||||
and it should be straightforward to find which pin this corresponds to on your
|
||||
particular board.
|
||||
|
||||
Powering the board
|
||||
------------------
|
||||
|
||||
If your board has a USB connector on it then most likely it is powered through
|
||||
this when connected to your PC. Otherwise you will need to power it directly.
|
||||
Please refer to the documentation for your board for further details.
|
||||
|
||||
Getting the firmware
|
||||
--------------------
|
||||
|
||||
Firmware versions are provided at the
|
||||
`MicroPython download page <https://micropython.org/download/?port=samd>`_.
|
||||
You can download the most recent MicroPython firmware .uf2 file to load
|
||||
onto your SAMD device. From that download page you have two main choices:
|
||||
|
||||
* stable firmware builds
|
||||
* daily firmware builds
|
||||
|
||||
If you are just starting with MicroPython, the best bet is to go for the stable
|
||||
firmware builds. If you are an advanced, experienced MicroPython SAMD user
|
||||
who would like to follow development closely and help with testing new
|
||||
features, there are daily builds. They run through the same rigid internal
|
||||
test sequence as the stable builds, but the firmware features may change.
|
||||
|
||||
Deploying the firmware
|
||||
----------------------
|
||||
|
||||
Once you have the MicroPython firmware you need to load it onto your
|
||||
SAMD device. Most of the boards support the following easy procedure for
|
||||
firmware upload.
|
||||
|
||||
- Connect the board by an USB-A/USB-Micro cable to your PC.
|
||||
- Push the reset button twice. Then, a drive should pop up at the
|
||||
PC's file manager. Many boards have a on-board RGB LED, which first lights up
|
||||
red, and then changes it's colour to green. The timing of the double push is
|
||||
sometimes tricky. So you may have to try to get the proper rhythm.
|
||||
- Copy the .uf2 file to that newly opened drive. A LED on the board may
|
||||
flash a while. When the copy is finished, the board drive will disappear and the
|
||||
RGB led will turn from green to the initial state.
|
||||
|
||||
Serial prompt
|
||||
-------------
|
||||
|
||||
Once you have the firmware on the device you can access the REPL (Python prompt)
|
||||
over USB.
|
||||
|
||||
From there you can follow the SAMD tutorial.
|
||||
|
||||
Troubleshooting installation problems
|
||||
-------------------------------------
|
||||
|
||||
If you experience problems during flashing or with running firmware immediately
|
||||
after it, here are some troubleshooting recommendations:
|
||||
|
||||
* Be aware of and try to exclude hardware problems. There are two common
|
||||
problems: bad power source quality, and worn-out/defective Flash ROM.
|
||||
Speaking of power source, not just raw amperage is important, but also low
|
||||
ripple and noise/EMI in general. The most reliable and convenient power
|
||||
source is a USB port.
|
4
docs/templates/topindex.html
vendored
4
docs/templates/topindex.html
vendored
@ -81,6 +81,10 @@
|
||||
<a class="biglink" href="{{ pathto("renesas-ra/quickref") }}">Quick reference for the Renesas RA</a><br/>
|
||||
<span class="linkdescr">general information for Renesas RA based boards, snippets of useful code, and a tutorial</span>
|
||||
</p>
|
||||
<p class="biglink">
|
||||
<a class="biglink" href="{{ pathto("samd/quickref") }}">Quick reference for the SAMD21/SAMD51</a><br/>
|
||||
<span class="linkdescr">general information for SAMD21/SAMD51 based boards, snippets of useful code, and a tutorial</span>
|
||||
</p>
|
||||
</td>
|
||||
</tr></table>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user