zephyr/boards/arm/arduino_nano_33_iot/doc/index.rst
Gerard Marull-Paretas e81e92dbb9 boards: convert images to JPEG and reduce image size
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>
2022-08-29 10:18:18 +02:00

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