Skip to content

README

This README discusses issues unique to NuttX configurations for the Arduino M0. I used a compatible board called Wemos SAMD21 M0 board, but there are other equivalent boards, like the RobotDyn SAMD21 M0.

Unfortunately because the Arduino.cc vs Arduino.org conflict in the past, we have three types of boards: Arduino Zero, Arduino M0 and Arduino M0 Pro.

The Wemos SAMD21 M0 is compatible with Arduino M0, but not exactly a clone.

You have two options to program it: using the SWD (EDBG) connector that comes in the board or the Arduino M0 bootloader that comes flashed on it. Currently only SWD programming is supported. Bootloader skip area should be implemented to avoid overwriting the bootloader area.

The board uses the ATSAMD21G18A MCU and can work over the Native USB Port.

Contents

  • STATUS/ISSUES
  • LEDs
  • Serial Consoles
  • Configurations

STATUS/ISSUES

Because the Arduino M0 doesn't have a 12MHz crystal, it uses the internal RC oscillator.

LEDs

There is one yellow LED available on the Arduino M0 and it can be turned on and off. The LED can be activated by driving the connected PA17 I/O line to high level.

When CONFIG_ARCH_LEDS is defined in the NuttX configuration, NuttX will control the LED as follows:

SYMBOL              Meaning                 LED0
------------------- ----------------------- ------
LED_STARTED         NuttX has been started  OFF
LED_HEAPALLOCATE    Heap has been allocated OFF
LED_IRQSENABLED     Interrupts enabled      OFF
LED_STACKCREATED    Idle stack created      ON
LED_INIRQ           In an interrupt         N/C
LED_SIGNAL          In a signal handler     N/C
LED_ASSERTION       An assertion failed     N/C
LED_PANIC           The system has crashed  FLASH

Thus is LED is statically on, NuttX has successfully booted and is, apparently, running normally. If LED is flashing at approximately 2Hz, then a fatal error has been detected and the system has halted.

Serial Consoles

SERCOM5 ------

SERCOM5 is available on pins PB22 (TXD) and PB23 (RXD). You will need to solder a two pins header to RXD and TXD labels, near to ICSP pin header.

PIN   GPIO Function
----  ---- ------------------
 37   PB22 SERCOM5 / USART RX
 38   PB23 SERCOM5 / USART TX

If you have a 3.3V USB/Serial adapter then this is the most convenient serial console to use (because you don't lose the console device each time you lose the USB connection). It is the default in all of these configurations. An option is to use the virtual COM port.

Native USB Port ---------------

You can access the NSH shell directly using the USB connector. All you need to do is use the "usbnsh" board profile.

Configurations

Each Arduino M0 configuration is maintained in a sub-directory and can be selected as follow:

tools/configure.sh arduino-m0:<subdir>

Before building, make sure the PATH environment variable include the correct path to the directory than holds your toolchain binaries.

And then build NuttX by simply typing the following. At the conclusion of the make, the nuttx binary will reside in an ELF file called, simply, nuttx.

make

The <subdir> that is provided above as an argument to the tools/configure.sh must be is one of the following.

NOTE: These configurations use the mconf-based configuration tool. To change any of these configurations using that tool, you should:

a. Build and install the kconfig-mconf tool.  See nuttx/README.txt
   see additional README.txt files in the NuttX tools repository.

b. Execute 'make menuconfig' in nuttx/ in order to start the
   reconfiguration process.

NOTES:

  1. These configurations use the mconf-based configuration tool. To change any of these configurations using that tool, you should:
<!-- -->
a. Build and install the kconfig-mconf tool.  See nuttx/README.txt
   see additional README.txt files in the NuttX tools repository.

b. Execute 'make menuconfig' in nuttx/ in order to start the
   reconfiguration process.

Configuration sub-directories

nsh: This configuration directory will built the NuttShell. See NOTES above and below:

NOTES:

1. This configuration is set up to build on Windows using the Cygwin
   environment using the ARM EABI toolchain.  This can be easily
   changed as described above under "Configurations."

2. By default, this configuration provides a serial console on SERCOM5
   at 115200 8N1 via RXD/TXD pads:

   PIN   EXT3 GPIO Function
   ----  ---- ------------------
    37   PB22 SERCOM5 / USART RX
    38   PB23 SERCOM5 / USART TX

usbnsh: This configuration directory will build the NuttShell to work over USB. It uses the internal SAMD21 USB port working as CDC/ACM Serial/Modem.

Using the configuration you don't need to solder the header pins RXD/TXD
to get access the NSH terminal.