Documentation: added documentation for i.MX RT series and Teensy 4.x board

Signed-off-by: Michal Lenc <michallenc@seznam.cz>
This commit is contained in:
Michal Lenc 2021-04-13 16:10:09 +02:00 committed by Xiang Xiao
parent 9c8c2b0db2
commit 0719976722
3 changed files with 338 additions and 183 deletions

View File

@ -0,0 +1,147 @@
==========
Teensy-4.x
==========
The `Teensy 4.0 <https://www.pjrc.com/store/teensy40.html>`_ and `Teensy 4.1 <https://www.pjrc.com/store/teensy41.html>`_
are development boards from PJRC. Both boards use i.MX RT1060 MCU, feature several I/Os pins and on-board LED.
Features
========
- Processor
- MIMXRT1062DVL6A processor
- Memory
- 1 MB RAM memory
- 2 MB Flash (Teensy 4.0)
- 8 MB Flash (Teensy 4.1)
- 1 SDIO (4 bit) native SD
- Connectivity
- Micro USB host
- CAN transceivers
- UART, SPI, I2C
- PWM output pins
- 10/100 Mb Ethernet (Teensy 4.1 only)
- Digital audio in/out
LEDs
====
There are two LED status indicators located on the Teensy-4.x board.
The functions of these LEDs include:
- RED LED (loading status)
- dim: ready
- bright: writing
- blink: no USB
- USER LED (D3)
Only a single LED, D3, is under software control.
This LED is not used by the board port unless CONFIG_ARCH_LEDS is
defined. In that case, the usage by the board port is defined in
include/board.h and src/imxrt_autoleds.c. The LED is used to encode
OS-related events as follows:
================ ======================= =====
SYMBOL Meaning LED
================ ======================= =====
LED_STARTED NuttX has been started OFF
LED_HEAPALLOCATE Heap has been allocated OFF
LED_IRQSENABLED Interrupts enabled OFF
LED_STACKCREATED Idle stack created ON
LED_INIRQ In an interrupt N/C
LED_SIGNAL In a signal handler N/C
LED_ASSERTION An assertion failed N/C
LED_PANIC The system has crashed FLASH
================ ======================= =====
Thus if the LED is statically on, NuttX has successfully booted and is,
apparently, running normally. If the LED is flashing at approximately
2Hz, then a fatal error has been detected and the system has halted.
Configurations
==============
nsh-4.0
-------
Configures the NuttShell (nsh) located at examples/nsh for Teensy 4.0.
This NSH configuration is focused on low level, command-line driver testing.
Built-in applications are supported, but none are enabled. NutShells then
runs on USB console.
nsh-4.1
-------
Configures the NuttShell (nsh) located at examples/nsh for Teensy 4.1.
This NSH configuration is focused on low level, command-line driver testing.
Built-in applications are supported, but none are enabled. NutShells then
runs USB console.
can-4.1
-------
This is an nsh configuration (see above) for Teensy-4.x with added support of
CAN driver. All FlexCANs (CAN1, CAN2, CAN3) are chosen as default. FlexCAN3
is FD capable. Please note that device driver name if counted from zero.
That means for CAN1 -> can0, CAN2 -> can1 and CAN3 -> can2
Bitrate and sample point can be also changed at System type peripheral selection,
basic values are 1 MHz for bitrate and 0.80 for sample point. The FlexCAN driver
for imxrt runs at 80 MHz clock frequency.
The configuration also includes CAN utilities as candump and cansend.
This configuration can be easily changed to work with Teensy 4.0 by
selecting ``CONFIG_TEENSY_40=y``.
This configuration runs over LPUART1 (pins 24 and 25 on Teensy). Communication
over USB console can be turn on, but it couses problems with FlexCAN.
netnsh-4.1
----------
This configuration is similar to the nsh configuration except that is
has networking enabled, both IPv4 and IPv6. This NSH configuration is
focused on network-related testing.
This configuration cannot be changed to Teensy 4.0 as this board does
not have Ethernet capability.
sd-4.1
------
This is an nsh configuration (see above) for Teensy-4.x with added support of
connecting micro SD card.
You can mount micro SD card by:
.. code-block:: console
$ mount -t vfat /dev/mmcsd0 /mnt
This configuration cannot be changed to Teensy 4.0 as this board does
not have micro SD card slot.
lcd-4.1
-------
This is an nsh configuration (see above) for Teensy-4.x with added support of
connecting LCD TFT display with ST7789 controller. You can run framebuffer demo
by starting "fb" in console. The LCD display is connected via SPI4.
This configuration can be easily changed to work with Teensy 4.0 by
selecting ``CONFIG_TEENSY_40=y``.
Flash
=====
Teensy 4.x boards does not have debugger therefore external firmware has to be used to load NuttX.
`Teensy Loader <https://www.pjrc.com/teensy/loader_cli.html>`_ can be installed and then NuttX can be loaded by:
.. code-block:: console
$ teensy_loader_cli --mcu=TEENSY41 -v -w nuttx.hex
For Teensy 4.0 board, switch ``--mcu=TEENSY41`` to ``--mcu=TEENSY40``.

View File

@ -0,0 +1,191 @@
=======
i.MX RT
=======
The i.MX RT series of chips from NXP Semiconductors is based around an ARM Cortex-M7 core running
at 500 MHz, 600 MHz or 1 GHz based on particular MCUs
Suported MCUs
=============
The following list includes MCUs from i.MX RT series and indicates whether they are supported in NuttX
====== ======= ============== =================
MCU Support Core Frequency
====== ======= ============== =================
RT500 No Cortex-M33 200 MHz
RT600 No Cortex-M33 300 MHz
RT1010 No Cortex-M7 500 MHz
RT1015 No Cortex-M7 500 MHz
RT1020 Yes Cortex-M7 500 MHz
RT1024 No Cortex-M7 500 MHz
RT1050 Yes Cortex-M7 600 MHz
RT1060 Yes Cortex-M7 600 MHz
RT1064 Yes Cortex-M7 600 MHz
RT1170 No Cortex-M7 + M4 1 GHz + 400 MHz
====== ======= ============== =================
Data and Instruction Cache
==========================
MCUs i.MX RT1010 and higher have separated caches for instructions and data. Data cache is initially
set as write-through but can be changed to write-back via Kconfig. While write-back gives better
performance than write-through, it is not supported for all peripherals in NuttX yet. Write-back data
cache can not be selected while running Ethernet or serial port over USB.
Peripheral Support
==================
The following list indicates peripherals supported in NuttX:
========== =======
Peripheral Support
========== =======
ACMP No
ADC Yes
CAN Yes
CSI No
DAC No
eLCDIF Yes
ENC Yes
ENET Yes
FlexIO No
GPIO Yes
I2S Yes
PWM No
SAI No
SPDIF No
SPI Yes
UART Yes
USB Yes
========== =======
ACMP
----
The circout for comparing two analog input voltages designed to operate across the full
range of supply voltage (rail-to-rail operation).
ADC
---
ADC driver with the successive approximation analog/digital convertor. The lower-half of
this driver is initialize by calling :c:func:`imxrt_adcinitialize`.
CAN
---
FlexCAN driver is supported in MCUs i.MX RT1020 and higher. i.MX RT106x have both classical
CAN and also one CAN FD while i.MX RT1170 have 3 CAN FD peripherals. FlexCAN driver in imxrt
works beyond SocketCAN driver layout. The lower-half of this driver is initialize by
calling :c:func:`imxrt_cannitialize()`.
There is an booting option that automatically provides initialization of network interface
in the early stages of booting and therefore calling :c:func:`imxrt_cannitialize()` via
board specific logic is not neccessary. This however works only when there is only one
interface in the chip. For running more interfaces (like CAN and Ethernet), network late
initialization must be turn on by CONFIG_NETDEV_LATEINIT and board specific logic must call
lower-half part of drivers.
CSI
---
CMOS Sensor interface which enables the chip to connect directly to external CMOS image sensors.
DAC
---
Digital/analog convertor for external signal is only supported in i.MX RT1170 MCU. It is 12 bit
lower power, general purpose DAC.
eLCDIF
------
The enhanced Liquid Crystal Display interface (LCDIF) is a general purpose display controller.
ENC
---
The enhanced quadrature encoder/decoder module supported in i.MX RT1015 and higher. The lower-half
of this driver is initialize by calling :c:func:`imxrt_qeinitialize`.
ENET
----
Ethernet driver supported in i.MX RT1020 and higher. The lower-half of this driver is initialize
by calling :c:func:`imxrt_netnitialize`.
There is an booting option that automatically provides initialization of network interface
in the early stages of booting and therefore calling :c:func:`imxrt_cannitialize()` via
board specific logic is not neccessary. This however works only when there is only one
interface in the chip. For running more interfaces (like CAN and Ethernet), network late
initialization must be turn on by CONFIG_NETDEV_LATEINIT and board specific logic must call
lower-half part of drivers.
FlexIO
------
A configurable module providing a range of functionality like emulation of a variety of
serial/parallel communication protocols, flexible 16-bit timers or programmable logic blocks.
This module is supported in i.MX RT1010 and higher.
GPIO
----
Pins can be configured using :c:func:`imxrt_config_gpio` function. Writing to pins is
done by :c:func:`imxrt_gpio_write` function and reading is done by :c:func:`imxrt_gpio_read`.
MCUs i.MX RT1060 and higher includes both standard speed GPIOs (1-5) and high speed
GPIOS (6-9). Regular and high speed GPIO share the same pins (GPIO1 is with GPIO6 etc),
therefore IOMUXC_GPR_GPR26-29 registers are used to determine what modue is used for the
GPIO pins.
I2C
---
Inter-Integrated Circout module supporting an interface to an I2C bus as master and/or
as a slave. The lower-half of this driver is initialize by calling :c:func:`imxrt_i2cbus_initialize`.
PWM
---
Pulse width modulator supported in i.MX RT1010 and higher.
SAI
---
Synchronous audio interface provided by I2C module. Supported in i.MX RT1015 and higher.
SPDIF
-----
Sony/Philips digital interface audio block. It is a stereo transciever that allows the
processor to receive and transmit digital audio. Supported in i.MX RT1010 and higher.
SPI
---
Serial Peripheral interface module that supports an interface to an SPI bus as a master
and/or a slave. The lower-half of this driver is initialize by calling :c:func:`imxrt_lpsibus_initialize`.
UART
----
Universal Asynchronous Receiver/Transmitter module. UART is initialized automatically during
MCU boot.
USB
---
Console communication over USB is supported via CDC-ACM. Only USB Device is currently supported
for i.MX RT in NuttX
Supported Boards
================
.. toctree::
:glob:
:maxdepth: 1
boards/*/*

View File

@ -1,183 +0,0 @@
README
======
This README file provides information about the port of NuttX to the Teensy 4.x board. This board features the
MIMXRT1062DVL6A MCU. Some of the features of this board include:
o Processor
- MIMXRT1062DVL6A processor
o Memory
- 1 Mb RAM memory
- 2 Mb QSPI Flash
- 1 SDIO (4 bit) native SD
o Connectivity
- Micro USB host
- CAN transceivers
- 41 digital pins
- 14 analog pins, 2 ADCs on chip
Contents
========
o LEDs
o Configurations
- Configuration sub-directories
LEDs and buttons
================
LEDs
----
There are two LED status indicators located on the Teensy-4.x board.
The functions of these LEDs include:
- RED LED (loading status)
- dim: ready
- bright: writing
- blink: no USB
- USER LED (D3)
Only a single LED, D3, is under software control.
This LED is not used by the board port unless CONFIG_ARCH_LEDS is
defined. In that case, the usage by the board port is defined in
include/board.h and src/imxrt_autoleds.c. The LED is used to encode
OS-related events as follows:
------------------- ----------------------- ------
SYMBOL Meaning LED
------------------- ----------------------- ------
LED_STARTED NuttX has been started OFF
LED_HEAPALLOCATE Heap has been allocated OFF
LED_IRQSENABLED Interrupts enabled OFF
LED_STACKCREATED Idle stack created ON
LED_INIRQ In an interrupt N/C
LED_SIGNAL In a signal handler N/C
LED_ASSERTION An assertion failed N/C
LED_PANIC The system has crashed FLASH
Thus if the LED is statically on, NuttX has successfully booted and is,
apparently, running normally. If the LED is flashing at approximately
2Hz, then a fatal error has been detected and the system has halted.
Configurations
==============
Information Common to All Configurations
----------------------------------------
Each Teensy-4.x configuration is maintained in a sub-directory and
can be selected as follow:
tools/configure.sh [OPTIONS] teensy-4.x:<subdir>
Where typical options are -l to configure to build on Linux or -c to
configure for Cygwin under Linux. 'tools/configure.sh -h' will show
you all of the options.
Before building, make sure the PATH environment variable include the
correct path to the directory than holds your toolchain binaries.
And then build NuttX by simply typing the following. At the conclusion of
the make, the nuttx binary will reside in an ELF file called, simply, nuttx.
make
The <subdir> that is provided above as an argument to the tools/configure.sh
must be is one of the following.
NOTES:
1. These configurations use the mconf-based configuration tool. To
change any of these configurations using that tool, you should:
a. Build and install the kconfig-mconf tool. See nuttx/README.txt
see additional README.txt files in the NuttX tools repository.
b. Execute 'make menuconfig' in nuttx/ in order to start the
reconfiguration process.
2. All of these configurations are set up to build under Windows using the
"GNU Tools for ARM Embedded Processors" that is maintained by ARM
(unless stated otherwise in the description of the configuration).
https://developer.arm.com/open-source/gnu-toolchain/gnu-rm
That toolchain selection can easily be reconfigured using
'make menuconfig'. Here are the relevant current settings:
Build Setup:
CONFIG_HOST_WINDOWS=y : Window environment
CONFIG_WINDOWS_CYGWIN=y : Cywin under Windows
System Type -> Toolchain:
CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIW=y : GNU ARM EABI toolchain
Configuration sub-directories
-----------------------------
nsh-4.0:
Configures the NuttShell (nsh) located at examples/nsh for Teensy 4.0.
This NSH configuration is focused on low level, command-line driver testing.
Built-in applications are supported, but none are enabled. NutShells then
runs on USB console.
nsh-4.1:
Configures the NuttShell (nsh) located at examples/nsh for Teensy 4.1.
This NSH configuration is focused on low level, command-line driver testing.
Built-in applications are supported, but none are enabled. NutShells then
runs USB console.
can-4.1:
This is an nsh configuration (see above) for Teensy-4.x with added support of
CAN driver. All FlexCANs (CAN1, CAN2, CAN3) are chosen as default. FlexCAN3
is FD capable. Please note that device driver name if counted from zero.
That means for CAN1 -> can0, CAN2 -> can1 and CAN3 -> can2
Bitrate and sample point can be also changed at System type peripheral selection,
basic values are 1 MHz for bitrate and 0.80 for sample point. The FlexCAN driver
for imxrt runs at 80 MHz clock frequency.
The configuration also includes CAN utilities as candump and cansend.
This configuration can be easily changed to work with Teensy 4.0 by
selecting CONFIG_TEENSY_40=y.
This configuration runs over LPUART1 (pins 24 and 25 on Teensy). Communication
over USB console can be turn on, but it couses problems with FlexCAN.
netnsh-4.1:
This configuration is similar to the nsh configuration except that is
has networking enabled, both IPv4 and IPv6. This NSH configuration is
focused on network-related testing.
This configuration cannot be changed to Teensy 4.0 as this board does
not have Ethernet capability.
sd-4.1
This is an nsh configuration (see above) for Teensy-4.x with added support of
connecting micro SD card.
You can mount micro SD card by "mount -t vfat /dev/mmcsd0 /mnt"
This configuration cannot be changed to Teensy 4.0 as this board does
not have micro SD card slot.
lcd-4.1
This is an nsh configuration (see above) for Teensy-4.x with added support of
connecting LCD TFT display with ST7789 controller. You can run framebuffer demo
by starting "fb" in console. The LCD display is connected via SPI4.
This configuration can be easily changed to work with Teensy 4.0 by
selecting CONFIG_TEENSY_40=y.