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: 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 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 CodeSourcery 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.