2019-06-22 14:03:41 +01:00
|
|
|
Port of MicroPython to Microchip SAMD MCUs
|
|
|
|
==========================================
|
|
|
|
|
|
|
|
Supports SAMD21 and SAMD51.
|
|
|
|
|
2021-05-24 06:55:30 +01:00
|
|
|
## Features:
|
|
|
|
|
|
|
|
### REPL
|
|
|
|
|
2019-06-22 14:03:41 +01:00
|
|
|
- REPL over USB VCP
|
2021-05-24 06:55:30 +01:00
|
|
|
- REPL over USART using board specified USART pins (initialised on startup).
|
|
|
|
- The USART Pins are board specific, defined in `boards/$(BOARD)/mpconfigboard.h`,
|
|
|
|
and set at compile time. See the table below. At this stage, the USART cannot be
|
|
|
|
moved to different pins unless `mpconfigboard.h` is edited and the port recompiled.
|
|
|
|
- Two USART functions are accessible through MicroPython:
|
|
|
|
- `uart_init()`. The 'C' function behind this function is what initialises the
|
|
|
|
USART on startup. Calling this function in MicroPython resets any other peripheral
|
|
|
|
operating on these pins and reconnects the USART SERCOM to the designated pins.
|
|
|
|
- `uart_deinit()`. This simply 'disconnects' the SERCOM from the pins. The USART
|
|
|
|
remains operating over USB VCP to maintain access to the REPL.
|
|
|
|
|
|
|
|
### Boards
|
|
|
|
|
|
|
|
| Board | USART | LFS1 Flash size | Tested |
|
|
|
|
| ------------------------------------------------------------ | ----------------------------------------------------------- | --------------- | ------ |
|
|
|
|
| ADAFRUIT_FEATHER_M0_EXPRESS | Tx=PA10=SERCOM0/PAD[2], Rx=PA11=SERCOM0/PAD[3] | 64k | No |
|
|
|
|
| ADAFRUIT_ITSYBITSY_M4_EXPRESS | Tx=TX_D1=PA17=SERCOM3/PAD[0], Rx=RX_D0=PA16=SERCOM3/PAD[1] | 128k | No |
|
|
|
|
| ADAFRUIT_TRINKET_M0 | Tx=D4=PA06=SERCOM0/PAD[2], Rx=D3=PA07=SERCOM0/PAD[3] | 64k | No |
|
|
|
|
| MINISAM_M4 | Tx=TX_D1=PA17=SERCOM3/PAD[0], Rx=RX_D0=PA16=SERCOM3/PAD[1] | 128k | No |
|
|
|
|
| SAMD21_XPLAINED_PRO | Tx=PA10=SERCOM0/PAD[2], Rx=PA11=SERCOM0/PAD[3] | 64k | No |
|
|
|
|
| SEEED_WIO_TERMINAL | Tx=BCM14=PB27=SERCOM2/PAD[0], Rx=BCM15=PB26=SERCOM2/PAD[1] | 128k | Yes |
|
|
|
|
| SEEED_XIAO | Tx=A6=PB8=SERCOM4/PAD[0], Rx=A7=PB9=SERCOM4/PAD[1] | 64k | Yes |
|
|
|
|
|
|
|
|
Note: all USARTs are set to: async, 8 bit, 1 stop bit, no parity, 115200 bps.
|
|
|
|
|
|
|
|
### Modules
|
|
|
|
|
|
|
|
- Internal modules and functions:
|
|
|
|
|
|
|
|
`>>>help('modules')`
|
|
|
|
`__main__ micropython uheapq ustruct`
|
|
|
|
`_boot samd uio usys`
|
|
|
|
`_uasyncio uarray ujson utime`
|
|
|
|
`builtins uasyncio uos uzlib`
|
|
|
|
`gc ubinascii urandom`
|
|
|
|
`machine uctypes ure`
|
|
|
|
`Plus any modules on the filesystem`
|
|
|
|
|
|
|
|
#### Flash
|
|
|
|
|
|
|
|
- Internal Flash Block Device `samd.Flash()` initialised with littlefs1 in frozen module '`_boot.py`'.
|
|
|
|
|
|
|
|
- **No external SPI Flash driver** (ToDo).
|
|
|
|
|
|
|
|
- Block Device size is set in `ports/samd/boards/$(BOARD)/mpconfigboard.h` :
|
|
|
|
|
|
|
|
- SAMD21: (eg; SEEED_XIAO): 64k `0xFFFF`
|
|
|
|
|
|
|
|
* SAMD51: (eg; M4's): 128k `0x1FFFF`
|
|
|
|
|
|
|
|
#### Pins & LEDs
|
|
|
|
|
|
|
|
##### `machine.Pin()` class.
|
|
|
|
|
|
|
|
- GPIO methods & constants:
|
|
|
|
|
|
|
|
value IN OUT PULL_DOWN
|
|
|
|
PULL_UP high init low
|
|
|
|
off on toggle
|
|
|
|
|
|
|
|
- Each board has its own pin numbering scheme, so please see the table below (the
|
|
|
|
structure is defined in`boards/$(BOARD)/pins.c`) for pin numbers referenced
|
|
|
|
(index) by 'Pin'. Eg; `SEEED_XIAO/pins.c`: `{{&machine_pin_type}, PIN_PA02}, // A0/D0`
|
|
|
|
means MicroPython `Pin(0)` is SEEED_XIAO pin "A0/D0" on SAMD21G18A PortA, Pin2.
|
|
|
|
|
|
|
|
- Note: on the SEEED_XIAO, if the TX & TX pins are used by the `Pin()` class, the `Pin()`
|
|
|
|
initialisation disconnects the pins from the SERCOM similar to the way
|
|
|
|
`machine.uart_deinit()` does.
|
|
|
|
|
|
|
|
| MicroPython Pin() | SAMD51 Pin#/ ItsyBitsy_M4 | SAMD21 Pin#/ Feather_M0 | SAMD21 Pin#/ Xplained Pro | SAMD21 Pin#/ Trinket_M0 | SAMD51 Pin#/ Minisam | SAMD21 Pin#/ SEEED_XIAO | SAMD51 Pin#/ SEEED_WIO_TERMINAL |
|
|
|
|
| ----------------- | -------------------------- | ------------------------ | ----------------------------------- | ------------------------ | -------------------- | ----------------------- | ------------------------------------- |
|
|
|
|
| Pin(0) | PA16/ RX_D0 | PA11/ D0 | PB00/ PIN3_ADC(+) (ext1) | PA08/ D0 | PA02/ A0,D9 | PA02 / A0/D0 | PB08 / A0/D0 |
|
|
|
|
| Pin(1) | PA17/ TX_D1 | PA10/ D1 | PB01/ PIN4_ADC(-) (ext1) | PA02/ D1 | PB08/ A1,D10 | PA04 / A1/D1 | PB09 / A1/D1 |
|
|
|
|
| Pin(2) | PA07/ D2 | PA14/ D2 | PB06/ PIN5_GPIO (ext1) | PA09/ D2 | PB09/ A2,D11 | PA10 / A2/D2 | PA07 / A2/D2 |
|
|
|
|
| Pin(3) | PB22/ D3 | PA09/ D3/ | PB07/ PIN6_GPIO (ext1) | PA07/ D3/ RxD | PA04/ A3,D12 | PA11 / A3/D3 | PB04 / A3/D3 |
|
|
|
|
| Pin(4) | PA14/ D4 | PA08/ D4/ | PB02/ PIN7_PWM(+) (ext1) | PA06/ D4/ TxD | PA05/ A4,D13 | PA08 / A4/D4 | PB05 / A4/D4 |
|
|
|
|
| Pin(5) | PA15/ D5 | PA15/ D5 | PB03/ PIN8_PWM(-) (ext1) | | PA06/ A5 | PA09 / A5/D5 | PB06 / A5/D5 |
|
|
|
|
| Pin(6) | -1/ D6 | PA20/ D6 | PB04/ PIN9_IRQ/GPIO (ext1) | | PA16/ RX_D0 | PB08 / A6/D6/TX | PA04 / A6/D6 |
|
|
|
|
| Pin(7) | PA18/ D7 | PA21/ D7 | PB05/ PIN10_SPI_SS_B/GPIO (ext1) | | PA17/ TX_D1 | PB09 / A7/D7/RX | PB07 / A7/D7 |
|
|
|
|
| Pin(8) | -1/ D8 | PA06/ D8/ | PA08/ PIN11_TWI_SDA (ext1) | | PA07/ D2,A6 | PA07 / A8/D8 | PA06 / A8/D8 |
|
|
|
|
| Pin(9) | PA19/ D9 | PA07/ D9/ | PA09/ PIN12_TWI_SCL (ext1) | | PA19/ D3 | PA05 / A9/D9 | PD08 / SWITCH_X |
|
|
|
|
| Pin(10) | PA20/ D10 | PA18/ D10 | PB09/ PIN13_UART_RX (ext1) | | PA20/ D4 | PA06 / A10/D10 | PD09 / SWITCH_Y |
|
|
|
|
| Pin(11) | PA21/ D11 | PA16/ D11 | PB08/ PIN14_UART_TX (ext1) | | PA21/ D5 | | PD10 / SWITCH_Z |
|
|
|
|
| Pin(12) | PA23/ D12 | PA19/ D12 | PA05/ PIN15_SPI_SS_A (ext1) | | PA00/ BUTTON | | PD12 / SWITCH_B |
|
|
|
|
| Pin(13) | PA22/ D13 | PA17/ D13/ | PA06/ PIN16_SPI_MOSI (ext1) | | | | PD20 / SWITCH_U |
|
|
|
|
| Pin(14) | PA02/ A0 | PA02/ A0 | PA04/ PIN17_SPI_MISO (ext1) | | | | PC26 / BUTTON_1 |
|
|
|
|
| Pin(15) | PA05/ A1 | PB08/ A1 | PA07/ PIN18_SPI_SCK (ext1) | | | | PC27 / BUTTON_2 |
|
|
|
|
| Pin(16) | PB08/ A2 | PB09/ A2 | PA10/ PIN3_ADC(+) (ext2) | | | | PC28 / BUTTON_3 |
|
|
|
|
| Pin(17) | PB09/ A3 | PA04/ A3/ | PA11/ PIN4_ADC(-) (ext2) | | | | PD11 / BUZZER_CTR |
|
|
|
|
| Pin(18) | PA04/ A4 | PA05/ A4/ | PA20/ PIN5_GPIO (ext2) | | | | PC14/ 5V_OUTPUT_CTR- '1'= 5V on hdr |
|
|
|
|
| Pin(19) | PA06/ A5 | PB02/ A5 | PA21/ PIN6_GPIO (ext2) | | | | PC15/ 3V3_OUTPUT_CTR- '0'= 3V3 on hdr |
|
|
|
|
| Pin(20) | | | PB12/ PIN7_PWM(+) (ext2) | | | | |
|
|
|
|
| Pin(21) | | | PB13/ PIN8_PWM(-) (ext2) | | | | |
|
|
|
|
| Pin(22) | | | PB14/ PIN9_IRQ/GPIO (ext2) | | | | |
|
|
|
|
| Pin(23) | | | PB15/ PIN10_SPI_SS_B/GPIO (ext2) | | | | |
|
|
|
|
| Pin(24) | | | -1 / PIN11_TWI_SDA already defined | | | | |
|
|
|
|
| Pin(25) | | | -1 / PIN12_TWI_SCL already defined | | | | |
|
|
|
|
| Pin(26) | | | PB11/ PIN13_UART_RX (ext2) | | | | |
|
|
|
|
| Pin(27) | | | PB10/ PIN14_UART_TX (ext2) | | | | |
|
|
|
|
| Pin(28) | | | PA17/ PIN15_SPI_SS_A (ext2) | | | | |
|
|
|
|
| Pin(29) | | | PA18/ PIN16_SPI_MOSI (ext2) | | | | |
|
|
|
|
| Pin(30) | | | PA16/ PIN17_SPI_MISO (ext2) | | | | |
|
|
|
|
| Pin(31) | | | PA19/ PIN18_SPI_SCK (ext2) | | | | |
|
|
|
|
| Pin(32) | | | PA02/ PIN3_ADC(+) (ext3) | | | | |
|
|
|
|
| Pin(33) | | | PA03/ PIN4_ADC(-) (ext3) | | | | |
|
|
|
|
| Pin(34) | | | -1/ PIN5_GPIO already defined | | | | |
|
|
|
|
| Pin(35) | | | PA15/ PIN6_GPIO; USER_BUTTON (ext3) | | | | |
|
|
|
|
| Pin(36) | | | PA12/ PIN7_PWM(+) (ext3) | | | | |
|
|
|
|
| Pin(37) | | | PA13/ PIN8_PWM(-) (ext3) | | | | |
|
|
|
|
| Pin(38) | | | PA28/ PIN9_IRQ/GPIO (ext3) | | | | |
|
|
|
|
| Pin(39) | | | PA27/ PIN10_SPI_SS_B/GPIO (ext3) | | | | |
|
|
|
|
| Pin(40) | | | -1/ PIN11_TWI_SDA already defined | | | | |
|
|
|
|
| Pin(41) | | | -1/ PIN12_TWI_SCL already defined | | | | |
|
|
|
|
| Pin(42) | | | -1/ PIN13_UART_RX already defined | | | | |
|
|
|
|
| Pin(43) | | | -1/ PIN14_UART_TX already defined | | | | |
|
|
|
|
| Pin(44) | | | PA15/ PIN6_GPIO; USER_BUTTON (ext3) | | | | |
|
|
|
|
| Pin(45) | | | PB22/ PIN16_SPI_MOSI (ext3) | | | | |
|
|
|
|
| Pin(46) | | | PB16/ PIN17_SPI_MISO (ext3) | | | | |
|
|
|
|
| Pin(47) | | | PB23/ PIN18_SPI_SCK (ext3) | | | | |
|
|
|
|
|
|
|
|
##### `machine.LED()` class.
|
|
|
|
|
|
|
|
- GPIO methods & constants:
|
|
|
|
|
|
|
|
`value OUT high low`
|
|
|
|
`off on toggle`
|
|
|
|
|
|
|
|
- As above, please see `boards/$(BOARD)/pins.c` for pin numbers referenced by 'LED'.
|
|
|
|
Eg; `SEEED_XIAO/pins.c`: `{{&machine_led_type}, PIN_PA17}, // W13` means MicroPython
|
|
|
|
`LED(0)` is SEEED_XIAO LED "W13" connected to SAMD21G18A PortA, Pin17.
|
|
|
|
|
|
|
|
| MicroPython LED() | SAMD51 Pin#/ ItsyBitsy_M4 | SAMD21 Pin#/ Feather_M0 | SAMD21 Pin#/ Xplained Pro | SAMD21 Pin#/ Trinket_M0 | SAMD51 Pin#/ Minisam | SAMD21 Pin#/ SEEED_XIAO | SAMD51 Pin#/ SEEED_WIO_TERMINAL |
|
|
|
|
| ------------------ | -------------------------- | ------------------------ | -------------------------- | ------------------------ | --------------------- | ------------------------ | -------------------------------- |
|
|
|
|
| LED(0) | PA22/ D13/ user LED | PA17/ D13/ user LED | PB30/ USER_LED | PA10/ USER_LED | PA15/ LED | PA17 / W13 | PA15 / USER_LED (Blue) |
|
|
|
|
| LED(1) | | | | | | PA18 / RX_LED | PC05 / LCD_BACKLIGHT_CTR |
|
|
|
|
| LED(2) | | | | | | PA19 / TX_LED | |
|