NXP LPCXpresso54S018 (OM13098UL) - board certification review
The LPCXpresso54S018 development board has been designed to enable evaluation of and prototyping with the LPC54S0xx MCU devices leveraging the high-performance Arm® Cortex®-M4 core and the advanced security capabilities featured in the LPC54S0xx MCU family. The LPC54S018 MCU has every feature to drive medium sized displays with a good performance.
LPC54S018-EVK earned Standard LVGL board certification, which means the users can be sure that this board can be easily used with LVGL and they can expect decent performance and quality. Note that the LPC54018 based (LPCXpresso54018, part no. OM40003) comes with an LCD already attached. From the point of view of a graphics application, it behaves identically to LPC54S018 board (LPCXpresso54S018, part no LPC54S018-EVK) for which you need to get the LCD and attached separately.
The LPCXpresso54S018 board can be purchased directly from NXP or it’s distributors. See here.
- MCU LPC54S018JET180 ARM-Cortex-M4, 220 MHz
- RAM 360 kB internal, 16 MB SDRAM
- Flash 16 MB Quad-SPI flash (no internal flash)
- GPU None
- Resolution 480x272
- Display size 4.3”
- Color depth 16 bit, RGB565
- Technology TN
- DPI 128 px/inch
- Touch pad Capacitive
- Brightness 350 cd/m2
- Interface RGB
- Full-size SD/MMC card slot
- 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 onboard debug probe
- Support for external debug probe
- High and full speed USB ports with micro A/B connector for host or device functionality
- 10/100Mbps Ethernet (RJ45 connector)
- Multiple Expansion options, including Arduino® UNO and PMod
- NXP MMA8652FCR1 accelerometer
- Knowles SPH0641LM4H digital microphone
- Stereo audio codec with line in/out
- Power supply USB micro (5V)
Frame rate (FPS)
The MCU’s 220 MHz clock speed and it’s ARM Cortex-M4 architecture are enough for a 480x272 display to create moderate UIs with animations, opacity, and some images. LPC54628 doesn’t have a GPU but it’s not a big issue for the attached mid-sized display.
The LPC54S018JET180 MCU has no internal flash therefore the code and the images needs to be stored in external flash or in internal/external RAM.
The default configuration puts all the code and
const data into external flash which results in very poor performance (3-4 FPS).
By modifying the Linker script to moving some LVGL related data into internal RAM the performance increased dramatically and the the board reached 19 FPS in average.
You can find the modified linker script here.
The MCU is equipped with an LCD controller to drive the display directly. The frame buffers can be located in the board’s external RAM from where the MCU automatically sends the current frame buffer to the display.
The LCD controller supports maximum 1024x768 resolution. To maintain high FPS on such a large resolution a GPU would be required, however simple graphics with only small animations should work well.
The board reached 19 FPS on the LVGL’s certification benchmark. In the video you can see that transformation of small images and scrolling the whole screen was quite smooth. However, the most performance-hungry part of the benchmark - the bars animated to the rhythm of the music - caused some drop in FPS.
The LPC54S018JET180 chip has plenty of internal RAM (360 kB) and external SDRAM (16 MB), external QSPI flash (16 MB), but no internal flash .
Let’s see how these internal and external memories can be used in graphics applications.
As the display is driven directly by the MCU’s LCD controller (and there is no extra display controller in between) one or two frame buffers are needed to be located in the MCU’s RAM.
Only internal RAM
A 480x272x16 bit display needs 255 kB RAM. It’s smaller than the available 360 kB internal RAM but its divided into 3 parts (160 KB contiguous main SRAM, 192 KB SRAM on the I&D buses, and 8 KB of SRAM bank intended for USB traffic) and a frame buffer can’t fit into any of the regions so the external RAM is needed to be utilized.
Frame buffer in external RAM
The large external RAM makes it possible to store 2 frame buffers and handle VSYNC (swap the frame buffers at the moment when the display is not being refreshed, no tearing will be visible). The draw buffers of LVGL still should be stored in internal RAM because:
- they are small and can be fit easily into internal RAM
- they are read/written many times per pixel so it’s important to keep memory access fast
Images and fonts can be stored in 4 different kind of memories:
- External flash: slower, non volatile and middle sized. Suitable for larger images.
- SD card: the slowest but can have a huge size and assets can be easily changed by replacing the SD card
- External RAM: fast, volatile and middle sized. If there are performance issues due to the memory bandwidth it’s possible to load the assets from the SD card or external flash to this memory during initialization.
- Internal RAM: fastest, volatile, small. The most performance-critical assets (e.g. the images that are transformed) can be loaded here during initialization.
The display is built with TN technology, so viewing angles and color correctness are only average.
The DPI is 128 px/inch, which is quite good. The individual pixels are not visible from an average viewing distance.
LPCXpresso54S018 is built with a capacitive touchpad, therefore it provides a smartphone-like experience, however, it doesn’t recognize pressure from pen or in when pressed with gloves.
LPCXpresso54S018 is a development board for evaluation and is not designed to be added into an end-product. Although there are holes to mount the board display is not mounted to the board.
Arduino and PMod connectors are added to the board to make it easier to add sensors and other peripheries. For real life applications a secondary board might be required though.
The schematic of the board is publicly available and it can be a good starting point for developing your custom board based on LPCXpresso54S018.
You can start working with LPCXpresso54S018 in many IDEs including MCUXpresso or Keil.
At the time of writing LPCXpresso54S018 is not supported in MBedOS, Zephyr or PlatformIO.
The SDK of LPCXpresso54S018 in MCUXpresso comes with plenty of ready to use examples and applications (including UI application with LVGL).
The board is equipped with programmer/debugger so all you need to do is connect the USB cable and hit the Run or Debug buttons. We have tested the board with MCUXpresso and the debug experiment was very smooth. The usual debug features of Eclipse were also working well.
GUI Guider - a free UI Editor from NXP based on LVGL - also support the LPCXpresso54S018 board. You only need to download and install GUI Guider, select the LPCXpresso54S018 board, create your UI and flash it to the board with a few clicks.
In summary, we can say that the LPCXpresso54S018 has great support with many examples and decent performance. It’s easy to get started with development and make some experience. As all the design materials of this board is publicly available, designing a custom board with LPC54628, a display and external memory is easy.