BootROM
RM0082
834/844
Doc ID 018672 Rev 1
38.5.3 USB
boot
USB Boot refers upgrading of Flash memories (NAND and NOR) via USB. In USB boot,
BootROM programs PLL1 to 333 MHz and system to Normal mode i.e. ARM frequency at
333 MHz, initializes UDC Controller and initializes USB state machine to GET_CMD phase.
UDC supports 2 modes of operation i.e. Slave mode and DMA mode, in SPEAr300
BootROM UDC is configured in slave mode.
After initializing, BootROM waits for a 12 byte command on BULK Out End point 2 from the
USB host, the format for 12 byte command is as follows.
After receiving 12 bytes BootROM decodes 12 byte command, changes the USB state
machine to GET_DATA phase and then waits for expected number of bytes from Host.
BootROM receives the data and stores it into load address specified in the command, once
all the data is received, BootROM changes the USB state machine to EXEC phase and
decodes the type of data, if the received data is DDR Driver, then BootROM jumps to
loadaddress, executes the DDR driver and jumps back to BootROM. Now that the DDR is
initialized, BootROM changes the USB state machine again to GET_CMD phase. Now
same process is repeated again, but this time type of data received is FIRMWARE, the
FIRMWARE is capable of receiving data from Host, Flash upgrade capable etc. After
receiving the FIRMWARE, BootROM jumps to it in DDR.
The current version of BootROM uses the slave mode, because of limitation of SPEAr
architecture i.e. there is no Path from UDC DMA to access descriptors present in eRAM.
USB descriptors
As a part of enumeration process, several descriptors are exchanged. Details of these
descriptors are as follows: -
Table 744.
Command format
Byte 0
Type of Data
Byte 1 - 3
RESERVED
Byte 4 - 7
Size of Data
Byte 8 - 11
Load Address in RAM