From 335982b112f20cf6ee78ad40504d1e9f3e38b2dd Mon Sep 17 00:00:00 2001 From: Frank Li Date: Sat, 17 Jul 2021 11:33:40 +0800 Subject: [PATCH] boards: mm_feather: add board support for Feather Add new board to support Madmachine Feather. Signed-off-by: Frank Li --- boards/arm/mm_feather/CMakeLists.txt | 10 + boards/arm/mm_feather/Kconfig.board | 10 + boards/arm/mm_feather/Kconfig.defconfig | 18 ++ boards/arm/mm_feather/board.cmake | 12 + boards/arm/mm_feather/doc/index.rst | 239 ++++++++++++++ boards/arm/mm_feather/doc/mm_feather.jpg | Bin 0 -> 92797 bytes boards/arm/mm_feather/flexspi_nor_config.c | 43 +++ boards/arm/mm_feather/mm_feather.dts | 159 ++++++++++ boards/arm/mm_feather/mm_feather.yaml | 25 ++ boards/arm/mm_feather/mm_feather_defconfig | 16 + .../arm/mm_feather/mmfeather_sdram_ini_dcd.c | 294 ++++++++++++++++++ boards/arm/mm_feather/pinmux.c | 192 ++++++++++++ 12 files changed, 1018 insertions(+) create mode 100644 boards/arm/mm_feather/CMakeLists.txt create mode 100644 boards/arm/mm_feather/Kconfig.board create mode 100644 boards/arm/mm_feather/Kconfig.defconfig create mode 100644 boards/arm/mm_feather/board.cmake create mode 100644 boards/arm/mm_feather/doc/index.rst create mode 100644 boards/arm/mm_feather/doc/mm_feather.jpg create mode 100644 boards/arm/mm_feather/flexspi_nor_config.c create mode 100644 boards/arm/mm_feather/mm_feather.dts create mode 100644 boards/arm/mm_feather/mm_feather.yaml create mode 100644 boards/arm/mm_feather/mm_feather_defconfig create mode 100644 boards/arm/mm_feather/mmfeather_sdram_ini_dcd.c create mode 100644 boards/arm/mm_feather/pinmux.c diff --git a/boards/arm/mm_feather/CMakeLists.txt b/boards/arm/mm_feather/CMakeLists.txt new file mode 100644 index 00000000000..22e8a9e01d4 --- /dev/null +++ b/boards/arm/mm_feather/CMakeLists.txt @@ -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) diff --git a/boards/arm/mm_feather/Kconfig.board b/boards/arm/mm_feather/Kconfig.board new file mode 100644 index 00000000000..c003514fdab --- /dev/null +++ b/boards/arm/mm_feather/Kconfig.board @@ -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 diff --git a/boards/arm/mm_feather/Kconfig.defconfig b/boards/arm/mm_feather/Kconfig.defconfig new file mode 100644 index 00000000000..a0f6910a7dc --- /dev/null +++ b/boards/arm/mm_feather/Kconfig.defconfig @@ -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 diff --git a/boards/arm/mm_feather/board.cmake b/boards/arm/mm_feather/board.cmake new file mode 100644 index 00000000000..573baa5ccb0 --- /dev/null +++ b/boards/arm/mm_feather/board.cmake @@ -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) diff --git a/boards/arm/mm_feather/doc/index.rst b/boards/arm/mm_feather/doc/index.rst new file mode 100644 index 00000000000..ef70ee0a22c --- /dev/null +++ b/boards/arm/mm_feather/doc/index.rst @@ -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 +`_. 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 diff --git a/boards/arm/mm_feather/doc/mm_feather.jpg b/boards/arm/mm_feather/doc/mm_feather.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43e2ff48eebbf2429b4030bca589775dc786d033 GIT binary patch literal 92797 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

PP89m*xet9MBHi(3dL)Bd^~WZahot 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 E0nukSZU6uP literal 0 HcmV?d00001 diff --git a/boards/arm/mm_feather/flexspi_nor_config.c b/boards/arm/mm_feather/flexspi_nor_config.c new file mode 100644 index 00000000000..647dac001c9 --- /dev/null +++ b/boards/arm/mm_feather/flexspi_nor_config.c @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2019, MADMACHINE LIMITED + * + * refer to hal_nxp board file + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +#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 */ diff --git a/boards/arm/mm_feather/mm_feather.dts b/boards/arm/mm_feather/mm_feather.dts new file mode 100644 index 00000000000..60e5c091e2d --- /dev/null +++ b/boards/arm/mm_feather/mm_feather.dts @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2021, MADMACHINE LIMITED + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include + +/ { + 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; +}; diff --git a/boards/arm/mm_feather/mm_feather.yaml b/boards/arm/mm_feather/mm_feather.yaml new file mode 100644 index 00000000000..2645f42f5bc --- /dev/null +++ b/boards/arm/mm_feather/mm_feather.yaml @@ -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 diff --git a/boards/arm/mm_feather/mm_feather_defconfig b/boards/arm/mm_feather/mm_feather_defconfig new file mode 100644 index 00000000000..5090ec4f17d --- /dev/null +++ b/boards/arm/mm_feather/mm_feather_defconfig @@ -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 diff --git a/boards/arm/mm_feather/mmfeather_sdram_ini_dcd.c b/boards/arm/mm_feather/mmfeather_sdram_ini_dcd.c new file mode 100644 index 00000000000..3bab1761d7c --- /dev/null +++ b/boards/arm/mm_feather/mmfeather_sdram_ini_dcd.c @@ -0,0 +1,294 @@ +/* + * Copyright (c) 2021, MADMACHINE LIMITED + * + * refer to hal_nxp board file + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +#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 diff --git a/boards/arm/mm_feather/pinmux.c b/boards/arm/mm_feather/pinmux.c new file mode 100644 index 00000000000..0429035615d --- /dev/null +++ b/boards/arm/mm_feather/pinmux.c @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2021, MADMACHINE LIMITED + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include + +#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);