boards: adafruit: add initial support for feather m4 express
The Adafruit Feather M4 Express is a compact, lightweight ARM development board with an onboard mini NeoPixel, 2 MiB of SPI flash, charging status indicator and user LEDs, USB connector, 21 GPIO pins and a small prototyping area. Signed-off-by: Teresa Zepeda Ventura <teresa.zvent@gmail.com>
This commit is contained in:
parent
e6664e38ba
commit
7ec8c8e753
11 changed files with 444 additions and 0 deletions
|
|
@ -0,0 +1,5 @@
|
|||
# Copyright (c) 2024 Daikin Comfort Technologies North America, Inc.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
config BOARD_ADAFRUIT_FEATHER_M4_EXPRESS
|
||||
select SOC_SAMD51J19A
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Copyright (c) 2022, Gerson Fernando Budke <nandojve@gmail.com>
|
||||
* Copyright (c) 2024 Daikin Comfort Technologies North America, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <dt-bindings/pinctrl/samd51j-pinctrl.h>
|
||||
|
||||
&pinctrl {
|
||||
sercom1_spi_default: sercom1_spi_default {
|
||||
group1 {
|
||||
pinmux = <PB23C_SERCOM1_PAD3>,
|
||||
<PA17C_SERCOM1_PAD1>,
|
||||
<PB22C_SERCOM1_PAD2>;
|
||||
};
|
||||
};
|
||||
|
||||
sercom2_i2c_default: sercom3_i2c_default {
|
||||
group1 {
|
||||
pinmux = <PA12C_SERCOM2_PAD0>,
|
||||
<PA13C_SERCOM2_PAD1>;
|
||||
};
|
||||
};
|
||||
|
||||
sercom5_uart_default: sercom5_uart_default {
|
||||
group1 {
|
||||
pinmux = <PB17C_SERCOM5_PAD1>,
|
||||
<PB16C_SERCOM5_PAD0>;
|
||||
};
|
||||
};
|
||||
|
||||
pwm0_default: pwm0_default {
|
||||
group1 {
|
||||
pinmux = <PA22G_TCC0_WO2>;
|
||||
};
|
||||
};
|
||||
pwm1_default: pwm1_default {
|
||||
group1 {
|
||||
pinmux = <PA18F_TCC1_WO2>,
|
||||
<PA19F_TCC1_WO3>;
|
||||
};
|
||||
};
|
||||
|
||||
usb_dc_default: usb_dc_default {
|
||||
group1 {
|
||||
pinmux = <PA25H_USB_DP>,
|
||||
<PA24H_USB_DM>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
/*
|
||||
* Copyright (c) 2020 Google LLC.
|
||||
* Copyright (c) 2024 Daikin Comfort Technologies North America, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include <atmel/samd5xx19.dtsi>
|
||||
#include "adafruit_feather_m4_express-pinctrl.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Adafruit Feather M4 Express";
|
||||
compatible = "adafruit,feather-m4-express";
|
||||
|
||||
chosen {
|
||||
zephyr,console = &sercom5;
|
||||
zephyr,shell-uart = &sercom5;
|
||||
zephyr,sram = &sram0;
|
||||
zephyr,flash = &flash0;
|
||||
zephyr,code-partition = &code_partition;
|
||||
};
|
||||
|
||||
/* These aliases are provided for compatibility with samples */
|
||||
aliases {
|
||||
led0 = &led0;
|
||||
pwm-0 = &tcc0;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
led0: led_0 {
|
||||
gpios = <&porta 23 0>;
|
||||
label = "LED";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&cpu0 {
|
||||
clock-frequency = <120000000>;
|
||||
};
|
||||
|
||||
&sercom5 {
|
||||
status = "okay";
|
||||
compatible = "atmel,sam0-uart";
|
||||
current-speed = <115200>;
|
||||
rxpo = <1>;
|
||||
txpo = <0>;
|
||||
pinctrl-0 = <&sercom5_uart_default>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&sercom1 {
|
||||
status = "okay";
|
||||
compatible = "atmel,sam0-spi";
|
||||
dipo = <3>;
|
||||
dopo = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
pinctrl-0 = <&sercom1_spi_default>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&tcc0 {
|
||||
status = "okay";
|
||||
compatible = "atmel,sam0-tcc-pwm";
|
||||
prescaler = <8>;
|
||||
#pwm-cells = <2>;
|
||||
pinctrl-0 = <&pwm0_default>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
zephyr_udc0: &usb0 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&usb_dc_default>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&dmac {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&flash0 {
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
boot_partition: partition@0 {
|
||||
label = "uf2";
|
||||
reg = <0x00000000 DT_SIZE_K(16)>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
code_partition: partition@4000 {
|
||||
label = "code";
|
||||
reg = <0x4000 DT_SIZE_K(512-16-16)>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
/*
|
||||
* The final 16 KiB is reserved for the application.
|
||||
* Storage partition will be used by FCB/LittleFS/NVS
|
||||
* if enabled.
|
||||
*/
|
||||
storage_partition: partition@7c000 {
|
||||
label = "storage";
|
||||
reg = <0x7c000 DT_SIZE_K(16)>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
identifier: adafruit_feather_m4_express
|
||||
name: Adafruit Feather M4 Express
|
||||
type: mcu
|
||||
arch: arm
|
||||
ram: 192
|
||||
flash: 512
|
||||
toolchain:
|
||||
- zephyr
|
||||
- gnuarmemb
|
||||
- xtools
|
||||
supported:
|
||||
- dma
|
||||
- gpio
|
||||
- hwinfo
|
||||
- pwm
|
||||
- spi
|
||||
- uart
|
||||
- usb_device
|
||||
- watchdog
|
||||
vendor: adafruit
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
# Copyright (c) 2024 Daikin Comfort Technologies North America, Inc.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
CONFIG_SOC_ATMEL_SAMD5X_OSCULP32K_AS_MAIN=y
|
||||
|
||||
CONFIG_BOOTLOADER_BOSSA=y
|
||||
CONFIG_BOOTLOADER_BOSSA_ADAFRUIT_UF2=y
|
||||
CONFIG_BUILD_OUTPUT_HEX=y
|
||||
CONFIG_BUILD_OUTPUT_UF2=y
|
||||
|
||||
CONFIG_ARM_MPU=y
|
||||
CONFIG_HW_STACK_PROTECTION=y
|
||||
|
||||
CONFIG_CONSOLE=y
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_UART_CONSOLE=y
|
||||
CONFIG_UART_INTERRUPT_DRIVEN=y
|
||||
5
boards/adafruit/feather_m4_express/board.cmake
Normal file
5
boards/adafruit/feather_m4_express/board.cmake
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# Copyright (c) 2020 Google LLC.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
include(${ZEPHYR_BASE}/boards/common/bossac.board.cmake)
|
||||
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
|
||||
6
boards/adafruit/feather_m4_express/board.yml
Normal file
6
boards/adafruit/feather_m4_express/board.yml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
board:
|
||||
name: adafruit_feather_m4_express
|
||||
full_name: Feather M4 Express
|
||||
vendor: adafruit
|
||||
socs:
|
||||
- name: samd51j19a
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 54 KiB |
201
boards/adafruit/feather_m4_express/doc/index.rst
Normal file
201
boards/adafruit/feather_m4_express/doc/index.rst
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
.. zephyr:board:: adafruit_feather_m4_express
|
||||
|
||||
Overview
|
||||
********
|
||||
|
||||
The Adafruit Feather M4 Express is a compact, lightweight
|
||||
ARM development board with an onboard mini NeoPixel, 2 MiB
|
||||
of SPI flash, charging status indicator and user LEDs, USB
|
||||
connector, 21 GPIO pins and a small prototyping area.
|
||||
|
||||
Hardware
|
||||
********
|
||||
|
||||
- ATSAMD51J19A ARM Cortex-M4 processor at 120 MHz
|
||||
- 512 KiB of flash memory and 192 KiB of RAM
|
||||
- 2 MiB of SPI flash
|
||||
- Internal trimmed 8 MHz oscillator
|
||||
- A user LED
|
||||
- An RGB NeoPixel LED
|
||||
- Native USB port
|
||||
- One reset button
|
||||
|
||||
Supported Features
|
||||
==================
|
||||
|
||||
The ``adafruit_feather_m4_express`` board target supports the following
|
||||
hardware features:
|
||||
|
||||
+-----------+------------+------------------------------------------+
|
||||
| Interface | Controller | Driver/Component |
|
||||
+===========+============+==========================================+
|
||||
| SYSTICK | on-chip | systick |
|
||||
+-----------+------------+------------------------------------------+
|
||||
| WDT | on-chip | Watchdog |
|
||||
+-----------+------------+------------------------------------------+
|
||||
| GPIO | on-chip | I/O ports |
|
||||
+-----------+------------+------------------------------------------+
|
||||
| USART | on-chip | Serial ports |
|
||||
+-----------+------------+------------------------------------------+
|
||||
| SPI | on-chip | Serial Peripheral Interface ports |
|
||||
+-----------+------------+------------------------------------------+
|
||||
| TRNG | on-chip | True Random Number Generator |
|
||||
+-----------+------------+------------------------------------------+
|
||||
| HWINFO | on-chip | Unique 128 bit serial number |
|
||||
+-----------+------------+------------------------------------------+
|
||||
| RTC | on-chip | Real-Time Counter |
|
||||
+-----------+------------+------------------------------------------+
|
||||
| USB | on-chip | USB device |
|
||||
+-----------+------------+------------------------------------------+
|
||||
| WDT | on-chip | Watchdog Timer |
|
||||
+-----------+------------+------------------------------------------+
|
||||
| PWM | on-chip | PWM |
|
||||
+-----------+------------+------------------------------------------+
|
||||
|
||||
Other hardware features are not currently supported by Zephyr.
|
||||
|
||||
The default configuration can be found in the Kconfig file
|
||||
:zephyr_file:`boards/adafruit/feather_m4_express/adafruit_feather_m4_express_defconfig`.
|
||||
|
||||
Zephyr can use the default Cortex-M SYSTICK timer or the SAM0 specific RTC.
|
||||
To use the RTC, set :code:`CONFIG_CORTEX_M_SYSTICK=n` and set
|
||||
:code:`CONFIG_SYS_CLOCK_TICKS_PER_SEC` to no more than 32 kHZ divided by 7,
|
||||
i.e. no more than 4500.
|
||||
|
||||
Connections and IOs
|
||||
===================
|
||||
|
||||
The `Adafruit Learning System`_ has detailed information about
|
||||
the board including `pinouts`_ and the `schematic`_.
|
||||
|
||||
System Clock
|
||||
============
|
||||
|
||||
The SAMD51 MCU is configured to use the 32 kHz internal oscillator
|
||||
with the on-chip PLL generating the 120 MHz system clock.
|
||||
|
||||
Serial Port
|
||||
===========
|
||||
|
||||
The SAMD51 MCU has 6 SERCOM based USARTs. On the Feather, SERCOM5 is
|
||||
the Zephyr console and is available on pins 0 (RX) and 1 (TX).
|
||||
|
||||
SPI Port
|
||||
========
|
||||
|
||||
The SAMD51 MCU has 6 SERCOM based SPIs. On the Feather, SERCOM1 can be put
|
||||
into SPI mode and used to connect to devices over the SCK (SCLK), MO (MOSI), and
|
||||
MI (MISO) pins.
|
||||
|
||||
PWM
|
||||
===
|
||||
|
||||
The SAMD51 has three PWM generators with up to six channels each. :code:`TCC_0`
|
||||
has a resolution of 24 bits and all other generators are 16 bit. :code:`TCC_1`
|
||||
pin 2 is mapped to PA18 (D7) and pin 3 is mapped to PA19 (D9).
|
||||
|
||||
USB Device Port
|
||||
===============
|
||||
|
||||
The SAMD51 MCU has a USB device port that can be used to communicate
|
||||
with a host PC. See the :ref:`usb` sample applications for
|
||||
more, such as the :zephyr:code-sample:`usb-cdc-acm` sample which sets up a virtual
|
||||
serial port that echos characters back to the host PC.
|
||||
|
||||
Programming and Debugging
|
||||
*************************
|
||||
|
||||
The Feather ships with a the BOSSA compatible UF2 bootloader. The
|
||||
bootloader can be entered by quickly tapping the reset button twice.
|
||||
|
||||
Additionally, if :kconfig:option:`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 :zephyr:code-sample:`hello_world` sample application:
|
||||
|
||||
.. zephyr-app-commands::
|
||||
:zephyr-app: samples/hello_world
|
||||
:board: adafruit_feather_m4_express
|
||||
:goals: build
|
||||
:compact:
|
||||
|
||||
#. Connect the feather 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/ttyUSB0`. For example:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ minicom -D /dev/ttyUSB0 -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: adafruit_feather_m4_express
|
||||
:goals: flash
|
||||
:compact:
|
||||
|
||||
You should see "Hello World! adafruit_feather_m4_express" in your terminal.
|
||||
|
||||
Debugging
|
||||
=========
|
||||
|
||||
In addition to the built-in bootloader, the Feather can be flashed and
|
||||
debugged using a SWD probe such as the Segger J-Link.
|
||||
|
||||
#. Connect the board to the probe by connecting the :code:`SWCLK`,
|
||||
:code:`SWDIO`, :code:`RESET`, :code:`GND`, and :code:`3V3` pins on the
|
||||
Feather to the :code:`SWCLK`, :code:`SWDIO`, :code:`RESET`, :code:`GND`,
|
||||
and :code:`VTref` pins on the `J-Link`_.
|
||||
|
||||
#. Flash the image:
|
||||
|
||||
.. zephyr-app-commands::
|
||||
:zephyr-app: samples/hello_world
|
||||
:board: adafruit_feather_m4_express
|
||||
:goals: flash
|
||||
:flash-args: -r openocd
|
||||
:compact:
|
||||
|
||||
#. Start debugging:
|
||||
|
||||
.. zephyr-app-commands::
|
||||
:zephyr-app: samples/hello_world
|
||||
:board: adafruit_feather_m4_express
|
||||
:goals: debug
|
||||
:compact:
|
||||
|
||||
References
|
||||
**********
|
||||
|
||||
.. target-notes::
|
||||
|
||||
.. _Adafruit Learning System:
|
||||
https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51
|
||||
|
||||
.. _pinouts:
|
||||
https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51/pinouts
|
||||
|
||||
.. _schematic:
|
||||
https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51/downloads
|
||||
|
||||
.. _J-Link:
|
||||
https://www.segger.com/products/debug-probes/j-link/technology/interface-description/
|
||||
7
boards/adafruit/feather_m4_express/pre_dt_board.cmake
Normal file
7
boards/adafruit/feather_m4_express/pre_dt_board.cmake
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# Copyright (c) 2021 Linaro Limited
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# Suppress "unique_unit_address_if_enabled" to handle the following overlaps:
|
||||
# - /soc/pinmux@41004400 & /soc/gpio@41004400
|
||||
# - /soc/pinmux@41004480 & /soc/gpio@41004480
|
||||
list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled")
|
||||
21
boards/adafruit/feather_m4_express/support/openocd.cfg
Normal file
21
boards/adafruit/feather_m4_express/support/openocd.cfg
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
source [find interface/jlink.cfg]
|
||||
|
||||
transport select swd
|
||||
|
||||
set CHIPNAME atsamd51j19a
|
||||
source [find target/atsame5x.cfg]
|
||||
|
||||
# TODO(http://openocd.zylin.com/#/c/5706/): lower the clock speed to workaround
|
||||
# an erase timeout.
|
||||
adapter_khz 500
|
||||
reset_config srst_only
|
||||
|
||||
$_TARGETNAME configure -event gdb-attach {
|
||||
echo "Debugger attaching: halting execution"
|
||||
reset halt
|
||||
}
|
||||
|
||||
$_TARGETNAME configure -event gdb-detach {
|
||||
echo "Debugger detaching: resuming execution"
|
||||
resume
|
||||
}
|
||||
Loading…
Reference in a new issue