407 lines
16 KiB
Plaintext
407 lines
16 KiB
Plaintext
README
|
|
======
|
|
|
|
This directory contains the port to the NXP LPCXpress-LPC54628 board
|
|
(OMI1309UL). This board features:
|
|
|
|
- LPC54628 Cortex-M4 microcontroller running at up to 220MHz
|
|
- 272x480 color LCD with capacitive touch screen
|
|
- On-board, high-speed USB, Link2 debug probe with CMSIS-DAP and SEGGER
|
|
J-Link protocol options
|
|
- UART and SPI port bridging from LPC546xx target to USB via the on-
|
|
board debug probe
|
|
- Support for external debug probe
|
|
- 3 x user LEDs, plus Reset, ISP (3) and user buttons
|
|
- Multiple Expansion options, including Arduino UNO and PMod
|
|
- Built-in power consumption measurement for target LPC546xx MCU
|
|
- 128Mb Micron MT25QL128 Quad-SPI flash
|
|
- 16MB Micron MT48LC8M16A2B4 SDRAM
|
|
- Knowles SPH0641LM4H digital microphone
|
|
- Full size SD/MMC card slot
|
|
- NXP MMA8652FCR1 accelerometer
|
|
- Stereo audio codec with line in/out
|
|
- High and full speed USB ports with micro A/B connector for host or
|
|
device functionality
|
|
- 10/100Mbps Ethernet (RJ45 connector)
|
|
|
|
STATUS
|
|
======
|
|
|
|
2017-12-10: The basic NSH configuration is functional at 220MHz with a
|
|
Serial console, timer and LED support. Added support for the external
|
|
SDRAM and for the RAM test utility.
|
|
2017-12-11: Fixed an error in board LEDs. Added framework for future
|
|
I2C and SPI flexcomm drivers.
|
|
2017-12-12: The SDRAM is now functional and passes the commplete RAM
|
|
test. Added configuration options and logic to add none, portions, or
|
|
all of the external SDRAM to the system heap. Brought in the LPC1788
|
|
LCD driver. The LPC1788 LCD registers are identical to the LPC54xx
|
|
(other than a minor clock source setting).
|
|
2017-12-13: Created the fb configuration for testing the LCD.
|
|
2017-12-14: Corrected a misconception about how the video data lines
|
|
were configured. The LCD now appears to be fully functional.
|
|
2017-12-15: Added an I2C driver.
|
|
2017-12-16: Added support for LPC54xx GPIO interrupts; added button
|
|
support (with interrupts) to the NSH configuration. The button
|
|
test appears to functional functional. There are noticeable delays
|
|
in receiving the button events, especially when the button is
|
|
released. But if you do not press the buttons too quickly all events
|
|
are processed. This, I suspect, is a consequence of the strong glitch
|
|
filtering that is enbled in the pin configuration. Snappier
|
|
response my be obtainble with filtering off.
|
|
2017-12-17: Added a driver for the FT5x06 capacitive, multi-touch
|
|
controller. Add support logic for the LPCXpresso-LPC54528 to
|
|
initialize and the register the FT5x06 driver. Unfortunately, the
|
|
FT5x06 interrupt is on pin P4.0 but pin interrupts are only supported
|
|
on P0.m and P1.m, m=0..31.
|
|
2017-12-18: Added an option to the FT5x06 driver to support a timer-
|
|
based poll instead of interrupts. This is very inefficient in that it
|
|
will introduce delays in touchscreen response and will consume more CPU
|
|
bandwidth. The driver appears to be functional. Added the NxWM
|
|
configuration to do some integrated testing. NxWM seems to be fully
|
|
functional. However, the action of the touchscreen could use some
|
|
human factors improvements. I imagine that this is a consequence of
|
|
the polled solution.
|
|
2017-12-19: Brought in Alan Carvalho de Assis' LPC43xx SD/MMC driver from
|
|
https://github.com/Smoothieware/smoothie-nuttx/tree/master/nuttx/arch/arm/src/lpc43xx
|
|
and adapted it for use by the LPC54xx. Unverified as of this writing.
|
|
2017-12-21: Some things are working with he SDMMC drivers but read DMAs
|
|
are non-functional and, hence not usable.
|
|
2017-12-23: SDMMC is still non-functional. The first DMA read of 512 bytes
|
|
fails with a CRC error. Similar result if clock is reduced, if 1-bit bus
|
|
is used, if DMA is disabled., if DEBUG output is disabled.
|
|
2017-12-24: Added basic DMA support; brought in the WWDT driver from the
|
|
LPC43 which has the same peripheral. Neither tested; almost certainly
|
|
non-functional without some additional investment.
|
|
|
|
There is still no support for the Accelerometer, SPIFI, Ethernet, or USB.
|
|
There is a complete, but not-yet-functional SD card drirver. There is a
|
|
partial SPI driver, but no on-board SPI devices to test it.
|
|
|
|
Configurations
|
|
==============
|
|
|
|
Information Common to All Configurations
|
|
----------------------------------------
|
|
Each LPCXpresso-LPC54628 configuration is maintained in a sub-directory
|
|
and can be selected as follow:
|
|
|
|
.tools/configure.sh [OPTIONS] lpcxpresso-lpc54628/<subdir>
|
|
|
|
See '.tools/configure.sh -h' for a list of all options. The most typical
|
|
are -l to select the Linux host or -c to select the Windows Cygwin host.
|
|
|
|
Before starting the build, make sure that your PATH environment variable
|
|
includes the correct path to your toolchain.
|
|
|
|
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. Unless stated otherwise, all configurations generate console
|
|
output on USART0 (aka Flexcomm0). USART0 connects to the serial
|
|
bridge on LPC4322JET100 and should be available as a USB serial
|
|
device on your host PC.
|
|
|
|
3. 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
|
|
-----------------------------
|
|
|
|
fb:
|
|
|
|
A simple NSH configuration used for some basic debug of LCD using the
|
|
framebuffer character drivers. This configuration provides the test
|
|
programs:
|
|
|
|
- apps/examples/pdcurses, and
|
|
- apps/examples/fb
|
|
|
|
as NSH built-in applications.
|
|
|
|
NOTES:
|
|
1. This configuration enables SDRAM to hold the LCD framebuffer and
|
|
enables the LPC54xx LCD driver in order to support the LPCXpresso's
|
|
TFT panel. In this configuration, the framebuffer resides in the
|
|
the lower half megabyte of SDRAM beginning at address 0xa0000000
|
|
The remainder of the SDRAM from 0xa0080000 up to 0xa1000000 is added
|
|
to the heap.
|
|
|
|
The is wasteful of SDRAM: Only 261,120 bytes actually used for the
|
|
framebuffer. This memory could be reclaimed by changing the DRAM
|
|
CS0 offset value in the .config file.
|
|
|
|
2. Some of the pdcurses test rely on some positional input device and so
|
|
is not yet usable. Others work fine with no user include: charset,
|
|
xmas, firework, worms, rain, for examples.
|
|
|
|
3. I2C2 is enabled (will be used with the capacitive touchscreen). In
|
|
order to verify I2C functionality, the I2C tool at apps/system/i2ctool
|
|
is enabled in this configuration.
|
|
|
|
nsh> i2c dev -b 2 3 77
|
|
0 1 2 3 4 5 6 7 8 9 a b c d e f
|
|
00: -- -- -- -- -- -- -- -- -- -- -- -- --
|
|
10: -- -- -- -- -- -- -- -- -- -- 1a -- -- 1d -- --
|
|
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
|
30: -- -- -- -- -- -- -- -- 38 -- -- -- -- -- -- --
|
|
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
|
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
|
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
|
70: -- -- -- -- -- -- -- --
|
|
|
|
Codec I2C address: 0x1a
|
|
Accel I2C address: 0x1d
|
|
Touch panel I2C address: 0x38
|
|
|
|
4. The touchscreen test program at apps/examples/touchscreen is also
|
|
included in this configuration.
|
|
|
|
nsh> tc 5
|
|
tc_main: nsamples: 2
|
|
tc_main: Initializing external touchscreen device
|
|
tc_main: Opening /dev/input0
|
|
Sample :
|
|
npoints : 1
|
|
Point 1 :
|
|
id : 0
|
|
flags : 1a
|
|
x : 230
|
|
y : 84
|
|
h : 0
|
|
w : 0
|
|
pressure : 0
|
|
etc.
|
|
|
|
NOTE that the touchscreen controlled must run in a polled mode! The
|
|
FT5x06 interrupt GPIO is on P4.0 and, as far as I know, GPIO
|
|
interrupts are not supported on P4. So polled mode only for this
|
|
puppy.
|
|
|
|
nsh:
|
|
|
|
Configures the NuttShell (nsh) application located at examples/nsh.
|
|
This configuration was used to bring up the board support and, hence,
|
|
is focused on low level, command-line driver testing. It has no
|
|
network.
|
|
|
|
NOTES:
|
|
|
|
1. NSH built-in applications are supported.
|
|
|
|
Binary Formats:
|
|
CONFIG_BUILTIN=y : Enable support for built-in programs
|
|
|
|
Application Configuration:
|
|
CONFIG_NSH_BUILTIN_APPS=y : Enable starting apps from NSH command line
|
|
|
|
2. SDRAM support is enabled, but the SDRAM is *not* added to the system
|
|
heap. The apps/system/ramtest utility is include in the build as an
|
|
NSH builtin function that can be used to verify the SDRAM.
|
|
|
|
nsh> ramtest -h
|
|
RAMTest: Missing required arguments
|
|
|
|
Usage: <noname> [-w|h|b] <hex-address> <decimal-size>
|
|
|
|
Where:
|
|
<hex-address> starting address of the test.
|
|
<decimal-size> number of memory locations (in bytes).
|
|
-w Sets the width of a memory location to 32-bits.
|
|
-h Sets the width of a memory location to 16-bits (default).
|
|
-b Sets the width of a memory location to 8-bits.
|
|
|
|
The MTL48LC8M16A2B4-6A SDRAM is on CS0 which corresponds to address
|
|
0xa0000000, the size of the memory is 128Mbits or 16Mb. So the DRAM
|
|
may be tested with this command:
|
|
|
|
NuttShell (NSH) NuttX-7.23
|
|
nsh> ramtest a0000000 16777216
|
|
RAMTest: Marching ones: a0000000 16777216
|
|
RAMTest: Marching zeroes: a0000000 16777216
|
|
RAMTest: Pattern test: a0000000 16777216 55555555 aaaaaaaa
|
|
RAMTest: Pattern test: a0000000 16777216 66666666 99999999
|
|
RAMTest: Pattern test: a0000000 16777216 33333333 cccccccc
|
|
RAMTest: Address-in-address test: a0000000 16777216
|
|
nsh>
|
|
|
|
3. I2C2 is enabled (will be used with the capacitive touchscreen). In
|
|
order to verify I2C functionality, the I2C tool at apps/system/i2ctool
|
|
is enabled in this configuration.
|
|
|
|
nsh> i2c bus
|
|
BUS EXISTS?
|
|
Bus 0: NO
|
|
Bus 1: NO
|
|
Bus 2: YES
|
|
Bus 3: NO
|
|
Bus 4: NO
|
|
Bus 5: NO
|
|
Bus 6: NO
|
|
Bus 7: NO
|
|
Bus 8: NO
|
|
Bus 9: NO
|
|
nsh> i2c dev -b 2 3 77
|
|
0 1 2 3 4 5 6 7 8 9 a b c d e f
|
|
00: -- -- -- -- -- -- -- -- -- -- -- -- --
|
|
10: -- -- -- -- -- -- -- -- -- -- 1a -- -- 1d -- --
|
|
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
|
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
|
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
|
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
|
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
|
70: -- -- -- -- -- -- -- --
|
|
|
|
I believe that the on-board Accelerometer, Audio Codec, and touch
|
|
panel controller should have been detected (but perhaps the touch
|
|
panel is not powered in this configuration since the LCD is not
|
|
configured?)
|
|
|
|
Codec I2C address: 0x1a
|
|
Accel I2C address: 0x1d
|
|
Touch panel I2C address: 0x38
|
|
|
|
4. Support for the on-board USER button is included as well as the
|
|
button test program at apps/examples/buttons. This test is useful
|
|
for verifying the functionality of GPIO interrupts.
|
|
|
|
NuttShell (NSH) NuttX-7.23
|
|
nsh> buttons
|
|
buttons_main: Starting the button_daemon
|
|
buttons_main: button_daemon started
|
|
button_daemon: Running
|
|
button_daemon: Opening /dev/buttons
|
|
button_daemon: Supported BUTTONs 0x01
|
|
nsh> Sample = 1
|
|
Sample = 0
|
|
Sample = 1
|
|
Sample = 0
|
|
Sample = 1
|
|
Sample = 0
|
|
Sample = 1
|
|
etc.
|
|
|
|
There are noticeable delays in receiving the button events,
|
|
especially when the button is released. But if you do not press the
|
|
buttons too quickly all events are processed. This, I suspect, is a
|
|
consequence of the strong glitch filtering that is enbled in the pin
|
|
configuration. Snappier response my be obtainble with filtering off
|
|
if desired.
|
|
|
|
5. This configuration has been used for testing the SDMMC driver with
|
|
these configuration additions:
|
|
|
|
CONFIG_EXPERIMENTAL=y
|
|
|
|
CONFIG_LPC54_SDMMC=y
|
|
CONFIG_LPC54_SDMMC_PWRCTRL=y
|
|
CONFIG_LPC54_SDMMC_DMA=y
|
|
|
|
CONFIG_SIG_SIGWORK=17
|
|
CONFIG_SCHED_WORKQUEUE=y
|
|
CONFIG_SCHED_HPWORK=y
|
|
CONFIG_SCHED_HPWORKPRIORITY=224
|
|
CONFIG_SCHED_HPWORKPERIOD=50000
|
|
CONFIG_SCHED_HPWORKSTACKSIZE=2048
|
|
|
|
CONFIG_MMCSD=y
|
|
CONFIG_MMCSD_NSLOTS=1
|
|
CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
|
|
CONFIG_MMCSD_HAVE_CARDDETECT=y
|
|
CONFIG_MMCSD_HAVE_WRITEPROTECT=y
|
|
CONFIG_ARCH_HAVE_SDIO=y
|
|
CONFIG_SDIO_DMA=y
|
|
CONFIG_MMCSD_SDIO=y
|
|
|
|
CONFIG_NSH_MMCSDSLOTNO=0
|
|
|
|
nxwm:
|
|
|
|
This is a special configuration setup for the NxWM window manager
|
|
UnitTest. This builds on top of the features that were unit tested in
|
|
by the fb configuration.
|
|
|
|
The NxWM window manager can be found here:
|
|
|
|
<nuttx-code>/NxWidgets/nxwm
|
|
|
|
The NxWM unit test can be found at:
|
|
|
|
<nuttx-code>/NxWidgets/UnitTests/nxwm
|
|
|
|
Documentation for installing the NxWM unit test can be found here:
|
|
|
|
<nuttx-code>/NxWidgets/UnitTests/README.txt
|
|
|
|
Where <nuttx-code> is whatever path you have select to install
|
|
NuttX.
|
|
|
|
Here is the quick summary of the build steps (Assuming that all of
|
|
the required packages are available in a directory ~/<nuttx-code>):
|
|
|
|
1. Install the nxwm configuration
|
|
|
|
$ cd ~/<nuttx-code>/nuttx
|
|
$ tools/configure.sh [OPTIONS] lpcxpresso-lpc54628/nxwm
|
|
|
|
Use the -l option with the configure.sh script if you are using a
|
|
Linux host; use the -c option if you are using Cygwin under Windows.
|
|
Use the -h option to see other selections.
|
|
|
|
2. Make the build context (only)
|
|
|
|
$ make context
|
|
|
|
3. Install the nxwm unit test
|
|
|
|
$ cd ~/<nuttx-code>/NxWidgets
|
|
$ tools/install.sh ~/<nuttx-code>/apps nxwm
|
|
Creating symbolic link
|
|
- To ~/<nuttx-code>/NxWidgets/UnitTests/nxwm
|
|
- At ~/<nuttx-code>/apps/external
|
|
|
|
4. Build the NxWidgets library
|
|
|
|
$ cd ~/<nuttx-code>/NxWidgets/libnxwidgets
|
|
$ make TOPDIR=~/<nuttx-code>/nuttx
|
|
|
|
5. Build the NxWM library
|
|
|
|
$ cd ~/<nuttx-code>/NxWidgets/nxwm
|
|
$ make TOPDIR=~/<nuttx-code>/nuttx
|
|
|
|
6. Built NuttX with the installed unit test as the application
|
|
|
|
$ cd ~/<nuttx-code>/nuttx
|
|
$ make
|
|
|