mirror of
https://git.rtems.org/rtems-docs/
synced 2025-07-24 02:22:02 +08:00
parent
9291bbbdd7
commit
e95d992e3c
173
user/bsps/arm/imxrt.rst
Normal file
173
user/bsps/arm/imxrt.rst
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
.. SPDX-License-Identifier: CC-BY-SA-4.0
|
||||||
|
|
||||||
|
.. Copyright (C) 2020 embedded brains GmbH
|
||||||
|
.. Copyright (C) 2020 Christian Mauderer
|
||||||
|
|
||||||
|
imxrt (NXP i.MXRT)
|
||||||
|
==================
|
||||||
|
|
||||||
|
This BSP offers only one variant, the `imxrt1052`. This variant supports the
|
||||||
|
i.MXRT 1052 processor on a IMXRT1050-EVKB (tested with rev A1). You can also
|
||||||
|
configure it to work with custom boards.
|
||||||
|
|
||||||
|
Build Configuration Options
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Please see the documentation of the `IMXRT_*` and `BSP_*` configuration options
|
||||||
|
for that. You can generate a default set of options with::
|
||||||
|
|
||||||
|
./waf bsp_defaults --rtems-bsps=arm/imxrt1052 > config.ini
|
||||||
|
|
||||||
|
Boot Process
|
||||||
|
------------
|
||||||
|
|
||||||
|
There are two possible boot processes supported:
|
||||||
|
|
||||||
|
1) The ROM code loads a configuration from HyperFlash (connected to FlexSPI),
|
||||||
|
does some initialization (based on device configuration data (DCD)) and then
|
||||||
|
starts the application. This is the default case. `linkcmds.flexspi` is used
|
||||||
|
for this case.
|
||||||
|
|
||||||
|
2) Some custom bootloader does the basic initialization, loads the application
|
||||||
|
to SDRAM and starts it from there. Select the `linkcmds.sdram` for this.
|
||||||
|
|
||||||
|
For programming the HyperFlash in case 1, you can use the on board debugger
|
||||||
|
integrated into the IMXRT1050-EVKB. You can generate a flash image out of a
|
||||||
|
compiled RTEMS application with for example::
|
||||||
|
|
||||||
|
arm-rtems6-objcopy -O binary build/arm/imxrt1052/testsuites/samples/hello.exe hello.bin
|
||||||
|
|
||||||
|
Then just copy the generated binary to the mass storage provided by the
|
||||||
|
debugger. Wait a bit till the mass storage vanishes and re-appears. After that,
|
||||||
|
reset the board and the newly programmed application will start.
|
||||||
|
|
||||||
|
For debugging: Create a special application with a `while(true)` loop at end of
|
||||||
|
`bsp_start_hook_1`. Load that application into flash. Then remove the loop
|
||||||
|
again, build your BSP for SDRAM and use a debugger to load the application into
|
||||||
|
SDRAM after the BSP started from flash did the basic initialization.
|
||||||
|
|
||||||
|
Flash Image
|
||||||
|
-----------
|
||||||
|
|
||||||
|
For booting from a HyperFlash (or other storage connected to FlexSPI), the ROM
|
||||||
|
code of the i.MXRT first reads some special flash header information from a
|
||||||
|
fixed location of the connected flash device. This consists of the Image vector
|
||||||
|
table (IVT), Boot data and Device configuration data (DCD).
|
||||||
|
|
||||||
|
In RTEMS, these flash headers are generated using some C-structures. If you use
|
||||||
|
a board other than the IMXRT1050-EVKB, those structures have to be adapted. To
|
||||||
|
do that re-define the following variables in your application (you only need the
|
||||||
|
ones that need different values):
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
#include <bsp/flash-headers.h>
|
||||||
|
const uint8_t imxrt_dcd_data[] =
|
||||||
|
{ /* Your DCD data here */ };
|
||||||
|
const ivt imxrt_image_vector_table =
|
||||||
|
{ /* Your IVT here */ };
|
||||||
|
const BOOT_DATA_T imxrt_boot_data =
|
||||||
|
{ /* Your boot data here */ };
|
||||||
|
const flexspi_nor_config_t imxrt_flexspi_config =
|
||||||
|
{ /* Your FlexSPI config here */ };
|
||||||
|
|
||||||
|
You can find the default definitions in `bsps/arm/imxrt/start/flash-*.c`. Take a
|
||||||
|
look at the `i.MX RT1050 Processor Reference Manual, Rev. 4, 12/2019` chapter
|
||||||
|
`9.7 Program image` for details about the contents.
|
||||||
|
|
||||||
|
FDT
|
||||||
|
---
|
||||||
|
|
||||||
|
The BSP used a FDT based initialization. The FDT is linked into the application.
|
||||||
|
You can find the default FDT used in the BSP in
|
||||||
|
`bsps/arm/imxrt/dts/imxrt1050-evkb.dts`. To use your own FDT compile it and
|
||||||
|
convert it into a C file with (replace `YOUR.dts` and simmilar with your FDT
|
||||||
|
source names)::
|
||||||
|
|
||||||
|
sh> export BSP_DIR="${RTEMS_SRC_DIR}/bsps/arm/imxrt/"
|
||||||
|
sh> arm-rtems6-cpp -P -x assembler-with-cpp \
|
||||||
|
-I "${BSP_DIR}/include/" \
|
||||||
|
-include "YOUR.dts" /dev/null | \
|
||||||
|
dtc -@ -O dtb -o "YOUR.dtb" -b 0 -p 1024
|
||||||
|
sh> rtems-bin2c -C -N imxrt_dtb "YOUR.dtb" "YOUR.c"
|
||||||
|
|
||||||
|
Make sure that your new c file is compiled and linked into the application.
|
||||||
|
|
||||||
|
Clock Driver
|
||||||
|
------------
|
||||||
|
|
||||||
|
The clock driver uses the generic `ARMv7-M Clock`.
|
||||||
|
|
||||||
|
IOMUX
|
||||||
|
-----
|
||||||
|
|
||||||
|
The i.MXRT IOMUXC is initialized based on the FDT. For that, the `pinctrl-0`
|
||||||
|
fields of all devices with a status of `ok` or `okay` will be parsed.
|
||||||
|
|
||||||
|
Console Driver
|
||||||
|
--------------
|
||||||
|
|
||||||
|
LPUART drivers are registered based on the FDT. The special `rtems,path`
|
||||||
|
attribute defines where the device file for the console is created.
|
||||||
|
|
||||||
|
The `stdout-path` in the `chosen` node determines which LPUART is used for the
|
||||||
|
console.
|
||||||
|
|
||||||
|
I2C Driver
|
||||||
|
----------
|
||||||
|
|
||||||
|
I2C drivers are registered based on the FDT. The special `rtems,path` attribute
|
||||||
|
defines where the device file for the I2C bus is created.
|
||||||
|
|
||||||
|
Limitations:
|
||||||
|
|
||||||
|
* Only basic I2C is implemented. This is mostly a driver limitation and not a
|
||||||
|
hardware one.
|
||||||
|
|
||||||
|
SPI Driver
|
||||||
|
----------
|
||||||
|
|
||||||
|
SPI drivers are registered based on the FDT. The special `rtems,path` attribute
|
||||||
|
defines where the device file for the SPI bus is created.
|
||||||
|
|
||||||
|
Note that the SPI-pins on the evaluation board are shared with the SD card.
|
||||||
|
Populate R278, R279, R280, R281 on the IMXRT1050-EVKB (Rev A) to use the SPI
|
||||||
|
pins on the Arduino connector.
|
||||||
|
|
||||||
|
Limitations:
|
||||||
|
|
||||||
|
* Only a basic SPI driver is implemented. This is mostly a driver limitation and
|
||||||
|
not a hardware one.
|
||||||
|
|
||||||
|
Network Interface Driver
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
The network interface driver is provided by the `libbsd`. It is initialized
|
||||||
|
according to the device tree.
|
||||||
|
|
||||||
|
Note on the hardware: The i.MXRT1050 EVKB maybe has a wrong termination of the
|
||||||
|
RXP, RXN, TXP and TXN lines. The resistors R126 through R129 maybe shouldn't be
|
||||||
|
populated because the used KSZ8081RNB already has an internal termination.
|
||||||
|
Ethernet does work on short distance anyway. But keep it in mind in case you
|
||||||
|
have problems. Source:
|
||||||
|
https://community.nxp.com/t5/i-MX-RT/Error-in-IMXRT1050-EVKB-and-1060-schematic-ethernet/m-p/835540#M1587
|
||||||
|
|
||||||
|
NXP SDK files
|
||||||
|
-------------
|
||||||
|
|
||||||
|
A lot of peripherals are currently not yet supported by RTEMS drivers. The NXP
|
||||||
|
SDK offers drivers for these. For convenience, the BSP compiles the drivers from
|
||||||
|
the SDK. But please note that they are not tested and maybe won't work out of
|
||||||
|
the box. Everything that works with interrupts most likely needs some special
|
||||||
|
treatment.
|
||||||
|
|
||||||
|
Caveats
|
||||||
|
-------
|
||||||
|
|
||||||
|
The clock configuration support is quite rudimentary. The same is true for
|
||||||
|
SDRAM. It mostly relies on the DCD and on a static clock configuration that is
|
||||||
|
taken from the NXP SDK example projects.
|
||||||
|
|
||||||
|
The MPU settings are currently quite permissive.
|
||||||
|
|
||||||
|
There is no power management support.
|
@ -14,6 +14,7 @@ arm (ARM)
|
|||||||
.. include:: arm/edb7312.rst
|
.. include:: arm/edb7312.rst
|
||||||
.. include:: arm/gumstix.rst
|
.. include:: arm/gumstix.rst
|
||||||
.. include:: arm/imx.rst
|
.. include:: arm/imx.rst
|
||||||
|
.. include:: arm/imxrt.rst
|
||||||
.. include:: arm/lm3s69xx.rst
|
.. include:: arm/lm3s69xx.rst
|
||||||
.. include:: arm/lpc176x.rst
|
.. include:: arm/lpc176x.rst
|
||||||
.. include:: arm/imx.rst
|
.. include:: arm/imx.rst
|
||||||
|
Loading…
x
Reference in New Issue
Block a user