boards: mm_feather: add board support for Feather

Add new board to support Madmachine Feather.

Signed-off-by: Frank Li <lgl88911@163.com>
This commit is contained in:
Frank Li 2021-07-17 11:33:40 +08:00 committed by Christopher Friedt
commit 335982b112
12 changed files with 1018 additions and 0 deletions

View file

@ -0,0 +1,10 @@
#
# Copyright (c) 2021 MADMACHINE LIMITED
#
# SPDX-License-Identifier: Apache-2.0
#
zephyr_library()
zephyr_library_sources(pinmux.c)
zephyr_sources_ifdef(CONFIG_BOOT_FLEXSPI_NOR flexspi_nor_config.c)
zephyr_sources_ifdef(CONFIG_DEVICE_CONFIGURATION_DATA mmfeather_sdram_ini_dcd.c)

View file

@ -0,0 +1,10 @@
#
# Copyright (c) 2021, MADMACHINE LIMITED
#
# SPDX-License-Identifier: Apache-2.0
#
config BOARD_MM_FEATHER
bool "MM MM-FEATHER"
depends on SOC_SERIES_IMX_RT
select SOC_PART_NUMBER_MIMXRT1062DVL6A

View file

@ -0,0 +1,18 @@
# MM-FEATHER board
# Copyright (c) 2021, MADMACHINE LIMITED
# SPDX-License-Identifier: Apache-2.0
if BOARD_MM_FEATHER
config BOARD
default "mm_feather"
choice CODE_LOCATION
default CODE_FLEXSPI
endchoice
config DISK_DRIVER_SDMMC
default y if DISK_DRIVERS
endif # BOARD_MM_FEATHER

View file

@ -0,0 +1,12 @@
#
# Copyright (c) 2021, MADMACHINE LIMITED
#
# SPDX-License-Identifier: Apache-2.0
#
board_set_debugger_ifnset(pyocd)
board_set_flasher_ifnset(pyocd)
board_runner_args(pyocd "--target=mimxrt1050_quadspi")
include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)

View file

@ -0,0 +1,239 @@
.. _mm_feather:
MadMachine SwiftIO Feather
##########################
Overview
********
The SwiftIO Feather board, designed by MadMachine is
designed with support for the modern `Swift language
<https://docs.swift.org/swift-book/>`_. Zephyr provides basic
low-level capabilities for the SwiftIO Feather board. Swift application would
run on top of Zephyr. More information about the board can be found
at:
- `MadMachine Homepage`_
- `SwiftIO API Reference`_
.. image:: ./mm_feather.jpg
:width: 720px
:align: center
:alt: SwiftIO Feather Board
Hardware
********
- MIMXRT1062DVL6B MCU (Cortex-M7 at 600MHz, 2048KB on-chip memory)
- Memory
- 8MB QSPI Flash
- 32MB SDRAM
- TF socket for SD card
- USB
- USB-C 2.0 OTG connector
- Power
- 5V USB power
- 4.2V DC jack
- Debug
- SWD connector
- RGB LED
Supported Features
==================
The mm_feather board configuration supports the following hardware
features:
+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component |
+===========+============+=====================================+
| NVIC | on-chip | nested vector interrupt controller |
+-----------+------------+-------------------------------------+
| SYSTICK | on-chip | systick |
+-----------+------------+-------------------------------------+
| DISPLAY | on-chip | display |
+-----------+------------+-------------------------------------+
| GPIO | on-chip | gpio |
+-----------+------------+-------------------------------------+
| I2C | on-chip | i2c |
+-----------+------------+-------------------------------------+
| SPI | on-chip | spi |
+-----------+------------+-------------------------------------+
| UART | on-chip | serial port-polling; |
| | | serial port-interrupt |
+-----------+------------+-------------------------------------+
| I2S | on-chip | I2S |
+-----------+------------+-------------------------------------+
| USB | on-chip | USB device |
+-----------+------------+-------------------------------------+
Connections and IOs
===================
Note:
The following SwiftIO Feather pinout diagram is used for Swift programming.
The Swift ID is not the same as the Zephyr driver ID.
+-----------+---------------+----------+---------------+--------------------------+
| Name | GPIO | Other peripherals |
+===========+===============+==========+===============+==========+===============+
| Swift ID | Pin name | Swift ID | Zephyr driver | Swift ID | Zephyr driver |
+-----------+---------------+----------+---------------+----------+---------------+
| P0 | GPIO_AD_B1_04 | D0 | GPIO1_IO20 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P1 | GPIO_AD_B1_08 | D1 | GPIO1_IO24 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P2 | GPIO_AD_B1_09 | D2 | GPIO1_IO25 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P3 | GPIO_AD_B1_10 | D3 | GPIO1_IO26 | | |
+-----------+---------------+----------+---------------+ UART1 | UART_8 |
| P4 | GPIO_AD_B1_11 | D4 | GPIO1_IO27 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P5 | GPIO_AD_B1_12 | D5 | GPIO1_IO28 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P6 | GPIO_AD_B1_15 | D6 | GPIO1_IO31 | | |
+-----------+---------------+----------+---------------+ | |
| P7 | GPIO_AD_B1_14 | D7 | GPIO1_IO30 | SPI0 | SPI_3 |
+-----------+---------------+----------+---------------+ | |
| P8 | GPIO_AD_B1_13 | D8 | GPIO1_IO29 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P9 | GPIO_AD_B1_03 | D9 | GPIO1_IO19 | | |
+-----------+---------------+----------+---------------+ UART0 | UART_2 |
| P10 | GPIO_AD_B1_02 | D10 | GPIO1_IO18 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P11 | GPIO_AD_B1_05 | D11 | GPIO1_IO21 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P12 | GPIO_AD_B0_14 | D12 | GPIO1_IO14 | | |
+-----------+---------------+----------+---------------+ CAN0 | CAN_3 |
| P13 | GPIO_AD_B0_15 | D13 | GPIO1_IO15 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P14 | GPIO_B0_00 | D14 | GPIO2_IO00 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P15 | GPIO_B1_03 | D15 | GPIO2_IO19 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P16 | GPIO_B1_02 | D16 | GPIO2_IO18 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P17 | GPIO_B1_01 | D17 | GPIO2_IO17 | | |
+-----------+---------------+----------+---------------+ UART2 | UART_4 |
| P18 | GPIO_B1_00 | D18 | GPIO2_IO16 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P19 | GPIO_B1_15 | D19 | GPIO2_IO31 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P20 | GPIO_B1_14 | D20 | GPIO2_IO30 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P21 | GPIO_B0_03 | D21 | GPIO2_IO03 | | |
+-----------+---------------+----------+---------------+ | |
| P22 | GPIO_B0_02 | D22 | GPIO2_IO02 | SPI1 | SPI_4 |
+-----------+---------------+----------+---------------+ | |
| P23 | GPIO_B0_01 | D23 | GPIO2_IO01 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P24 | GPIO_B0_04 | D24 | GPIO2_IO04 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P25 | GPIO_B0_05 | D25 | GPIO2_IO05 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P26 | GPIO_B0_06 | D26 | GPIO2_IO06 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P27 | GPIO_B0_07 | D27 | GPIO2_IO07 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P28 | GPIO_B0_08 | D28 | GPIO2_IO08 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P29 | GPIO_B0_09 | D29 | GPIO2_IO09 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P30 | GPIO_B0_10 | D30 | GPIO2_IO10 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P31 | GPIO_B0_11 | D31 | GPIO2_IO11 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P32 | GPIO_B0_12 | D32 | GPIO2_IO12 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P33 | GPIO_B0_13 | D33 | GPIO2_IO13 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P34 | GPIO_B0_14 | D34 | GPIO2_IO14 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| P35 | GPIO_B0_15 | D35 | GPIO2_IO15 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| | GPIO_AD_B1_07 | | GPIO1_IO23 | | |
+-----------+---------------+----------+---------------+ I2C0 | I2C_3 |
| | GPIO_AD_B1_06 | | GPIO1_IO22 | | |
+-----------+---------------+----------+---------------+----------+---------------+
| | GPIO_AD_B1_00 | | GPIO1_IO16 | | |
+-----------+---------------+----------+---------------+ I2C1 | I2C_1 |
| | GPIO_AD_B1_00 | | GPIO1_IO17 | | |
+-----------+---------------+----------+---------------+----------+---------------+
Programming and Flash
*************************
Build and flash applications as usual (see :ref:`build_an_application` and
:ref:`application_run` for more details).
Configuring a Console
=====================
Connect a USB-to-serial adapter from your PC to corresponding UART pins of SwiftIO Feather.
Use the following settings with your serial terminal of choice (minicom, putty,
etc.):
- Speed: 115200
- Data: 8 bits
- Parity: None
- Stop bits: 1
Flashing
========
Here is an example for the :ref:`hello_world` application.
Connect a DAPLink debuger from your PC to corresponding SWD pins of SwiftIO Feather.
.. zephyr-app-commands::
:zephyr-app: samples/hello_world
:board: mm_feather
:goals: flash
Open a serial terminal, reset the board (press the "reset" button), and you should
see the following message in the terminal:
.. code-block:: console
*** Booting Zephyr OS build v2.6.0-rc1-301-gd9c666a5abf8 ***
Hello World! mm_feather
Debugging
=========
Here is an example for the :ref:`hello_world` application.
.. zephyr-app-commands::
:zephyr-app: samples/hello_world
:board: mm_feather
:goals: debug
Open a serial terminal, step through the application in your debugger, and you
should see the following message in the terminal:
.. code-block:: console
*** Booting Zephyr OS build v2.6.0-rc1-301-gd9c666a5abf8 ***
Hello World! mm_feather
.. _MadMachine Homepage:
https://madmachine.io
.. _SwiftIO API Reference:
https://swiftioapi.madmachine.io

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View file

@ -0,0 +1,43 @@
/*
* Copyright (c) 2019, MADMACHINE LIMITED
*
* refer to hal_nxp board file
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <flexspi_nor_config.h>
#ifdef CONFIG_NXP_IMX_RT_BOOT_HEADER
#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
__attribute__((section(".boot_hdr.conf")))
#elif defined(__ICCARM__)
#pragma location = ".boot_hdr.conf"
#endif
const struct flexspi_nor_config_t Qspiflash_config = {
.memConfig = {
.tag = FLEXSPI_CFG_BLK_TAG,
.version = FLEXSPI_CFG_BLK_VERSION,
.readSampleClkSrc =
kFlexSPIReadSampleClk_LoopbackFromDqsPad,
.csHoldTime = 3u,
.csSetupTime = 3u,
.sflashPadType = kSerialFlash_4Pads,
.serialClkFreq = kFlexSpiSerialClk_100MHz,
.sflashA1Size = 8u * 1024u * 1024u,
.lookupTable = {
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD,
0xEB, RADDR_SDR,
FLEXSPI_4PAD, 0x18),
FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD,
0x06, READ_SDR,
FLEXSPI_4PAD, 0x04),
},
},
.pageSize = 256u,
.sectorSize = 4u * 1024u,
.blockSize = 256u * 1024u,
.isUniformBlockSize = false,
};
#endif /* CONFIG_NXP_IMX_RT_BOOT_HEADER */

View file

@ -0,0 +1,159 @@
/*
* Copyright (c) 2021, MADMACHINE LIMITED
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <nxp/nxp_rt1060.dtsi>
/ {
model = "MM MM-FEATHER board";
compatible = "nxp,mimxrt1062";
aliases {
led0 = &green_led;
led1 = &red_led;
led2 = &blue_led;
};
chosen {
zephyr,sram = &sdram0;
zephyr,itcm = &itcm;
zephyr,dtcm = &dtcm;
zephyr,console = &lpuart1;
zephyr,shell-uart = &lpuart1;
};
sdram0: memory@80000000 {
/* Micron MT48LC16M16A2B4-6AIT:G */
device_type = "memory";
reg = <0x80000000 DT_SIZE_M(32)>;
};
leds {
compatible = "gpio-leds";
red_led: led_0 {
gpios = <&gpio1 9 0>;
label = "RGB R";
};
green_led: led_1 {
gpios = <&gpio1 10 0>;
label = "RGB G";
};
blue_led: led_2 {
gpios = <&gpio1 11 0>;
label = "RGB B";
};
};
};
&flexspi {
reg = <0x402a8000 0x4000>, <0x60000000 DT_SIZE_M(8)>;
is25wp064: is25wp064@0 {
compatible = "nxp,imx-flexspi-nor";
size = <67108864>;
label = "IS25WP064";
reg = <0>;
spi-max-frequency = <133000000>;
status = "okay";
jedec-id = [9d 70 17];
};
};
&lpuart1 {
status = "okay";
current-speed = <115200>;
};
&lpuart2 {
status = "okay";
current-speed = <115200>;
};
&lpuart3 {
status = "okay";
current-speed = <115200>;
};
&lpuart4 {
status = "okay";
current-speed = <115200>;
};
&lpuart8 {
status = "okay";
current-speed = <115200>;
};
&lpi2c1 {
status = "okay";
};
&lpi2c3 {
status = "okay";
};
&lpspi3 {
status = "okay";
pcs-sck-delay = <2>;
sck-pcs-delay = <2>;
transfer-delay = <2>;
};
&lpspi4 {
status = "okay";
pcs-sck-delay = <2>;
sck-pcs-delay = <2>;
transfer-delay = <2>;
};
&flexpwm1_pwm3 {
status = "okay";
};
&flexpwm2_pwm0 {
status = "okay";
};
&flexpwm2_pwm1 {
status = "okay";
};
&flexpwm2_pwm2 {
status = "okay";
};
&flexpwm2_pwm3 {
status = "okay";
};
&flexpwm4_pwm0 {
status = "okay";
};
&flexpwm4_pwm1 {
status = "okay";
};
&flexpwm4_pwm2 {
status = "okay";
};
&flexpwm4_pwm3 {
status = "okay";
};
&usb1 {
status = "okay";
};
&usdhc1 {
status = "okay";
cd-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>;
no-1-8-v;
};

View file

@ -0,0 +1,25 @@
#
# Copyright (c) 2021, MADMACHINE LIMITED
#
# SPDX-License-Identifier: Apache-2.0
#
identifier: mm_feather
name: MM MM-FEATHER
type: mcu
arch: arm
toolchain:
- zephyr
- gnuarmemb
- xtools
ram: 32768
flash: 8192
supported:
- counter
- sdhc
- gpio
- i2c
- dma
- uart
- pwm
- spi

View file

@ -0,0 +1,16 @@
#
# Copyright (c) 2021, MADMACHINE LIMITED
#
# SPDX-License-Identifier: Apache-2.0
#
CONFIG_SOC_MIMXRT1062=y
CONFIG_SOC_SERIES_IMX_RT=y
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_SERIAL=y
CONFIG_CORTEX_M_SYSTICK=y
CONFIG_GPIO=y
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=600000000
CONFIG_ARM_MPU=y
CONFIG_HW_STACK_PROTECTION=y

View file

@ -0,0 +1,294 @@
/*
* Copyright (c) 2021, MADMACHINE LIMITED
*
* refer to hal_nxp board file
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/types.h>
#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
#if defined(XIP_BOOT_HEADER_DCD_ENABLE) && (XIP_BOOT_HEADER_DCD_ENABLE == 1)
#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
__attribute__((section(".boot_hdr.dcd_data")))
#elif defined(__ICCARM__)
#pragma location = ".boot_hdr.dcd_data"
#endif
const uint8_t dcd_data[] = {
0xD2,
0x04, 0x30,
0x41,
0xCC, 0x03, 0xAC, 0x04,
0x40, 0x0F, 0xC0, 0x68, 0xFF, 0xFF, 0xFF, 0xFF,
0x40, 0x0F, 0xC0, 0x6C, 0xFF, 0xFF, 0xFF, 0xFF,
0x40, 0x0F, 0xC0, 0x70, 0xFF, 0xFF, 0xFF, 0xFF,
0x40, 0x0F, 0xC0, 0x74, 0xFF, 0xFF, 0xFF, 0xFF,
0x40, 0x0F, 0xC0, 0x78, 0xFF, 0xFF, 0xFF, 0xFF,
0x40, 0x0F, 0xC0, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF,
0x40, 0x0F, 0xC0, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
0x40, 0x0D, 0x80, 0x30, 0x00, 0x00, 0x20, 0x01,
0x40, 0x0D, 0x81, 0x00, 0x00, 0x1D, 0x00, 0x00,
0x40, 0x0F, 0xC0, 0x14, 0x00, 0x01, 0x0D, 0x40,
0x40, 0x1F, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x18, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x1C, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x24, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x28, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x2C, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x34, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x38, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x3C, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x44, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x48, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x4C, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x50, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x54, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x58, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x5C, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x64, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x68, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x6C, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x70, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x74, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x78, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x7C, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x84, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x8C, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x90, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x94, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x98, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0x9C, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0xA0, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0xA4, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0xA8, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0xAC, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0xB0, 0x00, 0x00, 0x00, 0x10,
0x40, 0x1F, 0x80, 0xB4, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x80, 0xB8, 0x00, 0x00, 0x00, 0x00,
0x40, 0x1F, 0x82, 0x04, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x08, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x0C, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x10, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x14, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x18, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x1C, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x20, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x24, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x28, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x2C, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x30, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x34, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x38, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x3C, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x40, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x44, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x48, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x4C, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x50, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x54, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x58, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x5C, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x60, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x64, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x68, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x6C, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x70, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x74, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x78, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x7C, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x80, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x84, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x88, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x8C, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x90, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x94, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x98, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0x9C, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0xA0, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0xA4, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x1F, 0x82, 0xA8, 0x00, 0x01, 0x10, 0xF9,
0x40, 0x2F, 0x00, 0x00, 0x10, 0x00, 0x00, 0x04,
0x40, 0x2F, 0x00, 0x08, 0x00, 0x03, 0x05, 0x24,
0x40, 0x2F, 0x00, 0x0C, 0x06, 0x03, 0x05, 0x24,
0x40, 0x2F, 0x00, 0x10, 0x80, 0x00, 0x00, 0x1B,
0x40, 0x2F, 0x00, 0x14, 0x82, 0x00, 0x00, 0x1B,
0x40, 0x2F, 0x00, 0x18, 0x84, 0x00, 0x00, 0x1B,
0x40, 0x2F, 0x00, 0x1C, 0x86, 0x00, 0x00, 0x1B,
0x40, 0x2F, 0x00, 0x20, 0x90, 0x00, 0x00, 0x21,
0x40, 0x2F, 0x00, 0x24, 0xA0, 0x00, 0x00, 0x19,
0x40, 0x2F, 0x00, 0x28, 0xA8, 0x00, 0x00, 0x17,
0x40, 0x2F, 0x00, 0x2C, 0xA9, 0x00, 0x00, 0x1B,
0x40, 0x2F, 0x00, 0x30, 0x00, 0x00, 0x00, 0x21,
0x40, 0x2F, 0x00, 0x04, 0x00, 0x00, 0x79, 0xA8,
0x40, 0x2F, 0x00, 0x40, 0x00, 0x00, 0x0F, 0x31,
0x40, 0x2F, 0x00, 0x44, 0x00, 0x65, 0x29, 0x22,
0x40, 0x2F, 0x00, 0x48, 0x00, 0x01, 0x09, 0x20,
0x40, 0x2F, 0x00, 0x4C, 0x50, 0x21, 0x0A, 0x08,
0x40, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x21,
0x40, 0x2F, 0x00, 0x84, 0x00, 0x88, 0x88, 0x88,
0x40, 0x2F, 0x00, 0x94, 0x00, 0x00, 0x00, 0x02,
0x40, 0x2F, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00,
0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00,
0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0F,
0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01,
0xCC, 0x00, 0x14, 0x04,
0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00,
0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0C,
0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01,
0xCC, 0x00, 0x14, 0x04,
0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00,
0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0C,
0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01,
0xCC, 0x00, 0x1C, 0x04,
0x40, 0x2F, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x33,
0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00,
0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0A,
0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01,
0xCC, 0x00, 0x0C, 0x04, 0x40, 0x2F, 0x00, 0x4C, 0x50, 0x21, 0x0A, 0x09
};
#else
const uint8_t dcd_data[] = { 0x00 };
#endif
#endif

View file

@ -0,0 +1,192 @@
/*
* Copyright (c) 2021, MADMACHINE LIMITED
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <init.h>
#include <fsl_iomuxc.h>
#include <fsl_gpio.h>
#include <soc.h>
#if DT_NODE_HAS_STATUS(DT_NODELABEL(enet), okay)
static gpio_pin_config_t enet_gpio_config = {
.direction = kGPIO_DigitalOutput,
.outputLogic = 0,
.interruptMode = kGPIO_NoIntmode
};
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(usdhc1), okay) && CONFIG_DISK_DRIVER_SDMMC
/*Drive Strength Field: R0(260 Ohm @ 3.3V, 150 Ohm@1.8V, 240 Ohm for DDR)
*Speed Field: medium(100MHz)
*Open Drain Enable Field: Open Drain Disabled
*Pull / Keep Enable Field: Pull/Keeper Enabled
*Pull / Keep Select Field: Pull
*Pull Up / Down Config. Field: 47K Ohm Pull Up
*Hyst. Enable Field: Hysteresis Enabled.
*/
static void mm_feather_usdhc_pinmux(
uint16_t nusdhc, bool init,
uint32_t speed, uint32_t strength)
{
uint32_t cmd_data = IOMUXC_SW_PAD_CTL_PAD_SPEED(speed) |
IOMUXC_SW_PAD_CTL_PAD_SRE_MASK |
IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
IOMUXC_SW_PAD_CTL_PAD_PUE_MASK |
IOMUXC_SW_PAD_CTL_PAD_HYS_MASK |
IOMUXC_SW_PAD_CTL_PAD_PUS(1) |
IOMUXC_SW_PAD_CTL_PAD_DSE(strength);
uint32_t clk = IOMUXC_SW_PAD_CTL_PAD_SPEED(speed) |
IOMUXC_SW_PAD_CTL_PAD_SRE_MASK |
IOMUXC_SW_PAD_CTL_PAD_HYS_MASK |
IOMUXC_SW_PAD_CTL_PAD_PUS(0) |
IOMUXC_SW_PAD_CTL_PAD_DSE(strength);
if (nusdhc == 0) {
if (init) {
IOMUXC_SetPinMux(
IOMUXC_GPIO_AD_B0_05_GPIO1_IO05,
0U);
IOMUXC_SetPinMux(/*SD_CD*/
IOMUXC_GPIO_B1_12_GPIO2_IO28,
0U);
IOMUXC_SetPinMux(
IOMUXC_GPIO_SD_B0_00_USDHC1_CMD,
0U);
IOMUXC_SetPinMux(
IOMUXC_GPIO_SD_B0_01_USDHC1_CLK,
0U);
IOMUXC_SetPinMux(
IOMUXC_GPIO_SD_B0_02_USDHC1_DATA0,
0U);
IOMUXC_SetPinMux(
IOMUXC_GPIO_SD_B0_03_USDHC1_DATA1,
0U);
IOMUXC_SetPinMux(
IOMUXC_GPIO_SD_B0_04_USDHC1_DATA2,
0U);
IOMUXC_SetPinMux(
IOMUXC_GPIO_SD_B0_05_USDHC1_DATA3,
0U);
IOMUXC_SetPinConfig(
IOMUXC_GPIO_AD_B0_05_GPIO1_IO05,
0x10B0u);
IOMUXC_SetPinConfig(/*SD0_CD_SW*/
IOMUXC_GPIO_B1_12_GPIO2_IO28,
0x017089u);
}
IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_00_USDHC1_CMD,
cmd_data);
IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_01_USDHC1_CLK,
clk);
IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_02_USDHC1_DATA0,
cmd_data);
IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_03_USDHC1_DATA1,
cmd_data);
IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_04_USDHC1_DATA2,
cmd_data);
IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_05_USDHC1_DATA3,
cmd_data);
}
}
#endif
static int mm_feather_init(const struct device *dev)
{
ARG_UNUSED(dev);
CLOCK_EnableClock(kCLOCK_Iomuxc);
CLOCK_EnableClock(kCLOCK_IomuxcSnvs);
/* LED */
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_09_GPIO1_IO09, 0);
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_09_GPIO1_IO09,
IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
IOMUXC_SW_PAD_CTL_PAD_DSE(6));
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_10_GPIO1_IO10, 0);
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_10_GPIO1_IO10,
IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
IOMUXC_SW_PAD_CTL_PAD_DSE(6));
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_11_GPIO1_IO11, 0);
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_11_GPIO1_IO11,
IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
IOMUXC_SW_PAD_CTL_PAD_DSE(6));
#if DT_NODE_HAS_STATUS(DT_NODELABEL(lpuart1), okay) && CONFIG_SERIAL
/* LPUART1 TX/RX */
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_12_LPUART1_TX, 0);
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_13_LPUART1_RX, 0);
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_12_LPUART1_TX,
IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
IOMUXC_SW_PAD_CTL_PAD_DSE(6));
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_13_LPUART1_RX,
IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
IOMUXC_SW_PAD_CTL_PAD_DSE(6));
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(lpi2c1), okay) && CONFIG_I2C
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_00_LPI2C1_SCL, 1);
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_01_LPI2C1_SDA, 1);
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_00_LPI2C1_SCL,
IOMUXC_SW_PAD_CTL_PAD_PUS(3) |
IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
IOMUXC_SW_PAD_CTL_PAD_ODE_MASK |
IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
IOMUXC_SW_PAD_CTL_PAD_DSE(6));
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_01_LPI2C1_SDA,
IOMUXC_SW_PAD_CTL_PAD_PUS(3) |
IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
IOMUXC_SW_PAD_CTL_PAD_ODE_MASK |
IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
IOMUXC_SW_PAD_CTL_PAD_DSE(6));
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(lpi2c3), okay) && CONFIG_I2C
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_07_LPI2C3_SCL, 1);
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_06_LPI2C3_SDA, 1);
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_07_LPI2C3_SCL,
IOMUXC_SW_PAD_CTL_PAD_PUS(3) |
IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
IOMUXC_SW_PAD_CTL_PAD_ODE_MASK |
IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
IOMUXC_SW_PAD_CTL_PAD_DSE(6));
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_06_LPI2C3_SDA,
IOMUXC_SW_PAD_CTL_PAD_PUS(3) |
IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
IOMUXC_SW_PAD_CTL_PAD_ODE_MASK |
IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
IOMUXC_SW_PAD_CTL_PAD_DSE(6));
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(usdhc1), okay) && CONFIG_DISK_DRIVER_SDMMC
mm_feather_usdhc_pinmux(0, true, 2, 1);
imxrt_usdhc_pinmux_cb_register(mm_feather_usdhc_pinmux);
#endif
return 0;
}
SYS_INIT(mm_feather_init, PRE_KERNEL_1, 0);