News
  Home
  About...
  Description
  Downloads (ARM)
  License
  Microchip PIC24/dsPIC
  Freescale HCS08
  ARM Cortex-M3
  USB bulk firmware
  USB firmware upgrader
Nano-X GUI library and TNKernel
FIFO or DMA?
  VxWorks and LPC2106
  Debugging VxWorks BSP for ARM
  YDT - Debug Terminal
  YED - Programmer's Notepad
 

USB Firmware Upgrader

Download:
 
usb-fwu-1-0-1-lpc214x.zip
This ZIP archive contains :
 
  • The USB Firmware Upgrader source code
  • The firmware example source code (with TNKernel v.2.1)
  • The projects (a Philips LPC2146 microprocessor) for the Rowley CrossWorks Studio(GCC) 1.5, IAR ARM v.4.39, GCC 3.4 (4.10), ARM ADS 1.2, ARM RealView 2.2, Keil RVC v.3
  • The LPC2146 reference board's schematic for the Firmware Upgrader.
firmware-loader.zip This ZIP archive contains a file FirmwareLoader.exe - the Firmware Loader Demo PC application for the MS Windows(c) 2000/XP

 

firmware-loader-src.zip

new.png



This ZIP archive contains a full source code for the file FirmwareLoader.exe (MFC application; version for Microsoft (r) Visual Studio (r) 2008 )

  The USB Firmware Upgrader is a standalone program for the Philips LPC214x microcontroller, which allows to download the firmware (an application program) to the microcontroller's flash using an USB.
  This is very useable for the field/customer future firmware upgrades.

1. Firmware Upgrader program

  The Firmware Upgrader is placed into the FLASH at an address range 0x0000000 - 0x00001FFF (8 KBytes). After the hardware reset, the device always starts with the Firmware Upgrader.
 The Firmware Upgrader performs 3 base functions:
     - startup
     - read firmware from FLASH
     - write firmware to FLASH

 The Firmware Upgrader program's source code is placed in the directory /LPC214X_USB_FWU. 

1.1 Firmware Upgrader startup

   After a  hardware reset, the Firmware Upgrader checks a request (mark) from the firmware to operate (read/write firmware) - the request is defined as a value 0x12345678 at the address 0x40000000 and a value 0x43211234 at the address 0x40000004 in the RAM.
   If a request does not exists, the Firmware Upgrader checks a firmware crc and length.
   If a crc is o.k. and a firmware size is valid, the firmware is started and the Firmware Upgrader is terminated. Otherwise, the Firmware Upgrader works as a standalone program.

1.2 Read firmware from FLASH

   The host software sends a request (the Control EP0 Vendor Class Request is used)  to obtain a firmware information - product_id, version, length (size), crc.  The data part of the request is used to transfer an information to the Host.
   Then the Host software sends a request to read the firmware (the Control EP0 Vendor Class Request is used).
   The device sends the firmware by the IN Bulk Endpoint EP2 (0x02). A data transfer unit has the size 4096 bytes.
   If a crc is o.k. and the firmware size is valid, the firmware is started and the Firmware Upgrader is terminated. Otherwise, the Firmware Upgrader works as a standalone program.

1.3 Write firmware to FLASH

   The Host software sends a firmware information (product_id, version, length (size), crc) to the device by the Control EP0 Vendor Class Request. A data part of request is used to transfer an information.
   Then the device performs an erasing of the flash sectors according to the firmware length (size) and sends a message to the Host about the flash ready to write. The IN Bulk Endpoint EP2 (0x02) is uses for this purpose.
   The Host sends a firmware to the device by the OUT Bulk Endpoint EP2 (0x82). A data transfer unit has the  size 4096 bytes. When a first firmware's unit is received (it starts at address 0x00002000 in the Flash), then a firmware info is placed at the beginning of the RAM reception buffer to be stored in the FLASH at the address range 0x00002000 - 0x0000200F.
   After the end of firmware's writing, the Firmware Loader checks a firmware's crc and sends the results of checking to the Host by the IN Bulk Endpoint EP2 (0x02).
   If a crc is o.k, the firmware is started and the Firmware Upgrader is terminated. Otherwise, the Firmware Upgrader works as a standalone program.

1.4 Interrupts vectors sharing

   An interrupt vectors are placed in the Flash. To share the Interrupt vectors between the Firmware Upgrader and a firmware (the user application) programs, the addresses of the interrupt handlers are placed at the reserved RAM locations:


  This is a part of the Firmware Upgrader's source code that handles the interrupts vectors (at the start address 0x00000000):

This is a part of source code to place interrupts vectors in RAM:

1.5 LPC214x Code Read Protection

   A code read protection is enabled by the programming the flash address location 0x1FC (User flash sector 0) with a value 0x87654321.
   The Firmware Upgrader has a special variable flash_pcell in the separate code segment .flashprot. A linker script defines this segment location at the address 0x1FC in the Flash.
   The Firmware Upgrader uses the Philips LPC21XX internal IAP commands to erase/write flash. It allows download a firmware by the USB when a Code Read Protection is turned on and the JTAG operations are forbidden.
   In the Firmware Upgrader's source code, a Code Read Protection is turned off for the debugging purposes.

2. Firmware (the user application) program

   A  Firmware program is placed in the FLASH at the start address 0x00002000.
   The address range 0x00002000 - 0x0000201C  is reserved for the information about a firmware, the start executing address of the firmware is 0x00002020:

Name Field Length (bytes) Flash Location Address
product id 4 0x00002000
version 4 0x00002004
length(size) 4 0x00002008
crc (CRC32) 4 0x0000200C

This is a part of the firmware startup code (this fragment is placed  in the FLASH at the start location 0x00002000):

   There are two firmware parameters which should be defined in the user source code - product_id and version. A firmware length and crc will be calculated automatically by the PC program at the writing firmware operation.

    A firmware program performs the switching to the Firmware Upgrader after the Host request (the Control EP0 Vendor Class Request is used for this purpose).
    A switching to the Firmware Upgrader has two stages:
    - setting the mark to the Firmware Upgrader about the firmware's request (a writing  the value 0x12345678 at the address 0x40000000 and the value 0x43211234 at the address 0x40000004 in the RAM).
    - a hardware reset by the watchdog.

   The TNKernel USB firmware example is placed in the directory /LPC214X_USB_APP. This example shows all the firmware program's specific stuffs (see above) and also performs (as payload) the sending data to the Host by the IN Endpoint EP2(0x82).

2.1. Firmware debugging

    To debug a firmware, the Firmware Upgrader program should be loaded in the FLASH. In this case, the Firmware Upgrader after a hardware initialization must immediately starts a firmware and terminates.
    For this purpose, in the file fwu.c (the Firmware Upgrader's source code) this line should be uncommented:

    When the RUN_FW_ALWAYS is defined, after the reset the Firmware Upgrader does not checks a firmware request and a firmware presence (crc & length) - the Firmware Upgrader makes the hardware initialization and immediately finishes the work (and the firmware will start).

3. USB VID and PID

   The firmware and the Firmware Upgrader should have a different USB PID. In this examples,
  - a dummy VID = 1237(hex) and PID = 1BCD(hex) are used for the Firmware Upgrader (see the file tn_usb_descr.c in the directory /usb_fwu).
  - a dummy VID = 1237(hex) and PID = ABCD(hex) are used for the firmware (see the file tn_usb_descr.c in the directory /usb_app).

4. Firmware Loader Demo (PC application)

    The Firmware Loader Demo is a PC application for the Microsoft (c) Windows (c) 2000/XP.

   Before using this program:

    - The Firmware Upgrader (fwu) must be placed into the Philips LPC214x microprocessor by an any suitable debugger/flash writer.
    - The device should be coupled to the Thesycon(r) USB demo driver (see a Chapter 5 in the USB Bulk Firmware description).
    - Then the user should download the firmware example (usb_app) into the device (a tab "Write Firmware") and couple the example  with Thesycon(r) USB demo driver.

   After that, the program is ready for the regular operation by the firmware (a tab "Regular Operation") or to read a firmware by the switching to the Firmware Upgrader (a tab "Read Firmware").
   When the program is switched from the firmware to the Firmware Upgrader and back (for the firmware reading/writing), the automatic USB reconnection occurs (you can see it as a messages blinking in the USB status line).

©2004, 2008 Yuri Tiomkin