LPCware Archive Content

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

LPCware Archive Content

Discussions

Sort by:
The LPC-Link 2 Configuration Tool (LCT) has been replaced by LPCScrypt and should no longer be used. This content is provided for informational purposes only. The LPC-Link 2 Configuration Tool (LCT) is a Windows tool that installs the CMSIS-DAP/VCOM/LPCSIO or JLINK firmware on LPCXpresso V2/V3 and LPC-Link 2 boards. This package provides the Link Configuration Tool, all necessary Windows drivers, a User Manual, and the source and project files to rebuild the programming algorithm firmware used by the LCT. The V2 version provides expanded capability for LPCXpresso V2/V3 boards with improvements to CMSIS-DAP, a UART bridge connected to the target processor (LPCXpresso V2/V3 boards only), and a LPCSIO bridge that provides communication to I2C and SPI slave devices on LPCXpresso V3 boards. For LPC-Link 2 boards, an updated version of CMSIS-DAP provides faster programming and more stable operation. This version also adds support for J-Link - please see SEGGER's website for more information: for lpc-link2 boardsand for LPCXpresso V2/V3 boards. Features Firmware included in this package: LPCXpresso V2/V3 boards: CMSIS-DAP debugger + VCOM (UART bridge connected to target processor) + LPCSIO bridge (I2C + SPI + GPIO bridge connected to target processor) LPC-Link 2 boards: CMSIS-DAP firmware LPC-Link 2 and LPCXpresso V2 and V3 boards: J-Link firmware Documentation Userguide: LPC-Link 2 Configuration tool - User Guide (REV 1.0) Supporting information: LPC-Link 2 Configuration Tool - Release Note (REV 0) Downloads Software: LCT Installer 1 (REV 2.02) New
View full article
This procedure no longer applies to DFUSec/LCT. As of v2.00 of the LCT, you no longer need to manually install .NET or the WinUSB driver package - the LCT installer will do that for you if it already isn't installed. WinUSB only needs to be installed on Windows XP machines - it is already part of Win 7/8. All you need to do is download and install the LCT. To install the WinUSB drivers for the LPC18xx/43xx boards, first configure the board for USB boot. Plug in the USB connector to the board (add external power to the board if necessary) and a new USB device (LPC) should appear. Download the drivers at http://www.lpcware.com/content/nxpfile/lpc18xx43xx-winusb-drivers-dfu-boot Un-compress the drivers and point the driver installation dialog to the INF file in the uncompressed package. After installation is complete, you should have a new device available for the LPC18xx or LPC43x.
View full article
The LPC18xx/43xx DFUSec utility referred to in this article should NOT be used. It has been replaced by LPCScrypt. Use of LCT will result in a very old firmware version, which will contain bugs and not support some features in MCUXpresso IDE and 3rd party tools. This information is supplied for reference only. What does this tool do? The LPC18xx/43xx DFUSec utility is a Windows PC tool that provides support functions for LPC18xx/43xx microcontroller via USB. The tool is composed of 3 components: the Image Programmer, the LPC-Link 2 Configuration Tool, and the Security Support Tool (v2.00). This tool has been called the LPC18xx/43xx DFU Utility (DFUUtil) or DFUSec in versions prior to v1.10. DFUSec is the common name for the tool that covers all these components, For instructions on how to use a specific capability of the DFUSec tool, use the menu on the right.   Where to download and download pre-requisites Update: DFUSec and the LPC-Link 2 Configuration Tool are the same tool. Download DFUSec from the LCT link below and enable 'DFUSEC' mode by unchecking the Link2 lock button on the LCT file menu. As of v2.00 of the LCT, you no longer need to manually install .NET or the driver package - the installer will do that for you if it already isn't installed. WinUSB only needs to be installed on Windows XP machines - it is already part of Win 7/8. All you need to do is download and install the LCT. Before you can use DFUSec, you'll need to install WINUSB and the Microsoft.NET framework 4. DFUSec is available in pre-configured packages for the Image Programmer, Link Configuration Tool (LCT), and the (upcoming) Security Tool. (files attached)   Image Programmer The Image Programmer uses the USB DFU boot capability of the LPC18xx/43xx devices to program the internal FLASH or EEPROM, or the SPIFLASH on some boards. To do this, a small USB image is first downloaded to the board via USB using DFU and then it communicates with the PC application. To use the Image Programmer, the a USB port must be connected for USB boot with the LPC18xx/43xx device. Most commercial boards - such as boards from Embedded Artists, Hitex, Keil, and NGX - provide this support. The Image Programmer provides the following capabilities: In circuit programming and re-programming of internal FLASH and internal EEPROM on all LPC18xx/43xx devices via USB In circuit programming and re-programming of some SPIFLASH devices available on LPC18xx/43xx boards Smiple DFU download and execution of an image in IRAM with optional automated download whenever a board is plugged in Optional checksum generation at program time Boot header generation (needed by SPIFLASH or DFU boot) Sequenced program operations for complex image layouts across multiple storage (internal FLASH, internal EEPROM, SPIFLASH) types - a single session can quickly program all storage with a single automated USB sessions Extendable FLASH support - add support for other storage devices in the programming algorithm firmware LPC-Link 2 Configuration tool The LPC-Link 2 Configuration Tool is used to load firmware images onto the LPC-Link-2 board ir LPCXpresso V2 boards with the integrated LPC-Link 2 (LINK DFU) interface. This allows loading a firmware image that supports debugging via USB such as JLINK or CMSIS-DAP for development environments other than the LPCXpresso-IDE. To use the tool, select an image for a support LPC-Link 2 boards and follow the in-page instructions. Security Support Tool (upcoming) The Security Support Tool will be available with the DFUSec v2.00 release. This component of DFUSec adds the following capabilities: AES key management - key and vector generation, programming, and (limited) key retrieval Encrypted image generation with support for CMAC header Boot mode locking - disable JTAG, USB, or other capabilities for production systems Ability to encrypt FLASH binaries from Image Programmer to allow re-programming a secure board (if not locked)
View full article
LPC177x_8x memory requirements The LPC177x_8x device family is available with varying amounts of internal FLASH and IRAM. Depending on the device you select, the amount of FLASH available is bwteen 64KBytes and 256KBytes. Internal IRAM varies from 16KBytes to 64KBytes. All the devices also have peripheral RAM which can vary between 8KBytes to 32KByytes. Internal IRAM cannot be used for ethernet buffers (or any DMA buffers). Peripheral RAM can be used for ethernet buffers and/or CPU buffers. On the minimum device configuration, a chip will contain 64K of FLASH, 32K of internal IRAM, and 8K of peripheral RAM. In this minimum configuration, this amounts up to 64KBytes for code, 32KBytes maximum for CPU data, and 8KBytes for ethernet buffers. When using external memory such as DRAM, ethernet buffers can be located in external memory ande have no size limitations. For the tcpecho example included with the LCP LWIP release, the memory sizes for different configurations are shown in the table below. These are not absolutely minimum buildable sizes and have extra buffers to prevent packet drops due to run-time memory allocation. All of these projects are built with the Keil toolchain at the -O3 optimization level. LWIP_DEBUG is not enabled. Note these images support DHCP, UDP, and broadcast. Project description Notes Linker output tcpecho, FLASH (standalone) Stack_Size      EQU     0x00001000 Heap_Size       EQU     0x00000000 #define LPC_NUM_BUFF_RXDESCS 4 #define LPC_NUM_BUFF_TXDESCS 4 #define PBUF_POOL_SIZE                  4 #define MEM_SIZE                        16384     Total RO  Size (Code + RO Data)                33772 (  32.98kB)     Total RW  Size (RW Data + ZI Data)             34560 (  33.75kB)     Total ROM Size (Code + RO Data + RW Data)      34016 (  33.22kB) tcpecho, FLASH (FreeRTOS)* Stack_Size      EQU     0x00001000 Heap_Size       EQU     0x00000000 #define LPC_NUM_BUFF_RXDESCS 3 #define LPC_NUM_BUFF_TXDESCS 3 #define PBUF_POOL_SIZE                  6 #define MEM_SIZE                        (12*1024)     Total RO  Size (Code + RO Data)                43800 (  42.77kB)     Total RW  Size (RW Data + ZI Data)             67208 (  65.63kB)     Total ROM Size (Code + RO Data + RW Data)      43848 (  42.82kB) *FreeRTOS build also includes extra heap and stack space used by FreeRTOS and additional LWIP libraries and support for use with an RTOS. Note these sizes may vary for many reasons including compiler/linker versions, selected build options, etc. The sizes are meant as a guideline for memory usage only. LPC177x_8x memory requirements at the minimum system configuration To get the minimum configuration for a build, the DHCP support, UDP support, and broadcast support is disabled and the build is setup with a static IP address.  The LWIP raw API is used with an RTOS. The table below shows configuration options and build size information. Debug is disabled and the -O3 optimization level is used with the Keil tools. Project description Notes Linker output tcpecho, FLASH (minimal, standalone) Stack_Size      EQU     0x00000800 Heap_Size       EQU     0x00000000 #define LPC_NUM_BUFF_RXDESCS 3 #define LPC_NUM_BUFF_TXDESCS 2 #define PBUF_POOL_SIZE                  4 #define MEM_SIZE                        8192     Total RO  Size (Code + RO Data)                33724 (  32.93kB)     Total RW  Size (RW Data + ZI Data)             24260 (  23.69kB)     Total ROM Size (Code + RO Data + RW Data)      33968 (  33.17kB) LPC18xx/43xx memory requirements The LPC18xx/43xx device family is available with varying amounts of IRAM. For the tcpecho example included with the LCP LWIP release, the memory sizes for different configurations are shown in the table below. These are not absolutely minimum buildable sizes and have extra buffers to prevent packet drops due to run-time memory allocation. All of these projects are built with the Keil toolchain at the -O3 optimization level. LWIP_DEBUG is not enabled. Note these images support DHCP, UDP, and broadcast. Project description Notes Linker output tcpecho, FLASH (standalone) Stack_Size      EQU     0x00001000 Heap_Size       EQU     0x00000400# define LPC_NUM_BUFF_RXDESCS 20 #define LPC_NUM_BUFF_TXDESCS 20 #define PBUF_POOL_SIZE                  64 #define MEM_SIZE                        (64*1024)     Total RO  Size (Code + RO Data)                36432 (  35.58kB)     Total RW  Size (RW Data + ZI Data)            177016 ( 172.87kB)     Total ROM Size (Code + RO Data + RW Data)      36708 (  35.85kB) tcpecho, FLASH (FreeRTOS)* Stack_Size      EQU     0x00001000 Heap_Size       EQU     0x00008000 #define LPC_NUM_BUFF_RXDESCS 20 #define LPC_NUM_BUFF_TXDESCS 20 #define PBUF_POOL_SIZE                  48 #define MEM_SIZE                        (64*1024)     Total RO  Size (Code + RO Data)                46744 (  45.65kB)     Total RW  Size (RW Data + ZI Data)            186172 ( 181.81kB)     Total ROM Size (Code + RO Data + RW Data)      46792 (  45.70kB) *FreeRTOS build also includes extra heap and stack space used by FreeRTOS and additional LWIP libraries and support for use with an RTOS. Note these sizes may vary for many reasons including compiler/linker versions, selected build options, etc. The sizes are meant as a guideline for memory usage only. LPC18xx/43xx memory requirements at the minimum system configuration To get the minimum configuration for a build, the DHCP support, UDP support, and broadcast support is disabled and the build is setup with a static IP address.  The LWIP raw API is used without an RTOS. The table below shows configuration options and build size information. Debug is disabled and the -O3 optimization level is used with the Keil tools. Project description Notes Linker output tcpecho, FLASH (minimal, standalone) Stack_Size      EQU     0x00000800 Heap_Size       EQU     0x00000000 #define LPC_NUM_BUFF_RXDESCS 3 #define LPC_NUM_BUFF_TXDESCS 2 #define PBUF_POOL_SIZE                  8 #define MEM_SIZE                        (12*1024)     Total RO  Size (Code + RO Data)                36396 (  35.54kB)     Total RW  Size (RW Data + ZI Data)             34656 (  33.84kB)     Total ROM Size (Code + RO Data + RW Data)      36672 (  35.81kB)
View full article
The LPC LWIP port uses zero-copy buffers. Zero-copy buffers can improve system performance over copied buffers when transferring large amounts of ethernet data. Zero-copy buffers also use less memory for data storage, as bounce buffers are not needed between the LWIP pbufs and the ethernet DMA buffers. This section gives a brief overview of how buffers are managed in the driver and the LWIP applications. Zero-copy RX buffers For zero-copy buffers, the initial pbufs needed to receive packets are pre-allocated and assigned to the ethernet controller at the maximum expected packet size. It should be noted that the payload for the packet in a pbuf must always be non-chained (contiguous) for receive. The driver will allocate packets with maximum packet size without any chaining. When a packet is received, the hardware places the received data directly into the pbuf's data (payload) area. The pbuf is then passed to the network layer without an extra copy where it is used by the application or LWIP and then de-allocated once it finishes with the packet. Once the pbuf leaves the driver's functions, it no longer tracks it or it's buffer, but the original descriptor that was associated with the pbuf is now available for a new pbuf. The driver will attetmpt to allocate and requeue a new pbuf for the descriptor before returning the received packet. If memory is not available for the new pbuf, the descriptor remains free and an attenpt will be made to allocate a new pbuf on the next received packet. (Calling lpc_rx_queue() anytime will also attempt to reload any idle RX descriptors). Note: For the LPC17xx, the descriptors and buffers must be located only in peripheral RAM or external memory. For the LPC18xx/43xx, descriptors and buffers can be located anywhere. Zero-copy TX buffers For zero-copy buffers, the initial pbuf's payload addresses are used directly with the EMAC TX descriptors. The driver will chain buffers in the descriptor if needed (if a chained pbuf is used) and keep a reference of the pbufs that are used for the transfer. The buffers/pbufs must remain in memory until the EMAC has transferred the data related to the pbuf(s). Once the EMAC transfers the buffers, the pbuf(s) will be de-allocated by the driver. Note: For the LPC17xx, the descriptors and buffers must be located only in peripheral RAM or external memory. For the LPC18xx/43xx, descriptors and buffers can be located anywhere. Zero-copy TX buffers and bounce buffers In some cases, buffers may be passed to the driver that are located in FLASH memory, IRAM, or slow memory. The EMAC driver and peripheral can't send this data directly via DMA (due to architecture or speed restrictions), so the data needs to be relocated to an area of memory that it can be sent from. If the driver detects that a buffer address used for a zero-copy transfer is not usable by the EMAC, it will copy the buffer to a temporary bounce buffer and send it from that buffer instead. This occurs automatically inside the driver if the bounce buffer support is enabled. If the bounce buffer support is not enabled and a non-usable buffer is detected, the driver will raise an exception. For the LPC17xx, this support is enabled by setting LPC_TX_PBUF_BOUNCE_EN to 1. For the LCP18xx/43xx, this support is enabled by setting LPC_CHECK_SLOWMEM to 1. If LPC_CHECK_SLOWMEM is set to 1, the memory ranges for the check must be setup with the LPC_SLOWMEM_ARRAY define.
View full article
Introduction The Universal Serial Bus (USB) is the most-successful interface in personal computing today. Fast, reliable, and easy-to-use, you will find this interface everywhere — on personal computers, computer peripherals, monitors, mobile devices, audio and video equipment, and most other consumer electronic products.   NXP leads the market in USB-equipped ARM microcontrollers providing more than 80 options for Cortex-M4, Cortex-M3, Cortex-M0, ARM9, and ARM7 microcontrollers (see comparison table and products below). NXP's portfolio of high-speed and full-speed device/host/OTG USB-enabled microcontrollers offers special USB features (like on-chip HS PHY and ROM drivers), free software, and comprehensive support to help you move quickly from design concept to production.   TechOnLine Rapid USB development on Cortex-M microcontrollers webinar (Sep 7, 2011) NXP Advantages NXP's microcontroller portfolio features the latest USB technologies, including full- and high-speed USB 2.0 device, host, and On-The-Go (OTG) functions. NXP supports all four transfer types: control, interrupt, bulk, and, in particular, isochronous, which is required for streaming audio. NXP MCUs provide designers a range of special USB features that improve overall performance and speed time-to-market: Fully-Certified USB Products On-Chip ROM Drivers Integrated Hi-Speed and/or Full-Speed PHY Free USB Host and Device Software Additional USB Features Fully-Certified USB Products NXP is a leading member of the USB-IF, the organization that maintains the USB specifications and verifies USB compliance. NXP's USB-equipped ARM MCUs are submitted for certification, so designers can be certain that their systems will deliver the best in reliability and plug-and-play operation. As of the end of 2008, most of our USB 2.0-based processors with host and device functions have been certified; the OTG function is in-process. A complete list of compliant products appears on the USB-IF web site, www.usb.org. On-Chip USB ROM Drivers NXP's on-board USB ROM drivers pack the entire USB stack, USB classes, and low-level drivers right into the microcontroller's ROM, eliminating the need to develop and debug this complex software yourself. Placing the USB drivers in the ROM frees up valuable memory space that you can then use for your application. These drivers have been thoroughly tested by NXP and outside test houses and are used to gain USB logo certification after passing the rigorous testing requirements at USB-IF. Integrated Hi-Speed and/or Full-Speed PHY A full-speed or high-speed PHY is integrated into NXP's USB microcontrollers and provides the bridge between the digital and modulated parts of the interface. The integration of the PHY on the MCU saves component cost and simplifies system design. For example, the LPC1800 and LPC4300 microcontrollers support two channels of High-Speed USB 2.0 Host/Device/OTG and have an on-chip High-Speed PHY. Free USB Host and Device Software USB development doesn't have to be expensive or difficult. To help you save time and money, NXP provides complete ready-to-go USB example applications for host and device modes that work out of the box on multiple tool chains — all at no charge. In addition to NXP's own complimentary USB packages, NXP partners with leading software companies to provide state-of-the-art USB firmware. For a complete list of USB software options, please see the Support section of this page. Additional USB Features NXP's additional USB features include the following: Host controllers are OHCI-/EHCI-compliant. Dedicated DMA lets the USB interface operate with minimal CPU intervention. SoftConnect™ uses software to determine when a USB device will connect to the bus. GoodLink™ uses an LED to indicate that a USB device has been enumerated and configured on the bus. (To save power, the LED is turned off during suspend.) Double-buffering maximizes throughput on bulk and isochronous endpoints. Multiple USB ports let devices be configured as hosts, devices, or both. USB data buffer provides flexible configuration of endpoint FIFO sizes. Products NXP offers more than 80 USB MCU options for Cortex-M0, Cortex-M3, Cortex-M4, ARM9, and ARM7 microcontrollers (see the comparison table and products below). NXP MCUs special USB features include: Comparison Table Core Product On-Chip Controller No. of Cntrls No. of Ports On-chip PHY Certified Device Host OTG ARM7TDMI-S LPC2141 FS - - 1 1 Device FS LPC2142 FS - - 1 1 Device FS LPC2144 FS - - 1 1 Device - LPC2146 FS - - 1 1 Device - LPC2148 FS - - 1 1 Device FS LPC2158 FS - - 1 1 Device - LPC2361 FS FS FS 1 1 Device, Host FS LPC2362 FS FS FS 1 1 Device, Host FS LPC2364 FS - - 1 1 Device FS LPC2366 FS - - 1 1 Device FS LPC2368 FS - - 1 1 Device FS LPC2378 FS - - 1 1 Device FS LPC2387 FS FS FS 1 1 Device, Host FS LPC2388 FS FS FS 1 2 Device, Host FS LPC2420 FS FS FS 1 2 Device, Host - LPC2458 FS FS FS 1 2 Device, Host - LPC2460 FS FS FS 1 2 Device, Host - LPC2468 FS FS FS 1 2 Device, Host FS LPC2470 FS FS FS 1 2 Device, Host - LPC2478 FS FS FS 1 2 Device, Host - LPC2880 HS - - 1 1 Device HS LPC2888 HS - - 1 1 Device HS ARM720T LH79524 FS - - 1 1 Device - LH79525 FS - - 1 1 Device - ARM922T LH7A404 FS FS - 1 3 (2 host) Device, Host - LH7A400 FS - - 1 1 Device - ARM968 LPC2921 FS - - 1 1 Device - LPC2923 FS - - 1 1 Device - LPC2925 FS - - 1 1 Device - LPC2926 FS FS 1 1 Device LPC2927 FS - FS 1 1 Device - LPC2929 FS - FS 1 1 Device FS LPC2930 FS FS FS 1 2 Device, Host - LPC2939 FS FS FS 1 2 Device, Host - ARM926EJ-S LPC3180/01 FS FS FS 1 1 - - LPC3220 FS FS FS 1 1 - - LPC3230 FS FS FS 1 1 - - LPC3240 FS FS FS 1 1 - - LPC3250 FS FS FS 1 1 - - LPC3130 HS HS HS 1 1 Device, Host, OTG - LPC3131 HS HS HS 1 1 Device, Host, OTG HS LPC3151 HS HS HS 1 1 Device, Host, OTG - LPC3152 HS HS HS 1 1 Device, Host, OTG HS LPC3153 HS HS HS 1 1 Device, Host, OTG - LPC3154 HS HS HS 1 1 Device, Host, OTG - Cortex-M3 LPC1342 FS - - 1 1 Device FS LPC1343 FS - - 1 1 Device FS LPC1345 FS - - 1 1 Device - LPC1346 FS - - 1 1 Device - LPC1347 FS - - 1 1 Device - LPC1547 FS - - 1 1 Device - LPC1548 FS - - 1 1 Device - LPC1549 FS - - 1 1 Device FS LPC1751 FS - - 1 1 Device FS LPC1752 FS - - 1 1 Device - LPC1754 FS FS FS 1 1 Device, Host - LPC1756 FS FS FS 1 1 Device, Host - LPC1758 FS FS FS 1 1 Device, Host - LPC1759 FS FS FS 1 1 Device, Host - LPC1764 FS - - 1 1 Device - LPC1765 FS FS FS 1 1 Device, Host - LPC1766 FS FS FS 1 1 Device, Host - LPC1768 FS FS FS 1 1 Device, Host FS LPC1769 FS FS FS 1 1 Device, Host - LPC1774 FS - - 1 1 Device - LPC1776 FS FS FS 1 1 Device, Host - LPC1777 FS FS FS 1 1 Device, Host - LPC1778 FS FS FS 1 1 Device, Host - LPC1785 FS FS FS 1 1 Device, Host - LPC1786 FS FS FS 1 1 Device, Host - LPC1787 FS FS FS 1 1 Device, Host - LPC1788 FS FS FS 1 1 Device, Host - LPC1820 HS HS HS 1 1 Device, Host - LPC1822 HS HS HS 1 1 Device, Host - LPC1823 HS HS HS 1 1 Device, Host - LPC1825 HS HS HS 1 1 Device, Host - LPC1827 HS HS HS 1 1 Device, Host - LPC1830 HS HS HS 2 2 Device, Host - LPC1833 HS HS HS 2 2 Device, Host - LPC1837 HS HS HS 2 2 Device, Host FS LPC1850 HS HS HS 2 2 Device, Host FS LPC1853 HS HS HS 2 2 Device, Host FS LPC1857 HS HS HS 2 2 Device, Host FS Cortex-M4 LPC4072 FS FS FS 1 2 Device, Host, OTG - LPC4074 FS FS FS 1 2 Device, Host, OTG - LPC4076 FS FS FS 1 2 Device, Host, OTG - LPC4078 FS FS FS 1 2 Device, Host, OTG - LPC4088 FS FS FS 1 2 Device, Host, OTG - LPC4320 HS HS HS 1 1 Device, Host, OTG - LPC4320 HS HS HS 1 1 Device, Host, OTG LPC4322 HS HS HS 1 1 Device, Host, OTG - LPC4323 HS HS HS 1 1 Device, Host, OTG - LPC4325 HS HS HS 1 1 Device, Host, OTG - LPC4327 HS HS HS 1 1 Device, Host, OTG - LPC4330 HS HS HS 2 2 Device, Host, OTG - LPC4333 HS HS HS 2 2 Device, Host, OTG - LPC4337 HS HS HS 2 2 Device, Host, OTG - LPC4350 HS HS HS 2 2 Device, Host, OTG - LPC4353 HS HS HS 2 2 Device, Host, OTG - LPC4357 HS HS HS 2 2 Device, Host, OTG - Cortex-M0 LPC11U12 FS - - 1 1 Device - LPC11U13 FS - - 1 1 Device - LPC11U14 FS - - 1 1 Device FS LPC11U23 FS - - 1 1 Device - LPC11U24 FS - - 1 1 Device LS, FS LPC11U34 FS - - 1 1 Device - LPC11U35 FS - - 1 1 Device - LPC11U36 FS - - 1 1 Device - LPC11U37 FS - - 1 1 Device FS LPC11U37H FS - - 1 1 Device - Cortex-M0+ LPC11U67 FS - - 1 1 Device - LPC11U68 FS - - 1 1 Device LS, FS Support Software CMX-USB Device Stack (by CMX Systems) CMX-USB Host Stack (by CMX Systems) emUSB Device Stack (by SEGGER) EUSBD (Embedded USB Device) Stack (by HCC-Embedded) EUSBH (Embedded USB Host) Stack (by HCC-Embedded) I2S - USB Audio Demo (Oct 19, 2007)   OT-USB USB Device/Host/OTG Stack (by OnChip Technologies) smxUSBD Device Stack (by Micro Digital) smxUSBH Host Stack (by Micro Digital) smxUSBO OTG Software (by Micro Digital) µC/USB Device Stack (by Micrium) µC/USB Host Stack (by Micrium) USB Audio Device Example for LPC214x (by Keil) (Feb 6, 2006) USB Audio Device Example for LPC23xx/LPC24xx (by Keil) (Jun 19, 2007) USB Device Stack (by Thesycon) USB Host Stack (by Thesycon) USB Human Interface Device (HID) Example for LPC214x (by IAR Systems) (Aug 11, 2005) USB Human Interface Device (HID) Example for LPC214x (by Keil) (Feb 6, 2006) USB Human Interface Device (HID) Example for LPC23xx/LPC24xx (by Keil) (Jun 19, 2007) USB Mass Storage Device Example for LPC214x (by Keil) (Feb 6, 2006) USB Mass Storage Device Example for LPC23xx/LPC24xx (by Keil) (Jun 19, 2007)   Windows Embedded CE BSP for NXP LH7A404 (by Adeneo) Windows Embedded CE BSP for NXP LPC3180 (by Adeneo) Windows Embedded CE BSP for NXP LPC32x0 (by Adeneo) Application Notes AN10703 NXP USB host lite V1 (Jul 14, 2008) Articles ARM7 µCs Feature True Full-Speed USB (in Electronic Products) (Aug 2005) Cortex-M0 based MCUs have flexible USB port (in Electronic Products) (Apr 11, 2011) Links     USB Implementers Forum, Inc.
View full article
1.      Important Notes     1.    Please read the build section of Libraries and Example before building anything     2.    Never give batch build with all the items selected.     3.    When building an example make sure the M0 image is built and ready before building the M4 image     4.    Read the latest release notes before proceeding with this document 2.      Introduction This document will provide the instructions and information required to use the LPC43xx dual core demos. The source files can be either obtained from the git server or can be downloaded attached as a compressed zip file. 2.1     Dual Core in LPC43XX The LPC43xx is an ARM M4/M0 based dual core microcontroller. The SoC comes with Internal IRAM/Flash of various sizes. Please read the LPC43xx user manual and the board user manual carefully before starting to use the dual core demos on any of the LPC43XX board. 2.2     Hardware requirements Keil MCB4300 Development board Serial cable or USB to serial port dongle Keil uLink-2 or Keil uLink-Pro or Segger J-Link debugger (for ARM Cortex M devices) Development PC/Laptop (Host Machine) Keil uVision IDE MDK-ARM tool-chain (version 4.54 or above) Terminal emulation software (Teraterm recommended) Windows OS in which Keil tool can run (Windows 7 recommended) 2.3     Software requirements 3.      Directory Structure The software has two main directories, the “library” directory and the “applications” directory. It follows the same directory structure as followed by the “NXPUSBLibrary”. Inside the “applications” directory is the main Keil multi project workspace LPC43xx_Demo_Examples.uvmpw could be found as shown in Figure 1: Directory structure of LPC43xx Dual Core Demo Examples. The library directory has the following libraries[1] in it CDL (for LPC43XX) BSP (for KEIL MCB4357 board) nxpUSBLib (for Host and Device) FreeRTOS IPComm The example directory will have both the nxpUSBlib, and the MultiCore examples. This document will only have the details about the MultiCore examples. The Following MultiCore examples can be found under examples directory. Common (Not an example in itself but is used by all the examples) USB_KBD_HostBlinky) USB_MS_Device (USB Mass Storage device and Blinky) 4.      Libraries 4.1     Building Library Open the Keil uVision multiple project workspace by double clicking on the “LPC43xx_Demo_Examples.uvmpw”. The project workspace opens in the uVision IDE, as shown in Figure 2: LPC43xx_Demo_Example in Keil uVision Workspace. For building the libraries it is recommended to use the batch build option provided by Keil. Select “Project” from the menu (on top of the IDE), followed by “Batch build…”, which will open the batch build window as shown in Figure 3: Batch build dialog. To build a specific library all the other selections must be cleared, this can be done by clicking on “Deselect All” button located in the left side of the dialog. Now to build, say CDL library, the appropriate library configurations must be selected [Example, for CDL “LPC43xx_M4 and LPC43xx_M0” must be selected]. Clicking the build button located at the top left side of the dialog will build the selected library. Each project is provided with a README.TXT file that will help the user to know more about the various configurations and how to use them. The library can also be built configuration by configuration. To do so, one must first make that project active by right clicking on the library and selecting the “Set as Active Project” from the menu that pops up (marked red in Figure 4: Setting active Project and Configuration), now select a configuration from the pull down menu (marked as green in Figure 4: Setting active Project and Configuration). Once the active configuration is selected press “F7” key to start the build process of the active configuration. After successful build select the next configuration and start the build process. 4.2     CDL (Common Driver Library) 4.2.1     Description The common driver library (CDL) will have the functions with which can be used to initialize and operate on any peripheral present in the SoC. It has files that implements functions for each peripheral (lpc43xx_uart, lpc43xx_i2c etc,). The CDL also has the CMSIS sources which will have the startup code required for starting up of the SoC. The CMSIS library has 2 startup files (lpc43xx_startup.S and lpc43xx_startup_m0.S) for Cortex M4 core and Cortex M0 core respectively. 4.2.2     Configurations The CDL supports two configurations (LPC43xx_M4 and LPC43xx_M0) one for each core 4.2.2.1     LPC43xx_M0 This configuration will build the library that could be linked and used with application that is meant to run on M0 core. This library will have the startup code for M0 core. If the users want to develop a new module they must keep in mind that all the IRQ handler names are prefixed with “M0_”. 4.2.2.2     LPC43xx_M4 This configuration will build CDL library, so that it can be linked and used by applications that are compiled for M4 core. 4.2.3     Output Files All output files (including the object and list files) will be located under “keil_ouput” directory of the corresponding library/example CDL_LPC43xx_M4.lib – Generated by building CDL for “LPC43xx_M4” configuration CDL_LPC43xx_M4.lib – Generated by building CDL for “LPC43xx_M0” configuration 4.3     BSP (Board Support Package) Library 4.3.1     Description This library has the functions required to initialize the board specific features. For example the external Flash, external DRAM, pin mux, LEDs etc. This library implements the bsp_init API that initializes the board (Recommended to call only from M4 core). This library supports two boards HITEX LPC4350 and KEIL MCB4357. The user must build the configurations only for the relevant board. Say, for example the users of HITEX 4350 board must build only HITEX4350_M0 and HITEX4350_M4, and should not build anything else. The board configuration that was build last (M0 and M4) will be considered for linking with any application. 4.3.2     Configurations For batch building of this library it is recommended to build only two configurations (M0, M4) that belongs to the same board. 4.3.2.1     MCB4300_M0 This configuration will build the BSP library for MCB4300 board and will provide functions that can be called from M0 core. This configuration must be built only along with MCB4300_M4 and not with any other configuration. 4.3.2.2     MCB4300_M4 This configuration will build the BSP library for MCB4300 board and will provide functions that can be called from M4 core. This configuration must be built only along with MCB4300_M0 and not with any other configuration. 4.3.3     Output Files BSP_LPC43XX_M4.lib – Library generated by building MCB4300_M4 configuration BSP_LPC43XX_M0.lib – Library generated by building MCB4300_M0 configuration Since we do not generate separate libraries for each board the configuration build recently will be taken for linking with the example applications. 4.4     nxpUSBlib (NXP’s USB Library) 4.4.1     Description This library provides the USB host/device support for LPC USB based microcontrollers. The original source of this library can be found at www.lpcware.com. But it is recommended to use the sources provided along with the dual core examples (Has some bug fixes and routines required for dual core operation of this library). For more information refer to document that comes along with the library. 4.4.2     Configurations For batch building this library it is recommended to select all the configurations. LPC43xx_Host_M0 – Configuration that builds USB host stack for M0 core LPC43xx_Device_M0 – Configuration that builds USB device stack for M0 core LPC43xx_Host_M4 – Configuration that builds USB host stack for M4 core LPC43xx_Device_M4 – Configuration that builds USB device stack for M4 core 4.4.3     Output Files nxpUSBlib_LPC43xx_Host_M0.lib – Created by building this library for configuration LPC43xx_Host_M0 nxpUSBlib_LPC43xx_Device_M0.lib – Created by building this library for configuration LPC43xx_Device_M0 nxpUSBlib_LPC43xx_Host_M4.lib – Created by building this library for configuration LPC43xx_Host_M4 nxpUSBlib_LPC43xx_Device_M4.lib – Created by building this library for configuration LPC43xx_Device_M4 4.5     FreeRTOS 4.5.1     Description This library is compiled of the FreeRTOS source obtained from www.freertos.org. Minimal modifications had been made to the OS files so that they will work on LPC43xx in both the cores. For more information about FreeRTOS refer www.freeRTOS.org 4.5.2     Configuration For batch building it is recommended to select all the configurations. 4.5.2.1     LPC43xx_M0 This configuration will compile FreeRTOS library from the sources that could be run from M0 core of LPC43xx. When this configuration is selected the FreeRTOS source will read its configuration header from lpc43xx_m0_FreeRTOSConfig.h kept under config directory of the FreeRTOS library, and will use RITIMER hardware to generate the system ticks. 4.5.2.2     LPC43xx_M4 This configuration will compile FreeRTOS library from the sources that could be run from M4 core of LPC43xx. When this configuration is selected the FreeRTOS source will read its configuration header from lpc43xx_m4_FreeRTOSConfig.h kept under config directory of the FreeRTOS library. 4.5.2.3     Output Files FreeRTOS_LPC43XX_M0.lib – Generated by building the library using LPC43xx_M0 configuration. FreeRTOS_LPC43XX_M4.lib – Generated by building the library using LPC43xx_M4 configuration. 4.6     IPComm (Inter Processor Communication Library) 4.6.1     Description This library provides the functions to communicate between cores (M0/M4). This is required for the applications running on both the cores. For more information about this library and usage refer Application Note AN11177: Inter Processor Communications. 4.6.2     Configuration It is recommended to select all the configuration during the batch build. Standalone_M0 – Building IPC library for this configuration will generate IPC functions without support from any OS and can run on M0 core Standalone_M4 – Building IPC library for this configuration will generate IPC functions without support from any OS and can run on M4 core FreeRTOS_M0 – Building IPC library for this configuration will generate IPC functions with FreeRTOS support and can run on M0 core FreeRTOS_M4 – Building IPC library for this configuration will generate IPC functions with FreeRTOS support and can run on M4 core 4.6.3     Output Files The following are the output files generated for the above configurations respectively IPC_noOS_M0.lib IPC_noOS_M4.lib IPC_FreeRTOS_M0.lib IPC_FreeRTOS_M4.lib 5.      Examples 5.1     Setting up of board and debuggers This section provides information about setting up of various board to execute the dual core examples. For now the examples support only HITEX4350 and MCB4300 boards. 5.1.1     Setting up MCB4300 board Follow the steps below to setup the KEIL MCB4300 board to run the dual core examples Connect the U-Link/J-Link debugger’s 10-Pin debug port header to J6 port of the board. Connect the debugger to the Host PC using USB cable provided with the debugger (Debugger’s power LED should be lit after connecting) Connect a Serial cable (Straight cable) to the board’s P11 (UART0/3) port and connect the other end to the host PC Open teraterm select the COM port corresponding to the Serial Port to which the board is connected, select 115200 as the baud rate and no flow control Connect the USB cable’s[2] (Type-A to Micro-B) Micro-B end to the board’s Micro-B receptacle P2 (USB0) [Not to P4 USB1] Connect the Type-A end of the USB cable to the host PC (now the board should power ON) 5.1.2     Setting up Examples for debugging The following steps must be executed for all the examples. It must only be carried out for M4 targets and need not have to be done for any M0 target. It is applicable only for the examples and not for the libraries. Select the example as active project by right clicking on it (Circled red in Figure 4: Setting active Project and Configuration) Select the M4 configuration from the configuration selection pull down menu (Circled green in Figure 4: Setting active Project and Configuration) In the project view (Located in the left side of the IDE), expand the active example by clicking on it and click on the configuration (shown with a folder icon) Press “Alt” key and while holding it Press and release “F7” key, this will show the options dialog for the currently selected M4 configuration 6.     Now configure your debugger as shown in the figure (Red circles in Figure 5: Debugger configuration in Keil uVision)5.     Click on the “Debug” tab located on the top of the dialog (Blue circle in Figure 5: Debugger configuration in Keil uVision) Click on the Settings button (Green circle in Figure 5: Debugger configuration in Keil uVision) to open the debugger hardware configuration dialog as shown in Figure 7: U-Link debugger Hardware settings Setup the configuration[3] (shown in red circles) in the dialog as shown in Figure 6: U-Link debugger Hardware settings Click OK to save the configuration and close the dialog                                                10.  Now click on the utilities tab at the top of the options dialog (Tab next to the blue circled debug tab in Figure 5: Debugger configuration in Keil uVision) Now the window will look as shown in Figure 7: Keil flash configuration utility window Setup the configuration (red circled) in the utility window as shown in Figure 7: Keil flash configuration utility window Click the settings button (Green circled in Figure 7: Keil flash configuration utility window) That will open the Flash driver setup window as shown in Figure 8 Select the configuration (Red circled) as shown in                                                         Click on the add button (Green Circled in Figure 8: Flash driver configuration window) That will open the flash programming algorithm select window as in Figure 9: Flash Programming Algorighm select window In the flash programming algorithm window select SST39VF3201x[4] and click “Add” button in Figure 9: Flash Programming Algorighm select window Repeat Step 16 to 18 for LPC18xx/43xx IAP 512kB for both 1A000000 and 1B000000 address range Click OK (Blue circled) as shown in Figure 8: Flash driver configuration window Press OK in Keil flash configuration utility window to save the configuration and exit the options window Repeat the steps for all the examples for all the M4 configurations                                                               5.1.3     Building & Executing Examples Every example will have a set of M0 configuration and M4 configurations, the user must build the M0 configuration first and then the corresponding M4 configuration. For compatible configurations please refer to the configuration table provided under each example. Once both M0 and the corresponding M4 images are built click on the debug button   to start the debugging. Press “F5” key to execute the code. 5.2     Blinky Example 5.2.1     Description This example blinks the LED1 (Red LED in HITEX board) and LED2 (Green LED in HITEX board). The M4 core pushes the LED1 turn ON/OFF message at an interval of every 500 milliseconds and the message is popped by M0 core and based on the message it turn ON/OFF LED1. The same way M0 core pushes LED2 ON/OFF message and is popped by the M4 core and blinks the LED2 accordingly. So, on both the cores there will be two tasks running one pushes the message another pops and executes the command present in the message. 5.2.2     Configuration M4 Configuration M0 Configuration Remarks Standalone_M4 Standalone_M0 FreeRTOS_M0 All configurations possible FreeRTOS_M4 Standalone_M0 FreeRTOS_M0 All configurations possible Table 5‑1: Blinky Example configuration 5.2.3     Expected Output LED1 and LED2 blinks at different rates. 5.3     USB Host Stack Example (with Keyboard class driver) Description This example runs the USB Host stack in any of the core with the keyboard class driver. The stack running in any core will receive the keystroke and will push it to the other core via message queue. The other core will receive the message and print the key pressed to UART. It then sends an acknowledgement message to theblinky task running along with the USB host stack to toggle an LED. 5.3.1     Configuration M4 Configuration M0 Configuration USB_noOS_M4 Blinky_noOS_M0 Blinky_FreeRTOS_M0 USB_FreeRTOS_M4 Blinky_noOS_M0 Blinky_FreeRTOS_M0 Blinky_FreeRTOS_M4 USB_noOS_M0 USB_FreeRTOS_M0 Blinky_noOS_M4 USB_noOS_M0 USB_FreeRTOS_M0 Table 5‑3: USB Keyboard demo configurations 5.3.2     Expected Output Blinks LED1 and LED2, connecting the keyboard to the host port will print the message keyboard enumerated on the COM port. Any key pressed in the keyboard will be printed on the teraterm. Key press will also toggle LED3. 5.4     USB Device Stack Example (Mass Storage Device Class) 5.4.1     Description This example will run the USB device stack (Mass storage class) in any core while running the Blinky on both the cores. This example also has the FAT file system parser for getting the data present in the file storage area. 5.4.2     Configuration Same as USB Keyboard demo configurations 5.4.3     Expected Output The Host PC will enumerate the board as a USB disk and will contain a README.TXT that carries the text “USB Device demonstration”. LED1 and LED2 will be blinked by the Blinky tasks. The Mass Storage task will toggle the LED3 for every SCSI command it receives.
View full article
NXP Semiconductors and OnChip Technologies have partnered to provide USBHostLite software for our LPC1000, LPC2000, and LPC3000 families of microcontrollers with USB host capability. These include members of the LPC17xx series, the LPC23xx series, the LPC24xx series, the LPC29xx series, the LPC31xx series, and the LPC32xx series of microcontrollers. USBHostLite is a stripped-down USB host stack that includes only USB mass storage class support with the bare minimum code to run in an OS-less environment. USBHostLite provides a simple solution for accessing the files on USB mass storage devices such as USB Pen Drives, USB Hard Disk Drives, etc., connected to the USB Host port. Features The USBHostLite supports the following features: Runs without any operating system Contains small memory footprint Source code is written in ANSI C and is independent of IDE Supports control and bulk transfers Supports FAT16 file system Simple File APIs allow file read and write operations Well structured and easily understandable source code Limitations The complimentary USBHostLite software from NXP has following limitations: USBHostLite is currently only ported to and tested on Embedded Artists' LPC2468 OEM board and Keil's MCB1760 board. Classes other than the mass storage are not supported. The mass storage interface must be present in the first configuration. Max Logical Unit Number (LUN) greater than zero not supported. File systems other than FAT16 are not supported. Long filenames are not supported. Files located in folders other than root directory cannot be accesed. The buffer size used in the application must not exceed 4KB. Note: This application note describes the USBHostLite stack in general and its application on the Embedded Artists LPC2468 OEM board in particular. Software USBHostLite for LPC source code is free to NXP customers for unlimited use with NXP LPC2000 and LPC3000 families of microcontrollers only. By downloading or using the USBHostLite software, you agree to use it solely with these NXP microcontrollers.USBHostLite stack ported to the LPC293x devices on the Hitex LPC2939 board: USBHostLite for LPC293x VBeta 0.01 (Jul 28, 2009) - Attached USBHostLite stack ported to the LPC2468 device on the Embedded Artists LPC2468 OEM board: USBHostLite for LPC23xx/LPC24xx V1.00 (Jan 4, 2010) USBHostLite stack ported to the LPC1768 device on the Keil MCB1760 evaluation board: USBHostLite for LPC17xx VBeta 0.01 (Jul 14, 2009) - Attached For customer applications requiring full featured and production quality embedded USB stacks, OnChip Technologies LLC provides embedded USB Host/Device/OTG stacks that are fully compliant with the USB specifications and offers great degree of stability and configurability. More Information Disclaimer This software is provided AS-IS by NXP Semiconductors. NXP Semiconductors does not support or warrant the software contained herein for any purpose other than for informational use. Please contact OnChip Technologies LLC for further assistance including support options and other embedded USB host/device/OTG stacks. For Further Assistance OnChip Technologies LLC Other Professional USB Host Stack Solutions for the LPC3000, LPC2000, and LPC1000 families CMX Systems CMX-USB Host HCC Embedded USB (EUSB) HostLite Stack Micrium μC/USB Host Micro Digital smxUSBH Quadros RTXCusb Software Thesycon Embedded USB Host Stack
View full article
Introduction The LPC USB serial I/O (LPCUSBSIO) is a generic API provided to PC applications programmer to develop applications to communicate with serial I/O devices connected to LPC micro-controller. LPCUSBIO library converts all API calls into USB messages which are transferred to LPC micro-controller, which in turn communicates with serial devices using I2C, SPI and GPIO interfaces. To make the USB device install free on host systems LPCUSBSIO uses USB-HID class as transport mechanism. HID class is natively supported by most commercially available host operating systems.    Architecture The framework uses HID_API , a multi-platform library which allows an application to interface with USB HID-Class devices on Windows, Linux, and Mac OS X. The following figure shows how the components of the system are typically organized. The PC/Host may be desktop/laptop machine or an embedded system. The LPC micro-controller and the I2C device would usually be on the same PCB. The LPC micro-controller will operate in I2C master mode. All the I2C device connected to the bus should have unique address on bus. I2C devices that support configurable addresses will have pins which can be hard-wired to give a device an appropriate address; this information may be found in the datasheet of the I2C device chip. LPCUSBSIO Architecture
View full article
NicheLite for LPC by InterNiche is a variant of its NicheLite™ product, a full-featured TCP/IP stack optimized for embedded systems, requiring as little as 12 KB of code. An RFC compliant implementation of the TCP/IP protocol suite, NicheLite for LPC includes ANSI C sources for a comprehensive subset of the TCP/IP family of protocols, a "Mini" Sockets API, and a highly effective system optimization and tuning tool. NicheLite for LPC's IP layer can support one hardware interface and is fully instrumented for MIB-II access by SNMP agents. MIB-II tables include: Interfaces, IP, ICMP, TCP and UDP information. Packet data, including headers, are in contiguous buffers to simplify memory management and avoid data copies. Macros to protect critical sections of code are used sparingly to improve throughput and reduce memory requirements. The tunable parameters such as MSS (Maximum Segment Size) and the TCP window size can be left to the runtime logic or may be customized for your application. NicheLite for LPC supports the following protocols: Address Resolution Protocol (ARP) Internet Protocol (IP) Internet Control Message Protocol (ICMP) User Datagram Protocol (UDP) Transmission Control Protocol (TCP) Dynamic Host Configuration Protocol (DHCP) Client Domain Name System (DNS) Client Bootstrap Protocol (BOOTP) Trivial File Transfer Protocol (TFTP) NicheLite for LPC Leaflet (attached) Software Obtaining the Software NicheLite for LPC source code is free to NXP customers for unlimited use with NXP LPC1000, LPC2000, and LPC3000 families of microcontrollers only.Obtaining and using NicheLite for LPC is conditional upon accepting a detailed Software License Agreement (SLA). Please download and carefully read the SLA if you have not done so already: Revision History for NicheLite V1.02 (Jul 17, 2007) (attached) Contents The NicheLite for LPC software package includes: NicheTask™ cooperative multi-tasking scheduler TCP supporting InterNiche's Light Weight API with a Zero-Copy option IPv4 without fragmentation/reassembly ARP ICMP Ping TFTP NicheTool™ NicheFile VFS Mini-Sockets API Single Ethernet interface with device drivers optimized for the LPC17xx, LPC23xx/LPC24xx, and LPC32x0 TFTP client TFTP server Example applications (TFTP client, TFTP server, HTTP listener) NicheLite Reference Manual (not for redistribution) HTML-Formatted User's Guide (intended for distribution to end customers) Clearly written, comment-rich ANSI-"C" source code A header file, required at compile time, articulates the details of the source license which prohibits the end customer from distributing the source for NicheLite for LPC. End-Customer Options and Upgrades Available options and upgrades from InterNiche to NXP customers of NicheLite for LPC include: Technical Support Professional Services HTTP Server PPP SNMP v1, v2c, v3 SMTP Client (Email Alerter) NicheStack SSL POP3 Client FTP Server and Client Upgrade to Full NicheStack IPv4, IPv6, Dual Products   NicheStack HTTPServer™ (Attached) NicheStack SSL™ (Attached) NicheStack IPv4™ (Attached) Contact InterNiche for Details More Information Cortex-M0 Microcontrollers Cortex-M3 Microcontrollers Cortex-M4 Microcontrollers ARM7 Microcontrollers ARM9 Microcontrollers InterNiche Technologies, Inc. Overview Presentation (Attached) InterNiche Technologies, Inc. NicheTask Open Source OS
View full article
    The LPC11U6x USB to I2C Bridge project utilizes NXP’s USB Serial I/O (LPCUSBSIO) library to demonstrate the I2C sensor control via the full speed USB functionality on LPC11U6x. The project is implemented on the LPC11U6x LPCXpresso board as well as the LPC11U68 Development Board. The firmware packages include USB HID and I2C drivers and are implemented with Keil, IAR and LPCXpresso three IDEs . All packages are built with LPCOpen structure and are available for download from the links provided at the end of this project page. Within the Keil and IAR Manley board packages there are two demos. The LCD demo will require a Keil/IAR official license to build. In addition, to use the LPCXpresso IDE, user need to use the latest LPCXpresso IDE 6.1.4 avaialble from down load at the link below. Instructions on how to build and use the LPCXpresso package can be found from this link. A windows based GUI is provided to demonstrate the functionality of the USB to I2C bridging functionality utilizing the NXP LPCUSBSIO library. The LPC11U68 DevelopmentBoard and LPCXpresso board enumerate as HID devices on the windows PC. The GUI program talks to LPC11U6x through USB HID device class protocol. Upon start, this window side application automatically scans the I2C devices found on the hardware. On the Manley board, this GUI can monitor the on board I2C temperature sensor. When demonstrating this implementation with the LPC11U6x LPCXpresso board, the EA LPCXpresso base board should be connected for richer user experience. When the EA LPCXpresso base board exists, this GUI application can control the LEDs on the LPCXpresso base board via the I2C Expander PCA9532 on board. The binary of the GUI application is available for download at the end of this project page. NXP will publish the source code of this application in the next couple weeks. Original Attachment has been moved to: usbsio_v2_06_lpcxpresso_nxp_lpcxpresso_11u68.zip Original Attachment has been moved to: usbsio_v2_06_keil_iar_nxp_lpcxpresso_11u68.zip Original Attachment has been moved to: LPC11U6x_USB_I2C_Bridge_GUI.zip Original Attachment has been moved to: usbsio_v2_06_keil_iar_manley_11u68.zip Original Attachment has been moved to: usbsio_v2_06_lpcxpresso_manley_11u68.zip
View full article
NXP Smartphone Quick-Jack Solution Transform the audio jack of a smartphone into a multi-purpose, self-powered data port. This hardware/software platform, designed for use with iPhone® and Android® smartphones, is the simplest way to design compact sensor peripherals that use the phone’s audio jack for data and power. Whether you are a Smartphone App Developer looking for an easy way to add cool context-aware features to your next app or an End product designer looking for simple way to Monitor or control sensors, the new NXP Smarphone Quick-Jack solution will make it easy to connect external devices to smartphones for self-powered data communications. It gives smartphones app developers an easy way to add context-aware app features, input user or environment data, or connect peripherals and provides end-product designers instant access to smartphones’ convenience, appealing UI, and cloud connectivity, with unmatched simplicity for endless applications. Compatibility The current version of the OM13069 Quick-Jack solution has been tested with the following devices: • iOS: iPhone 4, iPhone 4S, iPhone 5, iPhone 5S • Android: Samsung Galaxy S3. It is not guaranteed to work with other devices. Quick-Jack Solution quick start guide and Application Note: The NXP Smartphone Quick-Jack Solution quick start guide can be found at:  http://www.nxp.com/documents/user_manual/UM10815.pdf The Chinese version of the NXP Smartphone Quick-Jack Solution quick start guide can be found at:  http://www.nxp.com/documents/user_manual/UM10815_ZH.pdf The NXP Smartphone Quick-Jack Solution Application Note can be found at:  http://www.nxp.com/documents/application_note/AN11552.pdf The Chinese version of the NXP Smartphone Quick-Jack Solution Application Note can be found at: http://www.nxp.com/documents/application_note/AN11552_ZH.pdf Useful Links For more information on the solution kit and how to order it please visit: http://www.nxp.com/demoboard/OM13069.html For more information on the LPC812 Series please visit: http://www.nxp.com/products/microcontrollers/cortex_m0_m0/lpc800/ For the LPC800 Promotional web page please visit: http://www.nxp.com/campaigns/lpc800-go/ To Download your iPhone App into your Phone, use this link: https://itunes.apple.com/us/app/nxp-quick-jack/id854875264?mt=8 To Download your Android App into your Phone, use this link: https://play.google.com/store/apps/details?id=com.nxp.HijackU To Download the leaflet use this link; http://www.nxp.com/documents/leaflet/75017571.pdf  To see the Hi-Jack project web page from the University of Michigan, use this link; http://web.eecs.umich.edu/~prabal/projects/hijack/ To Download the Press Release use this link; http://www.nxp.com/news/press-releases/2014/05/nxp-unveils-smartphone-quick-jack-solution-transforming-audio-jack-into-multi-purpose-self-powered-data-port.html Note Concerning iOS Source Code By rule, iOS source code is not allowed to be distributed on public web sites.  Please contact NXP at our technical support centerto inquire about iOS source.
View full article
About FreeRTOS FreeRTOS™ is a market leading RTOS that is designed specifically for microcontrollers. It is professionally developed, strictly quality controlled, robust, supported, and free to use (no upfront payment, no royalties) in commercial products without any requirement to expose your proprietary source code. FreeRTOS receives in excess of 107,000 downloads a year, is deployed in millions of products, and has a huge user community. FreeRTOS offers lower project risks and a lower total cost of ownershipthan commercial alternatives because: It is fully supported and documented. Most people take products to market without ever contacting us, but with the complete peace of mind that they could opt to switch to a fully indemnified commercial license (with dedicated support) at any time. Resources: The FreeRTOS web site The FreeRTOS value proposition    FreeRTOS and LPCOpen FreeRTOS is an integral part of LPCOpen. Information and a video on using LPCOpen with FreeRTOS is provided in tutorial form on the FreeRTOS website. Resources: Information and tutorial on using FreeRTOS with LPCOpen    FreeRTOS kernel support for NXP MCUs FreeRTOS has comprehensive kernel support for NXP ARM core MCUs, including: LPC11xx Cortex-M0 LPC13/7/8xx Cortex-M3 LPC15xx Cortex-M3 LPC43xx Cortex-M4F / Cortex-M0 LPC2xxx ARM7 The main FreeRTOS .zip file download includes several pre-configured example projects for these devices. The intent of these projects is to provide an 'out-of-the-box' starting point, to get new users up and running as quickly as possible, and provide a base from which commercial projects can be developed. The example projects already include all the required source files, all the required include paths, all the required compiler options, and target one specific piece of hardware using one specific tool chain. A project cannot be provided for every possible combination, but using an existing project as a base for any new developments is still recommended even when an exact component or development board match cannot be found. Resources FreeRTOS demos for NXP parts on the FreeRTOS web site Additional FreeRTOS Products Supporting NXP MCUs FreeRTOS+FAT SL Free commercial licenses when used on NXP LPC17xx and LPC18xx MCUs! FreeRTOS+FAT SL is a market proven, DOS compatible, proprietary and supported FAT file system provided by HCC Embedded to Real Time Engineers Ltd for use with FreeRTOS or in bare metal systems. FreeRTOS+FAT SL is intricately engineered to minimise both Flash and RAM footprint. Other products in the file system family include both high performance and true fail-safe designs. Resources: Documentation, source code and FreeRTOS simulator project for the example demonstrated in the video Video: FreeRTOS+FAT SL and FreeRTOS+CLI in the FreeRTOS simulator Header 1 Header 2 FreeRTOS+UDP FreeRTOS+UDP is a small, fully thread aware, sockets based, and very efficient UDP/IP stack for FreeRTOS. It was created specifically for, and contains the features needed by, our new Internet of Things solution (currently being documented). The standard Berkeley sockets "like" interface makes it fast to learn and easy to use, and its compact size and efficiency makes it ideal for communication between small network enabled embedded devices. Resources: Documentation, source code and LPCXpresso project for the example demonstrated in the video Video: FreeRTOS+UDP and FreeRTOS+CLI on an LPC1830 FreeRTOS+CLI Free commercial licenses when used on NXP LPC17xx and LPC18xx MCUs! FreeRTOS+CLI (Command Line Interface) provides a simple, small, extensible and RAM efficient method of enabling your FreeRTOS application to process command line input. Resources: FreeRTOS+CLI documentation Featured FreeRTOS+IO and FreeRTOS+CLI Demo for LPCXpresso including networking and file system support Two comprehensive example projects are available that demonstrates FreeRTOS, FreeRTOS+IO and FreeRTOS+CLI being used on an LPCXpresso LPC1769 board, using the free LPCXpresso IDE. Examples include a telnet style command line interface to a file system, where directory listings can be viewed, and files can be copied and deleted. Resources NXP featured demo documentation NXP featured demo source code and project files TCP/IP libraries Low cost, professional, and fully featured IPv4 TCP/IP FreeRTOS libraries for the LPC176x are also available. Resources: FreeRTOS TCP/IP libraries for LPC17xx    FreeRTOS+Trace FreeRTOS+Trace is a trace tool for FreeRTOS that provides 15 graphically interconnected views for a world leading level of insight into the run-time behaviour of your FreeRTOS application. FreeRTOS+Trace includes recorder code for the LPC17xx, making it an indispensable debugging and optimisation tool for LP17xx based developments. Resources: FreeRTOS+Trace FreeRTOS+IO Free commercial licenses when used on NXP LPC17xx and LPC18xx MCUs! FreeRTOS+IO provides a Linux/POSIX like open(), read(), write(), ioctl() type interface to peripheral driver libraries, and is ported to the CMSISv2p00_LPC17xx library provided by NXP from this website. FreeRTOS+IO sits between CMSISv2p00_LPC17xx and a user application to provide a single, common, interface to all supported peripherals. The current LPC17xx board support package contains UART, I2C and SPI support, in both polled and interrupt driven modes. FreeRTOS+IO abstracts away the peripheral interface details, including the implementation of any interrupt service routines that may be required. Resources: FreeRTOS+IO documentation FreeRTOS+IO Board Support Package for the LPCXpresso base board
View full article
Before building u-boot, you'll need a machine that can run Linux (such as Fedora or Ubuntu). You can setup a Virtual Machine and install Linux on it if you don't have access to a physical Linux machine. 1. Start by downloading the u-boot source code at http://www.denx.de/wiki/U-Boot/WebHome. Unzip the source code into a directory on your machine. The patch has been built against the 2011.06 version of the u-boot source, so be sure to get the correct version. 2. Get the LPC177x_8x u-boot patch the attached file. 3. Apply the patch to the u-boot source code using the following command in the u-boot source directory. ubuntu:~/dev/lpc1788/u-boot-2011.06$ patch -p1 < u-boot-2011.06-ea1788_v1_00.patch patching file arch/arm/cpu/cortex-m3/config.mk patching file arch/arm/cpu/cortex-m3/cpu.c patching file arch/arm/cpu/cortex-m3/lpc17xx/clocks.c patching file arch/arm/cpu/cortex-m3/lpc17xx/common.c patching file arch/arm/cpu/cortex-m3/lpc17xx/flash.c patching file arch/arm/cpu/cortex-m3/lpc17xx/gpio.c patching file arch/arm/cpu/cortex-m3/lpc17xx/iaplib.c patching file arch/arm/cpu/cortex-m3/lpc17xx/iocon.c patching file arch/arm/cpu/cortex-m3/lpc17xx/Makefile patching file arch/arm/cpu/cortex-m3/lpc17xx/serial.c patching file arch/arm/cpu/cortex-m3/lpc17xx/timer.c patching file arch/arm/cpu/cortex-m3/Makefile patching file arch/arm/cpu/cortex-m3/mpu.c patching file arch/arm/cpu/cortex-m3/nvic.c patching file arch/arm/cpu/cortex-m3/start.S patching file arch/arm/cpu/cortex-m3/u-boot.lds patching file arch/arm/include/asm/arch-cortex-m3/cortex-m3.h patching file arch/arm/include/asm/arch-lpc17xx/hardware.h patching file arch/arm/include/asm/arch-lpc17xx/lpc17_clock_checks.h patching file arch/arm/include/asm/arch-lpc17xx/lpc17_clocks.h patching file arch/arm/include/asm/arch-lpc17xx/lpc17_gpio.h patching file arch/arm/include/asm/arch-lpc17xx/lpc17_iaplib.h patching file arch/arm/include/asm/arch-lpc17xx/lpc17_iocon.h patching file arch/arm/include/asm/arch-lpc17xx/lpc17_mac.h patching file arch/arm/include/asm/arch-lpc17xx/lpc17_regs.h patching file arch/arm/lib/board.c patching file board/nxp/ea1788/config.mk patching file board/nxp/ea1788/ea1788.c patching file board/nxp/ea1788/Makefile patching file board/nxp/ea1788/mem.c patching file board/nxp/ea1788/mpu_setup.c patching file board/nxp/ea1788/nand.c patching file board/nxp/ea1788/net.c patching file board/nxp/ea1788/pins.c patching file include/configs/ea1788.h patching file Makefile ubuntu:~/dev/lpc1788/u-boot-2011.06$ 4. Download the Code Sourcery GNU Lite tools for Linux (http://www.lpcware.com/content/tools/code-sourcery-codebench) and untar the tools into a directory. 5. Add the Code Sourcery GNU tools to your path as follows. Change the directory to where your tools have been installed. export PATH=$PATH:$/home/user/dev/arm-2011.03/bin 6. Add several environment variables to your shell with the following commands. Like the path above, make sure the CROSS_COMPILE path is correct. export CROSS_COMPILE=/home/user/dev/arm-2011.03/bin/arm-none-eabi- export ARCH=arm 7. Switch into the u-boot directory and type 'make ea1788_config' to configure u-boot for the EA1788 board. ubuntu:~/dev/lpc1788/u-boot-2011.06-lpc1788$ make ea1788_config awk '(NF && $1 !~ /^#/) { print $1 ": " $1 "_config; $(MAKE)" }' boards.cfg > .boards.depend Configuring for ea1788 board... ubuntu:~/dev/lpc1788/u-boot-2011.06-lpc1788$ 8. Before building the u-boot binary, an additional tool must be added to your path to generate the word 7 checksum value in the u-boot binary. Without this, u-boot won't boot on the board. You can get this tool at attached files. Add the path that the tool is located in to your PATH environment variable similar to step 5 above. 9. Type 'make to build the u-boot binaries. ubuntu:~/dev/lpc1788/u-boot-2011.06-lpc1788$ make Generating include/autoconf.mk Generating include/autoconf.mk.dep /home/usb10132/dev/lpc1788/arm-2011.03/bin/arm-none-eabi-gcc -DDO_DEPS_ONLY \ -g  -Os   -fno-common -ffixed-r8 -msoft-float   -D__KERNEL__ -DCONFIG_SYS_TEXT_BASE=0xA1F80000 -I/home/usb10132/dev/lpc1788/u-boot-2011.06-lpc1788/include -fno-builtin -ffreestanding -nostdinc -isystem /home/usb10132/dev/lpc1788/arm-2011.03/bin/../lib/gcc/arm-none-eabi/4.5.2/include -pipe  -DCONFIG_ARM -D__ARM__ -marm  -mabi=aapcs-linux -mno-thumb-interwork -march=armv7-m -mthumb -Os -static-libgcc -fpic -mtune=cortex-m3 -nostdlib -Wall -Wstrict-prototypes -fno-stack-protector   \ -o lib/asm-offsets.s lib/asm-offsets.c -c -S ... ... ... /home/usb10132/dev/lpc1788/arm-2011.03/bin/arm-none-eabi-objcopy -O srec u-boot u-boot.srec /home/usb10132/dev/lpc1788/arm-2011.03/bin/arm-none-eabi-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin ./lpc17_fcg u-boot.bin u-boot-lpc.bin File u-boot.bin loaded with size 125572 bytes Word 0: 0x1000ff90 Word 1: 0x00000161 Word 2: 0x00000135 Word 3: 0x00000139 Word 4: 0x0000013d Word 5: 0x00000141 Word 6: 0x00000145 Word 7: 0xeffef8de (cksum total: 0x00000000) File u-boot-lpc.bin created with size 125572 bytes /home/usb10132/dev/lpc1788/arm-2011.03/bin/arm-none-eabi-objcopy --gap-fill=0xff -O ihex u-boot-lpc.bin u-boot-lpc.hex -I binary /home/usb10132/dev/lpc1788/arm-2011.03/bin/arm-none-eabi-objdump -d u-boot > u-boot.dis ubuntu:~/dev/lpc1788/u-boot-2011.06-lpc1788$ After about a minute, you should get the binary and hex file used for programming the board. The hex file is used with the Flash Magic tool, while the binary can be used directly with u-boot to update itself after u-boot has been installed. The files are called u-boot-lpc.hex and u-boot-lpc.bin
View full article
A simple programming API is available that allows custom development of programming algorithms for different memory types such as NOR or NAND FLASH or EEPROM based memory. By mixing programming algorithms and different program images as different steps with the DFUSec tool, a single programming sequence could program all non-volatile memories and memory regions in a single DFUSec programming cycle via USB! This section explains the process of creating a new programming algorithm. Programming algorithm creation process A programming algorithm is an executable program that runs on the target hardware and is download via DFUSec to the board using the LPC18xx/43xx's DFU boot capability. Each programming algorithm has unqiue code for handling the memory it will program. To create a new programming algorithm requires the following steps: Download the DFUSec programming API examples (here). This provides the DFU streaming code that calls the programming API, several reference drivers (emulated IRAM, internal FLASH, SPI FLASH), and several projects to build an executable programming algorithm image. The examples require the LPC18xx CMSIS library attahced below. Although the example builds inside the LPC18xx CMSIS source tree, the generated binaries should executed on the LPC43xx device (as it's using the M3 instruction set) with common peripherals. Write a new driver for the new memory type with the supported API functions Compile the driver with the DFU streaming code to get a programming algorithm executable in binary form Using the DFUSec RAW/HDR mode tab, generate a binary with a header attached to it Programming API functions The dfusec_programming_api.h header file contains the function prototypes and shared data structures that must be developed for the DFU streamer code driver. The driver requires one global function that initializes the non-volatile memory interface and device and prepares the data structure that defines the non-volatile's devices memory regions and callback functions. The structure provides five additional functions (via indirect calls) that handle region erase, full erase, program, verify, and address check.Not all of these functions are required to do something. Programming API - algo_flash_init() function The first function that needs to be provided is the algo_flash_init() function. This function is called by the DFU streamer to initialize the non-volatile memory device, return the pointer and size of the DFU streaming buffer, and return the FLASH configuration structure and callbacks.The function has the following prototype:/* Initializes device programming capability */ DFUPROG_REGION_T *algo_flash_init(void **buffer, int32_t *buffer_size); style="color:rgb(100, 100, 100);font-family:Arial, sans-serif;font-size:12px" The buffer size must be a multiple of 64 bytes (DFU max packet size) typedef struct {     int32_t num_regions; /* Number of program regions on the device */     /* Buffer should be 32-bit aligned */     void *buffer;     /* This must be a minimum of 64 bytes or DFU max packet size and must        be a factor (1x, 2x, 3x, etc.) of max packets size */     uint32_t buffer_size;     const PROGALGOS_T *pprogalgos;     const DFUPROG_REGZONE_T *pregions; /* Address and region size array */ } DFUPROG_REGION_T; /* Function pointer types and function array */ typedef int32_t (* progalgo_flash_erase_region) (uint32_t, uint32_t); typedef int32_t (* progalgo_flash_erase_all) (void); typedef int32_t (* progalgo_flash_write) (uint32_t, uint32_t); typedef int32_t (* progalgo_flash_verify) (uint32_t, uint32_t, uint32_t); typedef int32_t (* progalgo_verify_range) (uint32_t, uint32_t); typedef struct {     progalgo_flash_erase_region erase_region;     progalgo_flash_erase_all    erase_all;     progalgo_flash_write        write;     progalgo_flash_verify       verify;     progalgo_verify_range       vrange; } PROGALGOS_T; Shared DFU streamer programming info structure /* Programming info received from DFUSec for a specific step */ #define DFUPROG_VALIDVAL 0xDB001843 typedef struct {     int32_t stepnum;         /* Step number, 0 - 9 */     uint32_t imagesize;      /* Size of image in bytes */     uint32_t address;        /* Address to start programming of image or start of erase */     int32_t regionsize;      /* Size of region to erase for 'eraseregion' */     int32_t eraseregion;     /* Erase region flag, will erase region if !0 */     int32_t erasefulldevice; /* Erase full device if !0 */     int32_t parameter;       /* Optional parameter value */     uint32_t validatetag;    /* Must be value of DFUPROG_VALIDVAL */ } DFUSEC_PROGINFO_T; extern DFUSEC_PROGINFO_T dfusec_proginfo; Building the programming algorithm The currently available pre-configured projects for building the programming algorithms are only available for the Keil uVision4 toolchain. To build the project with your driver, open one of the pre-configured projects and replace the file under the DFUSec_programming_algorithm group with the new driver. Click build to compile and link the image. The final result of the build cycle will be a binary image with a .bin extension. Adding UART log output support to the programming algorithm LPC18xx/43xx DFUSec programming API tool Build date: Jul 19 2012:15:03:24 Initializing USB interface Initializing DFU Connecting USB stepnum         = 0 imagesize       = 4724 address         = 10080000 regionsize      = 00004000 eraseregion     = 0 erasefulldevice = 0 validatetag     = db001843 Program cycle complete Appending a header to the programming algorithm binary The final step in preparing the programming algorithm for use with the DFUSec tool is to append a boot header to the binary file generated in the previous step. The DFUSec tool cannot boot the binary directly and requires this header. To generate the header, run the DFUSec tool and click on the HDR/RAW modes tab. For the binary box, select the .bin file to create the header for. Then click the "Generate binary file with header" button to generate a new file. A new file will be created in the same directory as the .bin file with the .hdr extension. This .hdr file is you programming algorithm file that should be used with the Algo box in the Program mode tab with DFUSec.
View full article
Introduction I get asked lots of questions on how to build and deploy the kickstart loader and S1L to a new LPC32x0 based board. This topic will go through the procedure step-by-step for the FDI3250 and the PHY3250 boards on how to build the tools and program them to the board. It will also explain the things you need to change for a new board. The Phytec and FDI boards were chosen for this topic because they differ in the type of DRAM (SDR vs DDR), NAND device page size (small page vs large page), and primary bootloader deployment method (serial vs JTAG). The Embedded Artists board is also available, which provides a serial deployment method with DDR and large page NAND FLASH. To get started, you will need a LPC32x0 based development board, the v2.01 release of the LPC32x0 Common Driver Library (CDL), a JTAG debugger (FDI3250 board), serial cable(s) for the board, and the CodeSourcery Lite GNU toolchain. LPC3250 v2.01 CDL -> attached. CodeSourcery toolchain Future Designs (FDI) LPC3250 based board Phytec LPC3250 based board LPC32x0 bootloaders installation overview The LPC32x0 CDL contains some basic examples, CPU startup code, board startup code for supported boards, basic drivers, bootloaders, and utilities for deploying the bootloaders into NAND FLASH, a serial EEPROM, or via the serial port. These bootloaders somehow need to be installed on the board. For development boards, it's possible to completely reprogram the board regardless of the boot devices state, if UART 5 is connected as the default bootup UART. This allows a tool called the serial loader tool to be used to download and program the boot device without the need for a JTAG debugger. If UART 5 isn't the default boot UART (or is not available at boot time), the boot device needs to be programmed via a JTAG unit or other method. A lot more information related to the LPC32x0 boot process can be found in the LPC32x0 User's guide. More information about the LPC32x0 boot process, the serial loader, and the startup code in the CDL can be found in the bottom of the page. The Phytec board uses UART 5 as the default boot UART and will use the serial loader tool to setup the board's initial bootloader. The serial loader tool only works with UART 5 on the LPC32x0 devices, as UART 5 is the only UART supported for boot up in the LPC32x0's boot ROM. The FDI board uses UART 1 as the default boot UART. Because UART 1 is not used by the boot ROM, it cannot be used with the serial loader tool. Instead, the bootloader software will be deployed to the board with the J-Link Lite LPC Edition JTAG debugger. The J-Link Lite LPC Edition is a low-cost JTAG debugger for LPC devices included with the FDI board. The Future Designs board included a LPC Edition of the J-Link Lite JTAG debugger. This debugger will be initially used to burn the kickstart loader and S1L? into the board's NAND FLASH. To use the debugger, first download the J-Link software from Segger's website at http://www.segger.com/cms/jlink-software.html. Install the software per the documentation and verify that the debugger can communicate with the board. J-link Commander doesn't requires a license to run with the LPC Edtition. Bootloaders and burners The CDL offers several bootloader options and a number of methods for deploying a bootloader to your board. There are several bootloader concepts involved here that are much better explained in the CDL startup code documentation. Burners A burner is an application that resides in the LPC32x0's memory and burns an image in another location into memory into the boot device on the board. The boot device may be NAND FLASH, a serial EEPROM or FLASH, or even NOR FLASH. The CDL contains 2 types of example NAND burner applications - MLC and SLC and burner applications for NOR FLASH (Phytec) and serial FLASH (Phytec). When burning an image to be booted from NAND FLASH, the MLC version must be used for the boot ROM to NAND load step. For all other NAND boot types, the SLC version must be used. Kickstart and Stage 1 applications The kickstart and Stage 1 applications are the common terms used with the LPC32x0 when talking about booting the LPC32x0. A kickstart (loader or bootloader) refers to a simple bootloader that is loaded and booted from the boot ROM which has the primary purpose of loading and booting another image. Any image loaded and booted via the LPC32x0 boot ROM has a size limit of about 54K, or 15.5K if booting from small page NAND FLASH. The kickstart loader always loads into IRAM at address 0x08000000. The kickstart loader usually performs some basic board functions such as initializing DRAM, clocks, GPIOs, etc. If the stage 1 application needed by the kickstart loader needs to be located in DRAM, the kickstart loader must initialize it prior to loading it. A stage 1 applcation is an application that is loaded by the kickstart loader. The stage 1 application can be a Linux kernel, 3rd party bootloader, simple binary, or any other piece of code. The stage 1 application has no size limit and can be loaded anywhere in memory. Example stage 1 applications include u-boot, the CDL examples, the Stage 1 Loader (S1L), or eboot. The S1L application is commonly used as the stage 1 application with available 3rd party development boards, but it isn't needed. It should be noted that the kickstart and stage 1 application concepts don't really apply to the LPC32x0 when booting from NOR FLASH, although a version of the kickstart loader and S1L are available for the NOR FLASH on the Phytec board that maintain the original approach when setting up to boot u-boot from NOR FLASH. Depending on what you need, the best approach may vary. The table below helps explains different approachs to handling the bootloaders and application load. Boot method Best approach Booting an application > 54K with large page NAND FLASH Use a kickstart loader smaller than 54K that configures DRAM and clocking. Kickstart loader loads stage 1 application from NAND into DRAM and starts it. Kickstart loader is in block 0. Stage 1 application is in block 1 and on. Booting an application <= 54K with large page NAND FLASH Application can be stored in NAND block 0. Booting an application > 15.5K with small page NAND FLASH Use a kickstart loader smaller than 15.5K that configures DRAM and clocking. Kickstart loader loads stage 1 application from NAND into DRAM and starts it. Kickstart loader is in block 0. Stage 1 application is in block 1 and on. If the kickstart loader image cannot be built in under 15.5K, move the clock setup into the stage 1 application. Booting an application <= 15.5K with small page NAND FLASH Application can be stored in NAND block 0. Booting from serial EEPROM/FLASH Use a kickstart loader smaller than 54K that configures DRAM and clocking. Kickstart loader loads stage 1 application from the serial EEPROM/FLASH into DRAM and starts it. Kickstart loader is at the start of the EEPROM/FLASH. Stage 1 application isafter kickstart loader. Booting from NOR FLASH NOR FLASH can be directly executed from and doesn't require pre-loading, so the kickstart/stage 1 application concepts don't apply. Booting from the serial port The image must always be 54K or less and loads into IRAM at address 0x08000000. Using burners to place bootloaders into the boot device The burners are applications that simply burn another image into the boot device for the board. The CDL breaks up the burners into a kickstart burner and a stage 1 application burner. The kickstart burner places the kickstart application as per the table below. Kickstart burner - NAND Places kickstart loader into block 0 of NAND using the MLC NAND controller. Sets up the necessary boot information (ICR) for NAND boot the boot ROM needs. Kickstart burner - SPI EEPROM/FLASH Places kickstart loader into the start of a serial EEPROM/FLASH. Sets up the necessary boot information for SPI boot the boot ROM needs. Kickstart burner - NOR Burns a NOR verison of the kickstart loader into the start of NOR FLASH. Only needed if the conceptual kickstart/stage 1 application approach is used with NOR FLASH. The stage 1 application burner places the stage 1 application as per the table below. Stage 1 application - NAND Places stage 1 application into block 1 and on of NAND FLASH using the SLC NAND controller. Note that in all NXP applications, the MLC controller is currently only used for the boot ROM. Stage 1 application - SPI EEPROM/FLASH Places the stage 1 application into the the serial EEPROM/FLASH after the kickstart loader. Stage 1 application - NOR Places the stage 1 application into the the NOR FLASH after the kickstart loader. Only needed if the conceptual kickstart/stage 1 application approach is used with NOR FLASH. As an example, to burn the kickstart loader into NAND FLASH, the kickstart burner must be loaded first. Once it has been loaded, the kickstart loader is loaded into a different location in memory. The kickstart burner then initializes NAND FLASH and burns the kickstart loader into block 0. The kickstart burner varies slightly in how it works with JTAG and serial loader methods. For the JTAG method, the kickstart burner and loader must be loaded as 2 different programs. For the serial loader mthod, the burner application loads the loader via the serial port via the serial loader tool. The serial loader method is the preferred method, but may not be optimal for production systems. The entire process of burning the kickstart loader and stage 1 application has been covered before in the CDL bootloader topics. Once you have working verisons of the kickstart and stage 1 application burners, the kickstart loader, and the stage 1 application (S1L will be used in the examples following), you can use the Restoring the FDI3250 boot loaders  for the FDI board and the Restoring the PHY3250 boot loaders  for the Phytec board to get the images into the boards. Is S1L needed? S1L is an application usually loaded from the kickstart loader that allows other applications to be booted frmo SD cards, serial port, or NAND FLASH. It's also a very good tool for bringing up and testing new boards based on the LCP32x0. If you are developing a new LPC32x0 based board, the test functions built into S1L can be useful for testing DRAM and helping to locate possible DRAM configuration issues. If you are using or testing multiple operating systems (ie, WinCE and Linux), S1L can boot the u-boot and eboot loaders without alter NAND FLASH. The build procedure below assumes S1L will also be built and deployed. Building the burners, kickstart loader, and S1L Make sure you have the CodeSourcery Lite GNU tools installed and that you can run them from a CMD shell in Windows. Download and install the LPC32x0 v2.01 CDL and navigate to the 'software' directory in a CMD shell window. If you are usnig the Phytec board, type 'setenv phy3250 gnu 1' to setup the build system for the Phytec board. FDI board developers should use 'setenv fdi3250 gnu 1'. See below for the Phytec setup. You need to build 4 programs - the kickstart burner, S1L burner, kickstart loader, and S1L (from kick full) application. To build the programs, type 'make' in the following directories in the CDL. For the Phytec board, .\software\csps\lpc32xx\bsps\phy3250\startup\examples\Burners\nand_sb\kickstart (Kickstart burner for small page FLASH) .\software\csps\lpc32xx\bsps\phy3250\startup\examples\Burners\nand_sb\s1lapp (stage 1 application burner for small page FLASH) .\software\csps\lpc32xx\bsps\phy3250\startup\examples\kickstart\kickstart_sb_nand (Kickstart loader for small page FLASH) .\software\csps\lpc32xx\bsps\phy3250\startup\examples\s1l\s1l_from_kick_full (S1L for small page FLASH) You should get 4 images as follows:    * burner_kickstart_nand_small_block_gnu.bin (kickstart burner)    * burner_s1app_nand_small_block_gnu.bin (stage 1 application burner)    * kickstart_nand_small_block_gnu.bin (kickstart loader)    * s1l_from_kick_gnu.bin (S1L (stage 1 application)) For the FDI board, .\software\csps\lpc32xx\bsps\fdi3250\startup\examples\Burners\nand_lb\kickstart_jtag (Kickstart burner for large page FLASH) .\software\csps\lpc32xx\bsps\fdi3250\startup\examples\Burners\nand_lb\s1lapp_jtag (stage 1 application burner for large page FLASH) .\software\csps\lpc32xx\bsps\fdi3250\startup\examples\kickstart\kickstart_lb_nand (Kickstart loader for large page FLASH) .\software\csps\lpc32xx\bsps\fdi3250\startup\examples\s1l\s1l_from_kick(S1L for large page FLASH) You should get 4 images as follows:    * burner_kickstart_nand_large_block_jtag_gnu.elf (kickstart burner)    * burner_s1app_nand_large_block_jtag_gnu.elf (stage 1 application burner)    * kickstart_nand_large_block_gnu.bin (kickstart loader)    * s1l_from_kick_gnu.bin (S1L (stage 1 application)) Note that for the FDI board, there are elf files and bin files. The elf files are the burner applicaitons loaded via the JTAG debugger while the binaries are the payload applications to be used by the burner program (to be burned into NAND FLASH). See the FDI JTAG burn procedure for the FDI board and the Phytec serial loader burn procedure for the Phytec board for information on how to use these images. Modifying the CDL/BSP for a new target board The burners, kickstart loader, and S1L can all be fairly easily to another board. In most cases, the porting process requires grabbing an existing BSP as a reference, modifying compile time defines for the board specific changes, and changing a little bit of existing code to support the new board. As most of the code is common to the burners, kickstart loader, and S1L - a change in one place usually applies to everything in the BSP. The easiest place to start is to copy an existing BSP which has the supported features closest to the new board renaming the BSP to something else. The table below shows the current board BSPs in the CDL and the default support they provide. The BSps are located in the .\software\csps\lpc32xx\bsps\ directory. phy3250 (Phytec board) Supports 64MB single data rate (SDR) SDRAM (32-bit configuration only), small page NAND FLASH, and UART 5 as the default boot UART, serial loader tool is used to burn images into the board fdi3250 (FDI board) Supports 32MB double data rate (DDR) SDRAM , large page NAND FLASH, and UART 1 as the default boot UART, JTAG must be used to burn images into the board ea3250 (Embedded Artists board) Supports 64MB double data rate (DDR) SDRAM , large page NAND FLASH, and UART 5 as the default boot UART, serial loader tool is used to burn images into the board Example: If I was developing a new LPC3250 based board that uses 64MB DDR memory, large page FLASH, and has UART 2 as the default UART port, I would make a copy of the fdi3250 BSP in the CDL's bsps directory, maybe renaming it to 'myboard3250'. If possible always start with an existing known working board BSP instead of using the generic BSP. From the example above, the 'myboard3250'BSP will be used as the new target board for the example. The myboard3250 board has the following differences over the FDI3250 board.    * Uses 64MB of DDR instead of 32MB    * Uses 512MB of large page NAND FLASH instead of 256MB What the new board will do The new myboard3250 design will be used for running the Linux operating system. The system will boot from NAND FLASH and should boot into u-boot as soon as possible. As this is a new board, S1L can be used to temporarily setup and provide early board testing before deploying u-boot. S1L can either be permanently/temporarily setup as the application to boot from the kickstart loader or can be directly loaded from the serial port. We'll go through each option below. Optional 1: Loading S1L directly via the serial port S1L can be directly loaded into IRAM and executed via the serial port - if it's less than 54K in size. If you don't want to make a customer version of the tools for an S1L based configuration, but still want to do some initial DRAM and NAND testing with S1L before trying u-boot, building the IRAM version of S1L is the way to go. The Optional 2: Using S1L to load and run u-boot The currently supported development boards use the kickstart loader to load and run S1L. S1L in turn loads and runs u-boot. S1L runs inside of IRAM. This option is typical of current development boards. End use case for the bootloaders Ideally, we would like to have the LPC32x0 boot ROM boot directly into u-boot. Because u-boot is greater than 64MB and resides in SDRAM, we need to use the kickstart loader to initially boot the board from NAND block 0 (into IRAM) and then chain load the u-boot loader into SDRAM from NAND block 1. This requires a kickstart burner application, a burner for u-boot (u-boot is the stage 1 application in this case), and a kickstart loader that loads the stage 1 application (u-boot) in SDRAM. Although this seems like the best place to start for a new board, it might be easier to start with S1L with either option 1 or 2. S1L has some built-in utilities for testing and helping to determine DRAM related issues. BSP configurable items for startup code For the v2.01 release of the CDL, some of the items that can be changed for the BSP include NAND timing and geometry, SDRAM type and timing, supported UARTs, locations of where the stage 1 application is stored in NAND FLASH and loaded in memory, and more. A complete list of items can be found in the CDL startup code documentation. The code typically also requires a few code changes to work correctly on new boards. DRAM modifcations Setting up DRAM requires no new code - only the defines for DRAM timing and geometry we inherited from the copied code need to be modified to support the new board's devices. Locate the dram_configs.h file in the BSP and open it. Each define has a comment associated with it. Selecting the right values for these defines will allow the generic DRAM configuration code to properly configure the SDRAM. For the new board, I made the following change. If the part on the new board had different timing requirements, RAS/CAS latencies, a different mode word layout, or other differences, I would have to change a lot more. /* Number of rows, columns, and bank bits for the SDRAM device */ #define SDRAM_BANK_BITS 2 /* 2 bits = 4 banks, 1 bit = 2 banks */ //#define SDRAM_COLS 9 // Deleted this line #define SDRAM_COLS 10 // Added this line #define SDRAM_ROWS 13 #endif NAND driver modifcations part 1 The copied BSP already includes large page NAND FLASH drivers for the SLC and MLC. Several small changes need to be added to make these drivers work for the new board. NAND timing values need to be setup for the MLC and SLC controllers. These timings, in clocks based on the HCLK rate, need to be configured specifically for the NAND device and selected system clock rates. Once these are correctly setup, all of the applications that use NAND support will use these timing values. The values are shown below. /* Timing setup for the NAND MLC controller timing registers. These    values can be adjusted to optimize the program time using the    burner software with NAND. If your not worried about how long it    takes to program your kickstart loader (or if your not using a    kickstart loader), don't worry about changing these values. If you    need to burn the kickstart, this can be speeded up by tweaking    these values. See the 32x0 user's guide for info on these    values. These should be programmed to work with the selected bus    (HCLK) speed - because the burn image is usually small (under 54K),    there really is not reason to change these values. */ #define MLC_TCEA_TIME   0x3 #define MLC_TWBTRB_TIME 0xF #define MLC_TRHZ_TIME   0x3 #define MLC_TREH_TIME   0x7 #define MLC_TRP_TIME    0x7 #define MLC_TWH_TIME    0x7 #define MLC_TWP_TIME    0x7 /* Timing setup for the NAND SLC controller timing registers. On    systems using NAND, these values effect how fast the kickstart    loader loads the stage 1 application or how fast the S1L    application handles NAND operations. See the 32x0 user's guide for    info on these values. These should be programmed to work with the    selected bus (HCLK) speed. */ #define SLC_NAND_W_RDY    14 #define SLC_NAND_W_WIDTH  0x5 #define SLC_NAND_W_HOLD   0x2 #define SLC_NAND_W_SETUP  0x1 #define SLC_NAND_R_RDY    14 #define SLC_NAND_R_WIDTH  0x4 #define SLC_NAND_R_HOLD   0x2 #define SLC_NAND_R_SETUP  0x1 For the myboard3250 board, the NAND timings are unchanged. NAND driver modifcations part 2 Each NAND device has a specific geometry associated with it used to setup access the device's blocks, pages, etc. This geometry needs to be supplied for each board.  To setup this geometry, edit the board_mlc_nand_lb_driver.c and board_slc_nand_lb_driver.c files init() functions. If you only support one device, you can directly setup the values for the nandgeom structure based on the device's values. The original code inherited for this board checked several different NAND ID's and picked a geometry based on that configuration. For the myboard3250 board, only 1 configuration as shown below is supported. nandgeom.num_blocks      = 8192; nandgeom.pages_per_block = 64; nandgeom.data_bytes_per_page = 2048; nandgeom.spare_bytes_per_page = 64; nandgeom.address_cycles = 5; Changing the CPU clock speed The default CPU clock speed, bus (HCLK) speed, and peripheral (PCLK) speed can be setup in the setup.h file by altering the values shown below. The values - 266MHz CPU clock, 133MHz bus clock, 13.325MHz PCLK - are unchanged from the copied clock rates. /* CPU speed in Hz */ #define CPU_CLOCK_RATE 266000000 /* HCLK bus divider rate - this can be 1, 2 or 4 and defines the HCLK   bus rate in relation to the CPU speed. This can never exceed   133MHz. DDR systems only work with a value of 2 or 4. */ #define HCLK_DIVIDER 2 /* PCLK divider rate - this can be 1 to 32 and defines PCLK bus rate    in relation to CPU speed. This value should be picked to allow the    PCLK to run as close as possible to 13MHz. Slightly exceeding 13Mhz    is ok */ #define PCLK_DIVIDER 20 Modifying GPIO states and pin muxing GPIO states and pin muxing can usually be delayed until the main application starts. If any changes need to be made to pin muxing or GPIO states that should be done as soon as possible after boot, they can be made in the gpio_setup.c file. No changes will be made for this new board. Default UART selection The default UART used in S1L, kickstart, and the burner applications can be setup in the misc_config.h file. The FDI board uses UART1 as shown below. Only UART5 will work with the serial loader. Setting anything other than UART5 will allow UART output to occur as normal otherwise on that UART. /* UART device and rate, supported UART devices are UART3, UART4,    UART5, and UART6 */ #define UARTOUTPUTDEV UART1 #define UARTOUTPUTRATE 115200 #define UART_IS_HIGHSPEED Setting load addresses for the burner applications and kickstart loader The burner applications need to know where to load an image to be burnt into the boot device at some location in memory. Likewise, the kickstart loader needs to know where the stage 1 application needs to be loaded into memory. The addresses and sizes for the loader are specified in the misc_config.h file. The defaults are unchanged since S1L plans on being used. #define BURNER_LOAD_ADDR 0x8000 #define BURNER_LOAD_SIZE    (54*1024) #define STAGE1_LOAD_ADDR 0x8000  /* Load at address 0x8000 */ #define STAGE1_LOAD_SIZE 0x20000 /* Load 128k */ The above values say that the burner applications (kickstart and stage 1 app burners) will load their image to be burned into NAND FLASH at address 0x8000 with size 54K and 128K, respectively. S1L is built to run at address 0x8000 and fits in under 128K. If I build the kickstart and S1L burners, the kicstart laoder, and S1L with these settings, the load addresses will be as follows:    * Kickstart and S1L burners load the image to burn into the boot device at address 0x00008000    * Kickstart loader loads and runs at adress 0x00000000 (will always run at address 0x00000000 unless built for NOR FLASH)    * S1L loads and runs at address 0x00008000. This is where the kickstart loader loads and places S1L. 128K will always be loaded regardless of the actual size if S1L stored in NAND by the stage 1 application burner. Making a configuration for u-boot without S1L If I wanted to make a bootloader configuration with the burners to have the kickstart loader directly load and run u-boot instead of S1L, I would make the following changes: #define BURNER_LOAD_ADDR 0x80000000 #define BURNER_LOAD_SIZE    (54*1024) #define STAGE1_LOAD_ADDR 0x81F8000  /* Load at address 0x81F80000 */ #define STAGE1_LOAD_SIZE 0x40000 /* Load 256k */ Once I rebuild the burners and the kickstart loader (S1L isn't used, so it isn't built), I can use the kickstart burner with the kickstart loader and the stage 1 application burner with the u-boot.bin file. u-boot for the FDI board is normally built to load and run at address 0x81F80000. With the above changes, the following is done instead:    * Kickstart and S1L burners load the image to burn into the boot device at address 0x80000000 (larger DRAM area, won't fit in IRAM)    * Kickstart loader loads and runs at adress 0x00000000 (these values have nothing to do with the kickstart loader address)    * Kickstart loader loads stage 1 application (u-boot) into address 0x81F80000. The load size is 256K regardless if u-boot is actually smaller. S1L configuration changes If you do use S1L, look at the settings in the s1l_cfg.h file. The settings in this file are used to set the default S1L prompt string, S1L startup message, and the S1L NAND application storage area (used with the nsave, nload commands). Wrapup The CDL startup code documentation covers the startup code and it's various configurations very well. If possible, use a known working BSP in the CDL to start with when developing a new BSP for you board. The upcoming v2.02 release of the LCP32x0 CDL will have improved common code layout with no more board specific DRAM and NAND code, which should help a lot with porting the startup code to new boards.
View full article
The LPC247x microcontrollers have integrated LCD controllers. These microcontrollers support Super-Twisted Nematic (STN) and Thin-Film Transistor (TFT) graphic display panels up to 1024 x 768 pixels, from monochrome up to 24-bit true-color, and with hardware cursor support. This capability is ideal for point-of-sale, industrial, and medical/diagnostic applications. Further, the LCD controller supports Windows CE data formats. Below are LPC247x-based design examples for a selection of common LCD daughter cards. The designs use an LPC247x Validation Board to carry LPC247x-related signals to the LCD daughter card. Each daughter card provides connectors to the universal LCD connector on the LPC247x Validation Board. Also included are LPC247x configuration codes (IAR EWARM), schematics, gerber files, and BOM's for each LCD module. LCD Technology Color Depth Resolution Manufacturer Model STN 4-bit B/W QVGA (320x240) Optrex DMF50840 TFT 18-bit WVGA (800x480) Hantronix HDA700L TFT 24-bit QVGA (320x240) Innolux PT035TN01V6 ADTFT 24-bit TFT QVGA (240x320) Sharp LQ035Q7DB03 Block Diagram Products Below are recommended microcontrollers for use in implementing this design to a system. Comparison Table Product Flash SRAM External Bus 10/100 Ethernet USB 2.0 CAN LCD Controller SD/MMC Package(s) LPC2470 0KB 98KB Full 32-Bit 1 1 2 Y 1 LQFP-208 TFBGA-208 LPC2478 512KB 98KB Full 32-Bit 1 1 2 Y 1 LQFP-208 TFBGA-208 LCD Daughter Cards Optrex LCD Board Datasheet Optrex LCD Board Schematics Optrex LCD Board Example Code Optrex LCD Board Gerber Files Optrex LCD Board Bill of Materials Click here to download Hantronix files (attached) Hantronix LCD Board Datasheet Hantronix LCD Board Schematics Hantronix LCD Board Example Code Hantronix LCD Board Gerber Files Hantronix LCD Board Bill of Materials Click here to download Innolux files (attached) Innolux LCD Board Datasheet Innolux LCD Board Schematics Innolux LCD Board Example Code Innolux LCD Board Gerber Files Innolux LCD Board Bill of Materials Click here to download Sharp files (attached) Sharp LCD Board Datasheet Sharp LCD Board Schematics Sharp LCD Board Example Code Sharp LCD Board Gerber Files Sharp LCD Board Bill of Materials More Information Click here to download LPC247x Validation Board (attached) LPC247x Validation Board Schematics LPC247x Validation Board Gerber Files LPC247x Validation Board Bill of Materials
View full article
Even when new, NAND devices may have bad blocks. A bad block may be a block that has a bit failure or cannot erase properly. Vendors typically provide a pre-built map of known existing bad blocks for each part. The factory bad blocks are marked with by a non-0xFF value in the factory bad block marker offset on the first page of each block. For small page devices, this factory offset is usually bytes 516 and 517 in a page. For large page devices, this factory offset is usually 2048. You can get a list of bad blocks by scanning the first page in each block on a NAND device and checking if the value in the factory bad block marker offset in the data is a non-0xFF value. The SLC NAND controller and all NXP developed software for the SLC NAND controller (Linux, WinCE, or standalone) uses the same locations as the factory markers for bad block marking and detection. Because of this, no special processing or relocation of the bad blocks is needed for a NAND device. The MLC NAND controller can only read and write data with ECC in 528 byte chunks. Because of this, the data and ECC values are interleaved in the NAND page. The factory bad block markers with this scheme cannot be used. If the MLC NAND controller must be used for anything besides chip boot, the factory bad block markers need to be recorded and moved prior to writing data to the device. In the case of block 0, which is use for NAND boot on the LPC32x0 using the MLC controller, no bad block detection or marking is used in any NXP software. This is because NAND device manufacturers typically guarantee the data reliability of block 0 for a limited number (ie, 1000) of write cycles.
View full article
Introduction NXP Semiconductors provides a free Common Driver Library (CDL) software package for use with LPC32xx microcontrollers. This software package provides a generic set of drivers which highlight how specific peripherals and functions work. This software package also comes bundled with Board Support Packages (BSPs) for the Embedded Artists, Future Designs, and Phytec development boards which feature the NXP LPC3250 microcontroller. The BSPs includes startup code and examples which can be easily built and executed using any of the supported tool chains. Combined, the LPC32xx CDL and BSPs allow you to jump-start your LPC32xx microcontroller development. This software package is maintained by NXP Semiconductors and is periodically updated with issue fixes or new features. Features The free LPC32xx CDL and BSPs from NXP Semiconductors support the following features: Various drivers and header files for the LPC32xx microcontroller Common software for LPC32xx microcontrollers System startup code and various examples for the Embedded Artists, Future Designs, and Phytec LPC3250 development boards Tool-less software deployment options when used with the Stage 1 Loader (S1L) Support for IAR Embedded Workbench, Keil uVision4, ARM Realview 3.x, and GNU CodeSourcery tool chains Free for use with NXP LPC32xx microcontrollers Documentation LPC32x0 CDL and BSP Startup Code Documentation   Software The LPC32xx CDL and BSPs are free to NXP customers for unlimited use with the NXP LPC32xx microcontrollers. By downloading or using the LPC32xx CDL or BSPs, you agree to use it solely with these NXP microcontrollers. LPC32xx CDL and BSPs V2.01 Pre-Built Bootloaders for the Embedded Artists Board V2.01 Pre-Built Bootloaders for the Future Designs Board V2.01 Pre-Built Bootloaders for the Phytec Board V2.01   More Information Disclaimer This software is provided AS-IS by NXP Semiconductors. NXP Semiconductors does not support or warrant the software contained herein for any purpose other than for informational use. References Embedded Artists Future Designs PHYTEC America ARM CodeSourcery IAR Keil
View full article
The LPC1500 microcontroller series are optimized for fast, easy, and high-precision motor control. Incorporating all the features required for high-accuracy sensored and sensorless motor control, the LPC1500 enables simultaneous control of multiple motors in highly flexible configurations. Based on the ARM® Cortex™-M3 processor, the LPC1500 series has two 12-bit, 12-channel, 2 Msps ADCs and an on-chip quadrature encoder interface (QEI) to enable highly accurate control of both sensored and sensorless motor combinations. With four on-chip comparators enable fast-response over-current/voltage monitoring and protection and four flexible SCTimer/PWM timers to provide up to 28 PWM channels in a tightly coupled analog and timing subsystem with minimal load on the CPU, the LPC1500 are ideal for use with a wide range of brushless DC (BLDC) motors, permanent-magnet synchronous motors (PMSM), and AC induction motors (ACIM) commonly found in products such as large home appliances, HVAC, industrial pumps and generators, and more. They are also well suited for industrial applications requiring high-precision data sampling and real-time control, such as digital power and instrumentation. The LPC1500 microcontrollers are fully supported by the LPC software ecosystem and an extensive collection of tools, drivers and middleware. With ultra-efficient motor control firmware, easy-to-use GUI-based tuning tools, and two new motor control solution kits, NXP's LPC1500 microcontrollers simplify evaluation and development of motor control applications, without requiring deep motor control experience.   Features of LPC1500 : 72 MHz ARM Cortex-M3 processor Upto 256 kB on-chip flash programming memory Upto 36 kB SRAM 4kB EEPROM Memory Protection Unit(MPU) USB/SPI/I2C drivers DMA drivers C-CAN drivers Four SCTimers/PWM Two 12-bit ADC and One 12-bit DAC   Brushless DC Motor (BLDC) Solution The LPC1549 Brushless DC motor control solution helps you get started with motor control protoyping immediately.  It utilizes the SCTimer/PWM available on the LPC1549 MCU for the motor operation.The SCTimer/PWM combines the features of a timer and a state machine making possible to develop sophisticated solutions in the digital control field. The project is implemented on the LPC1549 BLDC Motor Control Kit, which includes an LPC1549 LPCXpresso board. The joystick present on the motor control kit is used to control the speed and direction of the motor. It is possible to define a more complex sequence of events, having the SCTimer/PWM evolve autonomously through the state machine over time, in response to the time-based or I/O defined events. This typically implies that less CPU interventions are needed, since the SCTimer/PWM is able to handle most of the control sequence in hardware. Using the SCTimer/PWM also reduces the code size. The firmware package contains the project implemented in Keil IDE. The package also contains an application note which decribes the motor control operation using the SCTimer/PWM in detail.     Permanent-Magnet Synchronous Motor (PMSM) Control Solution The LPC1549 PMSM motor control solution provides a Field-Oriented Control (FOC) example to get you started with motor control prototyping. This example utilizes the QEI feature on the LPC1500 to monitor the position and velocity of the motor for both sensor and sensorless modes. The additional advanced features of the LPC1500 including the SCTimer/PWM and high speed ADC ensures easy and reliable control of time critical peripherals, and a mechanism for sychronization of the ADC's with the PWM for exact timing of the sample moments. FOC is a more advanced approach where each phase is driven sinusoidally and permanently powered so the magnetic field inside the motor is regulated to the most optimal value.  The project is implemented on the LPC1549 PMSM Motor Control Kit, which includes an LPC1549 LPCXpresso board. The firmware package contains the project implemented in IAR IDE. The package also contains an application note which decribes the motor control operation using the QEI and SCTimer/PWM in detail. This solution also comes with a GUI interface, which is developed to tune motor parameters in FOC firmware.                                           FOC Control Block Diagram                                                      GUI Interface   Motor Control Solution Overview Video Useful Links : LPC1500 MCU Product Pages LPC1549 LPCXpresso Board LPC1549 BLDC Motor Control Kit  (OM13068) LPC1549 PMSM Motor Control Kit (OM13067) LPC1500 Datasheet LPC1500 User Manual
View full article