One killer feature in some of the other LPC parts (for example the LPC4300 series and the LPC54000 series) is the *dual* USB interface. Dual USB enables some very interesting use cases and It is something that sets the LPC portfolio apart from its competitors. For the LPC5500 MCU series, High-Speed USB and Full-Speed USB with on-chip PHY features are fully supported, providing up to 480Mbit/s of speed. Let’s examine a scenario I comonly encounter.
In my projects, I like to have both USB device and USB host capabilities on separate connectors. Instead of using USB On-the-Go (OTG) with a single connector, it has been my experience the many deeply embedded and industrial projects benefit from separate connectors. Consider the arrangement in figure 1.
Figure 1: Dual USB with FAT File System, SDIO and CDC.
On the device side, I almost always implement a mass storage class device along with a communications class device. The mass storage interface is connected to the SDIO port through the FATFs IO Layer so a PC can access sectors on the SD card. FatFS is my go library for embedded FAT file systems. It is open source and battle tested. While I choose to always pull the files from author’s site, MCUXpresso SDK has FatFS built in. With this file it can be easily copied between a PC and the LPC5500 system. Data logging and configuration storage is now built into your application. The CDC interface can provide a virtual COM port interface to implement a basic shell.
I use the USB host port for mass storage as well. Like the SDIO interface, I connect the host drivers (examples in the MCUXpresso SDK) to through FatFS IO layer so my system can read write files on a thumb drive. One very useful application in my projects is a secondary bootloader. There have been several products I have worked on that required field updatability, but the users do not necessarily have access to a PC.
To update the system, data files and new firmware can be placed on a thumb drive and inserted into the LPC5500 system. A bootloader can then perform necessary programming to update the internal flash. In additional firmware updates, the host port could also be used to copy device configuration information. A technician would just carry a USB “key” to update units. Having both USB device and host using the two LPC55S69 USB interfaces can unlock many benefits.
With the SDIO interface and USB host, one is not limited to the more common SD cards and thumb drives. There are other options for more robust physical interfaces. Instead of a removable SD card, a soldered down eMMC can be used. For the USB host interface, there are rugged “DataKey” options available. Also note that that the DataKeys come with an SDIO interface as well.
Figure 2: Rugged Memory Options. DataKey (Left) and eMMC (Right)
One last tidbit is that the SDIO interface can also be used to connect to many high speed WIFI chipsets. It is an option that is easy to forget about.
Copious amounts of RAM
While I certainly came up in a time where RAM was sparse, I love having access to a large amount lot of it. At 360KB of RAM, there is no shortage of RAM in the LPC55S69! Relating to the USB and file storage application, large RAM buffers can be important for optimizing for transfer speeds. It is common to write SD cards and thumb drives in 512-byte blocks. This transfer size however is not always the most optimum case for overall speed. The controller in the memory cards has to erase internal NAND flash in much larger sector sizes resulting in slow write performs It has been my experience that queueing up data until I have at least 16KB can improve overall transfer speeds but up to an order of magnitude. In most of my use cases, I implement a software cache of at least 16KB to speed transfer of large files. Larger caches can yield better results. These file system caches can consume quite a bit of memory, so it is very helpful that the LPC5500 series has quite a bit of RAM available.
Given the security features of the LPC55S69, the extra RAM can make integration of SSL stacks for IOT applications much simpler. One example is the use of WolfSSL for implementation of SSL/TLS. While it targets the embedded space, SSL processing can be complicated and require a significant amount of stack and heap. In one particular use case I had with an embedded IOT product, I needed 35k of Stack and about 40kB of heap to handle of the edge cases when dealing with connections to the internet over TLS. The large reserve of RAM in the LPC55S69 easily allows for these larger security and encryption stacks.
Another use for the large memory capability is a graphics back-buffer. It would be simple to hook a high-resolution IPS to the LPC55S59 and be able to store a complete image back buffer in memory. For example a 240x240 IPS display with 16-bit color depth would require 112.5KiBytes of RAM! There is plenty of RAM left in the LPC55S69 for your other tasks. In fact, you could dedicate one of the CPUs in the LPC55S69 to handling all the graphics rendering. The copious amount of RAM enables neat applications such as wearables, industrial displays and compact user interfaces.
Figure 3. A 240x240 IPS Display with SPI Interface from BuyDisplay.com
One other important aspect to the RAM in the LPC55S69 is its organization. It is intelligently segmented (with 272Kb continuous in the memory amp) via a bus matrix to allow the Arm® Cortex®-M33 cores, PowerQuad, CASPER and DMA engine access to memory with minimal contention between bus masters.
Figure 4. LPC55S69 Memory Architecture.
The LPC5500 Series offers a lot in a small, low power package. The large amount of internal SRAM and dual USB interface enables many applications and makes development simpler. Stayed tuned for part 3 of the LPC5500 series overview. I will be further examining some interesting peripherals in the LPC5500 series that set it apart from its competition.