From 6d5041e74cddd25d69fe9eacc96ae03bc3b833ed Mon Sep 17 00:00:00 2001 From: sago35 Date: Sun, 14 Jun 2020 15:50:23 +0900 Subject: [PATCH 1/9] Copy itsybitsy-m0 to xiao --- src/machine/board_xiao.go | 136 ++++++++++++++++++++++++++++++++++++++ targets/xiao.json | 8 +++ 2 files changed, 144 insertions(+) create mode 100644 src/machine/board_xiao.go create mode 100644 targets/xiao.json diff --git a/src/machine/board_xiao.go b/src/machine/board_xiao.go new file mode 100644 index 0000000000..598edd4a64 --- /dev/null +++ b/src/machine/board_xiao.go @@ -0,0 +1,136 @@ +// +build sam,atsamd21,itsybitsy_m0 + +package machine + +import ( + "device/sam" + "runtime/interrupt" +) + +// used to reset into bootloader +const RESET_MAGIC_VALUE = 0xf01669ef + +// GPIO Pins +const ( + D0 = PA11 // UART0 RX + D1 = PA10 // UART0 TX + D2 = PA14 + D3 = PA09 // PWM available + D4 = PA08 // PWM available + D5 = PA15 // PWM available + D6 = PA20 // PWM available + D7 = PA21 // PWM available + D8 = PA06 // PWM available + D9 = PA07 // PWM available + D10 = PA18 // can be used for PWM or UART1 TX + D11 = PA16 // can be used for PWM or UART1 RX + D12 = PA19 // PWM available + D13 = PA17 // PWM available +) + +// Analog pins +const ( + A0 = PA02 // ADC/AIN[0] + A1 = PB08 // ADC/AIN[2] + A2 = PB09 // ADC/AIN[3] + A3 = PA04 // ADC/AIN[4] + A4 = PA05 // ADC/AIN[5] + A5 = PB02 // ADC/AIN[10] +) + +const ( + LED = D13 +) + +// UART0 aka USBCDC pins +const ( + USBCDC_DM_PIN = PA24 + USBCDC_DP_PIN = PA25 +) + +// UART1 pins +const ( + UART_TX_PIN = D10 + UART_RX_PIN = D11 +) + +// UART1 on the ItsyBitsy M0. +var ( + UART1 = UART{ + Buffer: NewRingBuffer(), + Bus: sam.SERCOM1_USART, + SERCOM: 1, + } +) + +func init() { + UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM1, UART1.handleInterrupt) +} + +// I2C pins +const ( + SDA_PIN = PA22 // SDA: SERCOM3/PAD[0] + SCL_PIN = PA23 // SCL: SERCOM3/PAD[1] +) + +// I2C on the ItsyBitsy M0. +var ( + I2C0 = I2C{ + Bus: sam.SERCOM3_I2CM, + SERCOM: 3, + } +) + +// SPI pins +const ( + SPI0_SCK_PIN = PB11 // SCK: SERCOM4/PAD[3] + SPI0_MOSI_PIN = PB10 // MOSI: SERCOM4/PAD[2] + SPI0_MISO_PIN = PA12 // MISO: SERCOM4/PAD[0] +) + +// SPI on the ItsyBitsy M0. +var ( + SPI0 = SPI{ + Bus: sam.SERCOM4_SPI, + SERCOM: 4, + } +) + +// "Internal" SPI pins; SPI flash is attached to these on ItsyBitsy M0 +const ( + SPI1_CS_PIN = PA27 + SPI1_SCK_PIN = PB23 + SPI1_MOSI_PIN = PB22 + SPI1_MISO_PIN = PB03 +) + +// "Internal" SPI on Sercom 5 +var ( + SPI1 = SPI{ + Bus: sam.SERCOM5_SPI, + SERCOM: 5, + } +) + +// I2S pins +const ( + I2S_SCK_PIN = PA10 + I2S_SD_PIN = PA08 + I2S_WS_PIN = NoPin // TODO: figure out what this is on ItsyBitsy M0. +) + +// I2S on the ItsyBitsy M0. +var ( + I2S0 = I2S{Bus: sam.I2S} +) + +// USB CDC identifiers +const ( + usb_STRING_PRODUCT = "Adafruit ItsyBitsy M0 Express" + usb_STRING_MANUFACTURER = "Adafruit" +) + +var ( + usb_VID uint16 = 0x239A + usb_PID uint16 = 0x800F +) diff --git a/targets/xiao.json b/targets/xiao.json new file mode 100644 index 0000000000..39b57c84a6 --- /dev/null +++ b/targets/xiao.json @@ -0,0 +1,8 @@ +{ + "inherits": ["atsamd21g18a"], + "build-tags": ["sam", "atsamd21g18a", "itsybitsy_m0"], + "flash-1200-bps-reset": "true", + "flash-method": "msd", + "msd-volume-name": "ITSYBOOT", + "msd-firmware-name": "firmware.uf2" +} From a39817908f531d6799aa6d2c573ae73a145c2ed5 Mon Sep 17 00:00:00 2001 From: sago35 Date: Sun, 14 Jun 2020 15:53:27 +0900 Subject: [PATCH 2/9] Add support xiao --- src/machine/board_xiao.go | 2 +- targets/xiao.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/machine/board_xiao.go b/src/machine/board_xiao.go index 598edd4a64..3011601941 100644 --- a/src/machine/board_xiao.go +++ b/src/machine/board_xiao.go @@ -1,4 +1,4 @@ -// +build sam,atsamd21,itsybitsy_m0 +// +build sam,atsamd21,xiao package machine diff --git a/targets/xiao.json b/targets/xiao.json index 39b57c84a6..5d667d4189 100644 --- a/targets/xiao.json +++ b/targets/xiao.json @@ -1,6 +1,6 @@ { "inherits": ["atsamd21g18a"], - "build-tags": ["sam", "atsamd21g18a", "itsybitsy_m0"], + "build-tags": ["sam", "atsamd21g18a", "xiao"], "flash-1200-bps-reset": "true", "flash-method": "msd", "msd-volume-name": "ITSYBOOT", From 480f42562a8e4fe53b03748ea07493423cc0d723 Mon Sep 17 00:00:00 2001 From: sago35 Date: Sun, 14 Jun 2020 16:25:54 +0900 Subject: [PATCH 3/9] Update pin settings --- src/machine/board_xiao.go | 115 +++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 58 deletions(-) diff --git a/src/machine/board_xiao.go b/src/machine/board_xiao.go index 3011601941..b2eb95df53 100644 --- a/src/machine/board_xiao.go +++ b/src/machine/board_xiao.go @@ -12,34 +12,49 @@ const RESET_MAGIC_VALUE = 0xf01669ef // GPIO Pins const ( - D0 = PA11 // UART0 RX - D1 = PA10 // UART0 TX - D2 = PA14 - D3 = PA09 // PWM available - D4 = PA08 // PWM available - D5 = PA15 // PWM available - D6 = PA20 // PWM available - D7 = PA21 // PWM available - D8 = PA06 // PWM available - D9 = PA07 // PWM available - D10 = PA18 // can be used for PWM or UART1 TX - D11 = PA16 // can be used for PWM or UART1 RX - D12 = PA19 // PWM available - D13 = PA17 // PWM available + D0 = PA02 // can be used for PWM or DAC + D1 = PA04 // PWM available + D2 = PA10 // PWM available + D3 = PA11 // PWM available + D4 = PA08 // can be used for PWM or I2C SDA + D5 = PA09 // can be used for PWM or I2C SCL + D6 = PB08 // can be used for PWM or UART1 TX + D7 = PB09 // can be used for PWM or UART1 RX + D8 = PA07 // can be used for PWM or SPI SCK + D9 = PA05 // can be used for PWM or SPI MISO + D10 = PA06 // can be used for PWM or SPI MOSI ) // Analog pins const ( - A0 = PA02 // ADC/AIN[0] - A1 = PB08 // ADC/AIN[2] - A2 = PB09 // ADC/AIN[3] - A3 = PA04 // ADC/AIN[4] - A4 = PA05 // ADC/AIN[5] - A5 = PB02 // ADC/AIN[10] + A0 = PA02 // ADC/AIN[0] + A1 = PA04 // ADC/AIN[4] + A2 = PA10 // ADC/AIN[18] + A3 = PA11 // ADC/AIN[19] + A4 = PA08 // ADC/AIN[16] + A5 = PA09 // ADC/AIN[17] + A6 = PB08 // ADC/AIN[2] + A7 = PB09 // ADC/AIN[3] + A8 = PA07 // ADC/AIN[7] + A9 = PA05 // ADC/AIN[6] + A10 = PA06 // ADC/AIN[5] ) const ( - LED = D13 + LED = PA17 + PIN_LED_13 = PA17 + PIN_LED = PA17 + LED_BUILTIN = PA17 + + PIN_LED_RXL = PA18 + PIN_LED_TXL = PA19 + PIN_LED2 = PIN_LED_RXL + PIN_LED3 = PIN_LED_TXL +) + +const ( + SWDIO = PA31 + SWCLK = PA30 ) // UART0 aka USBCDC pins @@ -50,65 +65,49 @@ const ( // UART1 pins const ( - UART_TX_PIN = D10 - UART_RX_PIN = D11 + UART_TX_PIN = D6 + UART_RX_PIN = D7 ) -// UART1 on the ItsyBitsy M0. +// UART1 on the Xiao var ( UART1 = UART{ Buffer: NewRingBuffer(), - Bus: sam.SERCOM1_USART, - SERCOM: 1, + Bus: sam.SERCOM4_USART, + SERCOM: 4, } ) func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM1, UART1.handleInterrupt) + UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM4, UART1.handleInterrupt) } // I2C pins const ( - SDA_PIN = PA22 // SDA: SERCOM3/PAD[0] - SCL_PIN = PA23 // SCL: SERCOM3/PAD[1] + SDA_PIN = PA08 // SDA: SERCOM2/PAD[0] + SCL_PIN = PA09 // SCL: SERCOM2/PAD[1] ) -// I2C on the ItsyBitsy M0. +// I2C on the Xiao var ( I2C0 = I2C{ - Bus: sam.SERCOM3_I2CM, - SERCOM: 3, + Bus: sam.SERCOM2_I2CM, + SERCOM: 2, } ) // SPI pins const ( - SPI0_SCK_PIN = PB11 // SCK: SERCOM4/PAD[3] - SPI0_MOSI_PIN = PB10 // MOSI: SERCOM4/PAD[2] - SPI0_MISO_PIN = PA12 // MISO: SERCOM4/PAD[0] + SPI0_SCK_PIN = PA07 // SCK: SERCOM0/PAD[3] + SPI0_MOSI_PIN = PA05 // MOSI: SERCOM0/PAD[2] + SPI0_MISO_PIN = PA06 // MISO: SERCOM0/PAD[1] ) -// SPI on the ItsyBitsy M0. +// SPI on the Xiao var ( SPI0 = SPI{ - Bus: sam.SERCOM4_SPI, - SERCOM: 4, - } -) - -// "Internal" SPI pins; SPI flash is attached to these on ItsyBitsy M0 -const ( - SPI1_CS_PIN = PA27 - SPI1_SCK_PIN = PB23 - SPI1_MOSI_PIN = PB22 - SPI1_MISO_PIN = PB03 -) - -// "Internal" SPI on Sercom 5 -var ( - SPI1 = SPI{ - Bus: sam.SERCOM5_SPI, - SERCOM: 5, + Bus: sam.SERCOM0_SPI, + SERCOM: 0, } ) @@ -116,18 +115,18 @@ var ( const ( I2S_SCK_PIN = PA10 I2S_SD_PIN = PA08 - I2S_WS_PIN = NoPin // TODO: figure out what this is on ItsyBitsy M0. + I2S_WS_PIN = NoPin // TODO: figure out what this is on Xiao ) -// I2S on the ItsyBitsy M0. +// I2S on the Xiao var ( I2S0 = I2S{Bus: sam.I2S} ) // USB CDC identifiers const ( - usb_STRING_PRODUCT = "Adafruit ItsyBitsy M0 Express" - usb_STRING_MANUFACTURER = "Adafruit" + usb_STRING_PRODUCT = "Seeed Xiao" + usb_STRING_MANUFACTURER = "Seeed" ) var ( From 585f9aa08718a16970c76ffb3d4282a90fd4f6f7 Mon Sep 17 00:00:00 2001 From: sago35 Date: Tue, 16 Jun 2020 21:17:19 +0900 Subject: [PATCH 4/9] Update board info --- src/machine/board_xiao.go | 6 +++--- targets/xiao.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/machine/board_xiao.go b/src/machine/board_xiao.go index b2eb95df53..cebe80d7d2 100644 --- a/src/machine/board_xiao.go +++ b/src/machine/board_xiao.go @@ -125,11 +125,11 @@ var ( // USB CDC identifiers const ( - usb_STRING_PRODUCT = "Seeed Xiao" + usb_STRING_PRODUCT = "Seeed XIAO M0" usb_STRING_MANUFACTURER = "Seeed" ) var ( - usb_VID uint16 = 0x239A - usb_PID uint16 = 0x800F + usb_VID uint16 = 0x2886 + usb_PID uint16 = 0x802F ) diff --git a/targets/xiao.json b/targets/xiao.json index 5d667d4189..10b413005b 100644 --- a/targets/xiao.json +++ b/targets/xiao.json @@ -3,6 +3,6 @@ "build-tags": ["sam", "atsamd21g18a", "xiao"], "flash-1200-bps-reset": "true", "flash-method": "msd", - "msd-volume-name": "ITSYBOOT", + "msd-volume-name": "Arduino", "msd-firmware-name": "firmware.uf2" } From dd3fd57223c296667dec1fe18e7b33b67553ab0c Mon Sep 17 00:00:00 2001 From: sago35 Date: Wed, 17 Jun 2020 18:05:19 +0900 Subject: [PATCH 5/9] Fix spi setting --- src/machine/board_xiao.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/machine/board_xiao.go b/src/machine/board_xiao.go index cebe80d7d2..5e81b0c2d7 100644 --- a/src/machine/board_xiao.go +++ b/src/machine/board_xiao.go @@ -99,8 +99,8 @@ var ( // SPI pins const ( SPI0_SCK_PIN = PA07 // SCK: SERCOM0/PAD[3] - SPI0_MOSI_PIN = PA05 // MOSI: SERCOM0/PAD[2] - SPI0_MISO_PIN = PA06 // MISO: SERCOM0/PAD[1] + SPI0_MOSI_PIN = PA06 // MOSI: SERCOM0/PAD[2] + SPI0_MISO_PIN = PA05 // MISO: SERCOM0/PAD[1] ) // SPI on the Xiao From 1659817bafce60bcb055252f0e49caa94e18b4e2 Mon Sep 17 00:00:00 2001 From: sago35 Date: Wed, 17 Jun 2020 23:11:38 +0900 Subject: [PATCH 6/9] Update the definition of LEDs --- src/machine/board_xiao.go | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/machine/board_xiao.go b/src/machine/board_xiao.go index 5e81b0c2d7..dec1dd04da 100644 --- a/src/machine/board_xiao.go +++ b/src/machine/board_xiao.go @@ -41,15 +41,11 @@ const ( ) const ( - LED = PA17 - PIN_LED_13 = PA17 - PIN_LED = PA17 - LED_BUILTIN = PA17 - - PIN_LED_RXL = PA18 - PIN_LED_TXL = PA19 - PIN_LED2 = PIN_LED_RXL - PIN_LED3 = PIN_LED_TXL + LED = PA17 + LED_RXL = PA18 + LED_TXL = PA19 + LED2 = LED_RXL + LED3 = LED_TXL ) const ( From d98b7c9da5a1ab4f4be13c7447daa7762bbd2576 Mon Sep 17 00:00:00 2001 From: sago35 Date: Wed, 17 Jun 2020 23:12:31 +0900 Subject: [PATCH 7/9] Remove SWD pins --- src/machine/board_xiao.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/machine/board_xiao.go b/src/machine/board_xiao.go index dec1dd04da..34a88106b2 100644 --- a/src/machine/board_xiao.go +++ b/src/machine/board_xiao.go @@ -48,11 +48,6 @@ const ( LED3 = LED_TXL ) -const ( - SWDIO = PA31 - SWCLK = PA30 -) - // UART0 aka USBCDC pins const ( USBCDC_DM_PIN = PA24 From 250600342539744bf6772ec7729b1b7b89c26834 Mon Sep 17 00:00:00 2001 From: sago35 Date: Wed, 17 Jun 2020 23:28:32 +0900 Subject: [PATCH 8/9] Add support for Seeed Seeedstudio XIAO --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 06002839ee..f7bf6fd0a4 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ See the [getting started instructions](https://tinygo.org/getting-started/) for You can compile TinyGo programs for microcontrollers, WebAssembly and Linux. -The following 33 microcontroller boards are currently supported: +The following 34 microcontroller boards are currently supported: * [Adafruit Circuit Playground Bluefruit](https://www.adafruit.com/product/4333) * [Adafruit Circuit Playground Express](https://www.adafruit.com/product/3333) @@ -73,6 +73,7 @@ The following 33 microcontroller boards are currently supported: * [Phytec reel board](https://www.phytec.eu/product-eu/internet-of-things/reelboard/) * [PineTime DevKit](https://www.pine64.org/pinetime/) * [Seeed Wio Terminal](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) +* [Seeed Seeeduino XIAO](https://www.seeedstudio.com/Seeeduino-XIAO-Arduino-Microcontroller-SAMD21-Cortex-M0+-p-4426.html) * [SiFIve HiFive1](https://www.sifive.com/boards/hifive1) * [ST Micro "Nucleo F103RB"](https://www.st.com/en/evaluation-tools/nucleo-f103rb.html) * [ST Micro STM32F103XX "Bluepill"](http://wiki.stm32duino.com/index.php?title=Blue_Pill) From 20b43207b4b89c34aafa8dc192dda76a02c82959 Mon Sep 17 00:00:00 2001 From: sago35 Date: Wed, 17 Jun 2020 23:30:13 +0900 Subject: [PATCH 9/9] Add smoketest --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 743f0736d3..7dfdb13ace 100644 --- a/Makefile +++ b/Makefile @@ -296,6 +296,7 @@ smoketest: $(TINYGO) build -size short -o test.hex -target=wioterminal examples/blinky1 @$(MD5SUM) test.hex $(TINYGO) build -size short -o test.hex -target=pygamer examples/blinky1 + $(TINYGO) build -size short -o test.hex -target=xiao examples/blinky1 @$(MD5SUM) test.hex ifneq ($(AVR), 0) $(TINYGO) build -size short -o test.hex -target=atmega1284p examples/serial