20e7313453
Two new compile flags are: MICROPY_HW_DFLL_USB_SYNC: Effective only if DFLL48 does not run from the crystal. It will synchronize the DFLL48M clock with the USB's SOF pulse. If no USB is connected, it will fall back to open loop mode. The DFLL48M clock is then pretty precise, but with a higher clock jitter at SAMD51 devices. MICROPY_HW_MCU_OSC32KULP: Effective only if the devics uses a crystal as clock source. Run the MCU clock from the ULP 32kHz oszillator instead of the crystal. This flag was added to cater for a interference problem of the crystal and Neopixel/Debug pins at Adafruit FEATHER Mx boards, which causes the board to crash. Drawback: ticks_ms() and time.time() vs. than ticks_us() and the peripherals like PWM run at not synchronous clocks. |
||
---|---|---|
.. | ||
boards | ||
mcu | ||
modules | ||
Makefile | ||
README.md | ||
clock_config.h | ||
help.c | ||
machine_adc.c | ||
machine_bitstream.c | ||
machine_dac.c | ||
machine_i2c.c | ||
machine_led.c | ||
machine_pin.c | ||
machine_pwm.c | ||
machine_spi.c | ||
machine_timer.c | ||
machine_uart.c | ||
machine_wdt.c | ||
main.c | ||
modmachine.c | ||
modmachine.h | ||
modsamd.c | ||
moduos.c | ||
modutime.c | ||
mpconfigport.h | ||
mphalport.c | ||
mphalport.h | ||
pendsv.c | ||
pendsv.h | ||
pin_af.c | ||
pin_af.h | ||
qstrdefsport.h | ||
samd_flash.c | ||
samd_isr.c | ||
samd_soc.c | ||
samd_soc.h | ||
sections.ld | ||
tusb_config.h | ||
tusb_port.c |
README.md
Port of MicroPython to Microchip SAMD MCUs
Supports SAMD21 and SAMD51.
Features:
REPL
- REPL over USB VCP
- 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 unlessmpconfigboard.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.
- The USART Pins are board specific, defined in
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
- SAMD21: (eg; SEEED_XIAO): 64k
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 MicroPythonPin(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, thePin()
initialisation disconnects the pins from the SERCOM similar to the waymachine.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 MicroPythonLED(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 |