diff --git a/boards/arm/mimxrt1020_evk/doc/index.rst b/boards/arm/mimxrt1020_evk/doc/index.rst index 8142db4a064..1533c20543e 100644 --- a/boards/arm/mimxrt1020_evk/doc/index.rst +++ b/boards/arm/mimxrt1020_evk/doc/index.rst @@ -77,6 +77,8 @@ features: +-----------+------------+-------------------------------------+ | GPIO | on-chip | gpio | +-----------+------------+-------------------------------------+ +| SPI | on-chip | spi | ++-----------+------------+-------------------------------------+ | I2C | on-chip | i2c | +-----------+------------+-------------------------------------+ | SDHC | on-chip | disk access | @@ -128,13 +130,13 @@ The MIMXRT1020 SoC has five pairs of pinmux/gpio controllers. +---------------+-----------------+---------------------------+ | GPIO_AD_B0_09 | ENET_RX_DATA01 | Ethernet | +---------------+-----------------+---------------------------+ -| GPIO_AD_B0_10 | ENET_RX_DATA00 | Ethernet | +| GPIO_AD_B0_10 | ENET_RX_DATA00/LPSPI1_SCK | Ethernet/SPI | +---------------+-----------------+---------------------------+ -| GPIO_AD_B0_11 | ENET_RX_EN | Ethernet | +| GPIO_AD_B0_11 | ENET_RX_EN/LPSPI1_PCS0 | Ethernet/SPI | +---------------+-----------------+---------------------------+ -| GPIO_AD_B0_12 | ENET_RX_ER | Ethernet | +| GPIO_AD_B0_12 | ENET_RX_ER/LPSPI1_SDO | Ethernet/SPI | +---------------+-----------------+---------------------------+ -| GPIO_AD_B0_13 | ENET_TX_EN | Ethernet | +| GPIO_AD_B0_13 | ENET_TX_EN/LPSPI1_SDI | Ethernet/SPI | +---------------+-----------------+---------------------------+ | GPIO_AD_B0_14 | ENET_TX_DATA00 | Ethernet | +---------------+-----------------+---------------------------+ diff --git a/boards/arm/mimxrt1020_evk/mimxrt1020_evk.dts b/boards/arm/mimxrt1020_evk/mimxrt1020_evk.dts index 18aa9bcb837..87e9a183ab4 100644 --- a/boards/arm/mimxrt1020_evk/mimxrt1020_evk.dts +++ b/boards/arm/mimxrt1020_evk/mimxrt1020_evk.dts @@ -138,6 +138,10 @@ arduino_serial: &lpuart2 {}; current-speed = <115200>; }; +&lpspi1 { + status = "okay"; +}; + &enet { status = "okay"; ptp { diff --git a/boards/arm/mimxrt1020_evk/mimxrt1020_evk.yaml b/boards/arm/mimxrt1020_evk/mimxrt1020_evk.yaml index a22b05e7207..a45f4910a3f 100644 --- a/boards/arm/mimxrt1020_evk/mimxrt1020_evk.yaml +++ b/boards/arm/mimxrt1020_evk/mimxrt1020_evk.yaml @@ -21,4 +21,5 @@ supported: - gpio - i2c - netif:eth + - spi - usb_device diff --git a/boards/arm/mimxrt1020_evk/pinmux.c b/boards/arm/mimxrt1020_evk/pinmux.c index 84e6e2f17e5..67b352f2dae 100644 --- a/boards/arm/mimxrt1020_evk/pinmux.c +++ b/boards/arm/mimxrt1020_evk/pinmux.c @@ -223,6 +223,40 @@ static int mimxrt1020_evk_init(const struct device *dev) GPIO_WritePinOutput(GPIO1, 4, 0); #endif +#if DT_NODE_HAS_STATUS(DT_NODELABEL(lpspi1), okay) && CONFIG_SPI +#if DT_NODE_HAS_STATUS(DT_NODELABEL(enet), okay) && CONFIG_NET_L2_ETHERNET + #error "LPSPI1 and ENET share pins on this board, please disable one" \ + "using KConfig or the devicetree" +#else + /* LPSPI1 CS, SDO, SDI, CLK exposed as pins 3, 4, 5, and 6 on J19 */ + /* GPIO_AD_B0_10 is configured as LPSPI1_SCK */ + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_10_LPSPI1_SCK, 0U); + /* GPIO_AD_B0_11 is configured as LPSPI1_PCS0 */ + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_11_LPSPI1_PCS0, 0U); + /* GPIO_AD_B0_12 is configured as LPSPI1_SDO */ + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_12_LPSPI1_SDO, 0U); + /* GPIO_AD_B0_13 is configured as LPSPI1_SDI */ + IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_13_LPSPI1_SDI, 0U); + + IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_10_LPSPI1_SCK, + 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_11_LPSPI1_PCS0, + 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_12_LPSPI1_SDO, + 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_LPSPI1_SDI, + IOMUXC_SW_PAD_CTL_PAD_PKE_MASK | + IOMUXC_SW_PAD_CTL_PAD_SPEED(2) | + IOMUXC_SW_PAD_CTL_PAD_DSE(6)); +#endif +#endif + #if DT_NODE_HAS_STATUS(DT_NODELABEL(usdhc1), okay) && CONFIG_DISK_DRIVER_SDMMC mimxrt1020_evk_usdhc_pinmux(0, true, 2, 1); imxrt_usdhc_pinmux_cb_register(mimxrt1020_evk_usdhc_pinmux); diff --git a/tests/drivers/spi/spi_loopback/boards/mimxrt1020_evk.conf b/tests/drivers/spi/spi_loopback/boards/mimxrt1020_evk.conf new file mode 100644 index 00000000000..8433ea85677 --- /dev/null +++ b/tests/drivers/spi/spi_loopback/boards/mimxrt1020_evk.conf @@ -0,0 +1,7 @@ +# +# Copyright (c) 2021, NXP +# +# SPDX-License-Identifier: Apache-2.0 +# + +CONFIG_SPI_LOOPBACK_DRV_NAME="SPI_1"