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 00000000000..43e2ff48eeb Binary files /dev/null and b/boards/arm/mm_feather/doc/mm_feather.jpg differ 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);