The boards folder uses ~142.8 MB, being the largest in the repository. This is due mostly to board images, which are in most cases not optimized for web content. This patch tries to address this problem by converting all pictures to JPEG (quality 75) and by adjusting its size up to 750 px (the width of the documentation content). Images that specified a fixed width in rst files are converted down to that value instead. With this patch, folder goes down to ~53.5 MB from 142.8 MB (-~63%). Note that this patch introduces a new set of binary files to git history, though (bad). The process has been automated using this quickly crafted Python script: ```python from pathlib import Path import re import subprocess def process(doc, image, image_jpeg, size): subprocess.run( ( f"convert {image}" "-background white -alpha remove -alpha off -quality 75" f"-resize {size}\> {image_jpeg}" ), shell=True, check=True, cwd=doc.parent, ) if image != image_jpeg: (doc.parent / image).unlink() for doc in Path(".").glob("boards/**/*.rst"): with open(doc) as f: content = "" image = None for line in f: m = re.match(r"^(\s*)\.\. (image|figure):: (.*)$", line) if m: if image: process(doc, image, image_jpeg, size) image = Path(m.group(3)) if image.suffix not in (".jpg", ".jpeg", ".png"): content += line image = None continue image_jpeg = image.parent / (image.stem + ".jpg") size = 750 content += ( f"{m.group(1)}.. {m.group(2)}:: {image_jpeg}\n" ) elif image: m = re.match(r"\s*:height:\s*[0-9]+.*$", line) if m: continue m = re.match(r"\s*:width:\s*([0-9]+).*$", line) if m: size = min(int(m.group(1)), size) continue content += line if line == "\n": process(doc, image, image_jpeg, size) image = None else: content += line with open(doc, "w") as f: f.write(content) ``` Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
171 lines
5.5 KiB
ReStructuredText
171 lines
5.5 KiB
ReStructuredText
.. _arduino_nano_33_iot:
|
|
|
|
Arduino Nano 33 IOT
|
|
###################
|
|
|
|
Overview
|
|
********
|
|
|
|
The Arduino Nano 33 IOT is a a small form factor development board with USB,
|
|
Wifi, Bluetooth, a 6 axis IMU, and secure element.
|
|
|
|
.. image:: img/nano_33_iot.jpg
|
|
:align: center
|
|
:alt: Arduino Nano 33 IOT
|
|
|
|
Hardware
|
|
********
|
|
|
|
- ATSAMD21G18A ARM Cortex-M0+ processor at 48 MHz
|
|
- 256 KiB flash memory and 32 KiB of RAM
|
|
- One user LED
|
|
- One reset button
|
|
- Native USB port
|
|
- Wifi and Bluetooth via a u-blox NINA-W102
|
|
- ATECC608A secure element
|
|
- LSM6DS3 six axis accelerometer and gyro
|
|
|
|
Supported Features
|
|
==================
|
|
|
|
The arduino_nano_33_iot board configuration supports the following hardware
|
|
features:
|
|
|
|
+-----------+------------+------------------------------------------+
|
|
| Interface | Controller | Driver/Component |
|
|
+===========+============+==========================================+
|
|
| ADC | on-chip | Analog to digital converter |
|
|
+-----------+------------+------------------------------------------+
|
|
| COUNTER | on-chip | Pulse counter |
|
|
+-----------+------------+------------------------------------------+
|
|
| DMA | on-chip | Direct memory access unit |
|
|
+-----------+------------+------------------------------------------+
|
|
| Flash | on-chip | Can be used with LittleFS to store files |
|
|
+-----------+------------+------------------------------------------+
|
|
| GPIO | on-chip | I/O ports |
|
|
+-----------+------------+------------------------------------------+
|
|
| HWINFO | on-chip | Hardware info and serial number |
|
|
+-----------+------------+------------------------------------------+
|
|
| NVIC | on-chip | nested vector interrupt controller |
|
|
+-----------+------------+------------------------------------------+
|
|
| PWM | on-chip | Pulse Width Modulation |
|
|
+-----------+------------+------------------------------------------+
|
|
| SPI | on-chip | Serial Peripheral Interface ports |
|
|
+-----------+------------+------------------------------------------+
|
|
| SYSTICK | on-chip | systick |
|
|
+-----------+------------+------------------------------------------+
|
|
| USART | on-chip | Serial ports |
|
|
+-----------+------------+------------------------------------------+
|
|
| USB | on-chip | USB device |
|
|
+-----------+------------+------------------------------------------+
|
|
| WDT | on-chip | Watchdog |
|
|
+-----------+------------+------------------------------------------+
|
|
|
|
Other hardware features are not currently supported by Zephyr.
|
|
|
|
The default configuration can be found in the Kconfig
|
|
:zephyr_file:`boards/arm/arduino_nano_33_iot/arduino_nano_33_iot_defconfig`.
|
|
|
|
Connections and IOs
|
|
===================
|
|
|
|
The `Arduino store`_ has detailed information about board
|
|
connections. Download the `schematic`_ for more detail.
|
|
|
|
System Clock
|
|
============
|
|
|
|
The SAMD21 MCU is configured to use the 8 MHz internal oscillator
|
|
with the on-chip PLL generating the 48 MHz system clock. The internal
|
|
APB and GCLK unit are set up in the same way as the upstream Arduino
|
|
libraries.
|
|
|
|
Serial Port
|
|
===========
|
|
|
|
The SAMD21 MCU has 6 SERCOM based USARTs. SERCOM5 is available on pins 1 and 2.
|
|
|
|
PWM
|
|
===
|
|
|
|
The SAMD21 MCU has 3 TCC based PWM units with up to 4 outputs each and a period
|
|
of 24 bits or 16 bits. If :code:`CONFIG_PWM_SAM0_TCC` is enabled then LED0 is
|
|
driven by TCC2 instead of by GPIO.
|
|
|
|
SPI Port
|
|
========
|
|
|
|
The SAMD21 MCU has 6 SERCOM based SPIs. SERCOM1 is available on pins 1, 14,
|
|
and 15.
|
|
|
|
USB Device Port
|
|
===============
|
|
|
|
The SAMD21 MCU has a USB device port that can be used to communicate
|
|
with a host PC. See the :ref:`usb-samples` sample applications for
|
|
more, such as the :ref:`usb_cdc-acm` sample which sets up a virtual
|
|
serial port that echos characters back to the host PC.
|
|
|
|
Programming and Debugging
|
|
*************************
|
|
|
|
The Nano 33 IOT ships the BOSSA compatible UF2 bootloader. The
|
|
bootloader can be entered by quickly tapping the reset button twice.
|
|
|
|
Additionally, if :code:`CONFIG_USB_CDC_ACM` is enabled then the bootloader
|
|
will be entered automatically when you run :code:`west flash`.
|
|
|
|
Flashing
|
|
========
|
|
|
|
#. Build the Zephyr kernel and the :ref:`hello_world` sample application:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/hello_world
|
|
:board: arduino_nano_33_iot
|
|
:goals: build
|
|
:compact:
|
|
|
|
#. Connect the Nano 33 IOT to your host computer using USB
|
|
|
|
#. Connect a 3.3 V USB to serial adapter to the board and to the
|
|
host. See the `Serial Port`_ section above for the board's pin
|
|
connections.
|
|
|
|
#. Run your favorite terminal program to listen for output. Under Linux the
|
|
terminal should be :code:`/dev/ttyACM0`. For example:
|
|
|
|
.. code-block:: console
|
|
|
|
$ minicom -D /dev/ttyACM0 -o
|
|
|
|
The -o option tells minicom not to send the modem initialization
|
|
string. Connection should be configured as follows:
|
|
|
|
- Speed: 115200
|
|
- Data: 8 bits
|
|
- Parity: None
|
|
- Stop bits: 1
|
|
|
|
#. Tap the reset button twice quickly to enter bootloader mode
|
|
|
|
#. Flash the image:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/hello_world
|
|
:board: arduino_nano_33_iot
|
|
:goals: flash
|
|
:compact:
|
|
|
|
You should see "Hello World! arduino_nano_33_iot" in your terminal.
|
|
|
|
References
|
|
**********
|
|
|
|
.. target-notes::
|
|
|
|
.. _Arduino Store:
|
|
https://store.arduino.cc/arduino-nano-33-iot
|
|
|
|
.. _schematic:
|
|
https://content.arduino.cc/assets/NANO33IoTV2.0_sch.pdf
|