From 4c81289a8388b097d6ef66826b3cd54cccdbaed4 Mon Sep 17 00:00:00 2001 From: Daniel DeGrasse Date: Fri, 8 Oct 2021 09:55:38 -0500 Subject: [PATCH] boards: mimxrt1050_evk: Added support for LPSPI1 peripheral RT1050 has multiple LPSPI peripherals. The simplest to access is LPSPI1, which can be connected by bridging solder jumpers on the board. Enable this SPI peripheral, and set it as default for SPI tests. Signed-off-by: Daniel DeGrasse --- boards/arm/mimxrt1050_evk/doc/index.rst | 16 +++++---- boards/arm/mimxrt1050_evk/mimxrt1050_evk.dts | 4 +++ boards/arm/mimxrt1050_evk/pinmux.c | 34 +++++++++++++++++++ .../spi_loopback/boards/mimxrt1050_evk.conf | 2 +- 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/boards/arm/mimxrt1050_evk/doc/index.rst b/boards/arm/mimxrt1050_evk/doc/index.rst index 1c247818004..7979796d709 100644 --- a/boards/arm/mimxrt1050_evk/doc/index.rst +++ b/boards/arm/mimxrt1050_evk/doc/index.rst @@ -131,9 +131,9 @@ The MIMXRT1050 SoC has five pairs of pinmux/gpio controllers. +---------------+-----------------+---------------------------+ | Name | Function | Usage | +===============+=================+===========================+ -| GPIO_AD_B0_00 | LPSPI3_SCK | SPI | +| GPIO_AD_B0_00 | LPSPI1_SCK | SPI | +---------------+-----------------+---------------------------+ -| GPIO_AD_B0_01 | LPSPI3_SDO | SPI | +| GPIO_AD_B0_01 | LPSPI1_SDO | SPI | +---------------+-----------------+---------------------------+ | GPIO_AD_B0_02 | LPSPI3_SDI/LCD_RST| SPI/LCD Display | +---------------+-----------------+---------------------------+ @@ -231,19 +231,23 @@ The MIMXRT1050 SoC has five pairs of pinmux/gpio controllers. +---------------+-----------------+---------------------------+ | GPIO_AD_B0_10 | ENET_INT | Ethernet | +---------------+-----------------+---------------------------+ -| GPIO_SD_B0_00 | USDHC1_CMD | SD Card | +| GPIO_SD_B0_00 | USDHC1_CMD/LPSPI1_SCK | SD Card/SPI | +---------------+-----------------+---------------------------+ -| GPIO_SD_B0_01 | USDHC1_CLK | SD Card | +| GPIO_SD_B0_01 | USDHC1_CLK/LPSPI1_PCS0 | SD Card/SPI | +---------------+-----------------+---------------------------+ -| GPIO_SD_B0_02 | USDHC1_DATA0 | SD Card | +| GPIO_SD_B0_02 | USDHC1_DATA0/LPSPI1_SDO | SD Card/SPI | +---------------+-----------------+---------------------------+ -| GPIO_SD_B0_03 | USDHC1_DATA1 | SD Card | +| GPIO_SD_B0_03 | USDHC1_DATA1/LPSPI1_SDI | SD Card/SPI | +---------------+-----------------+---------------------------+ | GPIO_SD_B0_04 | USDHC1_DATA2 | SD Card | +---------------+-----------------+---------------------------+ | GPIO_SD_B0_05 | USDHC1_DATA3 | SD Card | +---------------+-----------------+---------------------------+ +.. note:: + In order to use the SPI peripheral on this board, resistors R278, + R279, R280, and R281 must be populated with zero ohm resistors + System Clock ============ diff --git a/boards/arm/mimxrt1050_evk/mimxrt1050_evk.dts b/boards/arm/mimxrt1050_evk/mimxrt1050_evk.dts index c738cddf932..798536ec62b 100644 --- a/boards/arm/mimxrt1050_evk/mimxrt1050_evk.dts +++ b/boards/arm/mimxrt1050_evk/mimxrt1050_evk.dts @@ -141,6 +141,10 @@ arduino_serial: &lpuart3 {}; current-speed = <115200>; }; +&lpspi1 { + status = "okay"; +}; + &lpspi3 { status = "okay"; }; diff --git a/boards/arm/mimxrt1050_evk/pinmux.c b/boards/arm/mimxrt1050_evk/pinmux.c index a013e45912f..e4d641d5487 100644 --- a/boards/arm/mimxrt1050_evk/pinmux.c +++ b/boards/arm/mimxrt1050_evk/pinmux.c @@ -183,6 +183,40 @@ static int mimxrt1050_evk_init(const struct device *dev) IOMUXC_SW_PAD_CTL_PAD_DSE(6)); #endif +#if DT_NODE_HAS_STATUS(DT_NODELABEL(lpspi1), okay) && CONFIG_SPI +#if DT_NODE_HAS_STATUS(DT_NODELABEL(usdhc1), okay) && CONFIG_DISK_DRIVER_SDMMC + #error "SPI and SDMMC pins conflict on this board." \ + "Please disable one via KConfig or device tree" +#else + /* LPSPI1 SCK, SDO, SDI, PCS0 */ + /* Expose these pins by connecting R278, R279, R280, and R281 on evk board */ + IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_00_LPSPI1_SCK, 0); + IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_01_LPSPI1_PCS0, 0); + IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_02_LPSPI1_SDO, 0); + IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_03_LPSPI1_SDI, 0); + + IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_00_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_SD_B0_01_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_SD_B0_02_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_SD_B0_03_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(lpspi3), okay) && CONFIG_SPI /* LPSPI3 SCK, SDO, SDI, PCS0 */ IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_00_LPSPI3_SCK, 0); diff --git a/tests/drivers/spi/spi_loopback/boards/mimxrt1050_evk.conf b/tests/drivers/spi/spi_loopback/boards/mimxrt1050_evk.conf index 3c85e9e6118..2d0842cf844 100644 --- a/tests/drivers/spi/spi_loopback/boards/mimxrt1050_evk.conf +++ b/tests/drivers/spi/spi_loopback/boards/mimxrt1050_evk.conf @@ -4,4 +4,4 @@ # SPDX-License-Identifier: Apache-2.0 # -CONFIG_SPI_LOOPBACK_DRV_NAME="SPI_3" +CONFIG_SPI_LOOPBACK_DRV_NAME="SPI_1"