Hi,
We have an AM1705 (456 MHz) on a custom board that is booting as Master from SPI Flash. The ROM Bootloader ID in the CPU is D800K005 and the .ini file below is used to generate an AIS binary that is approximately 260 kB in size. The AIS bin includes a custom UBL (User BootLoader) for our product.
The ROM Bootloader takes approximately 760 ms to parse the commands and copy data from the AIS file to SDRAM before jumping into the UBL. The SPI bus is configured to operate at 22.80 MHz and [AIS_SeqReadEnable] is used in the AISConfig.ini file.
I am trying to speed up the copying of data from SPI flash to SDRAM so that the UBL starts faster.
Increasing the SPI bus speed has no effect on the execution time. When looking at the SPI Clk on a scope it seems that the ROM Bootloader is reading in one byte from the SPI flash every 2 microseconds and that 4-byte word reads are performed at an interval of ~11 microseconds. This is the case even when the ROM Bootloader is executing a Section Load Command (0x58535901) to copy data from SPI Flash to internal SRAM or external SDRAM.
Some questions:
1) Is there any way to speed up the ROM Bootloader by reducing the delay between SPI flash reads when running the Section Load Command?
2) Why the delay of 11us between every 4-byte read?
3) I've seen some mention in the forum of a [FASTBOOT] option. Can it be used in some way to speed up the data copying?
4) Any other hints on how I can speed up the boot process?
Thanks in advance for any help or tips.
/ Michel
>>> The AISConfig.ini file
; Created by AISgen for D800K005 v0.8.2.0 [General] BootMode = NONE crcCheckType = NO_CRC [AIS_SeqReadEnable] [PLLANDCLOCKCONFIG] ; CPU 456 MHz PLLCFG0 = 0x12000403 PLLCFG1 = 0x000501F9 PERIPHCLKCFG = 0x00000008 [EMIF3SDRAM] SDCR = 0x0000C621 SDTIMR = 0x0C912188 SDTIMR2 = 0x78070004 SDRCR = 0x00000890 [EMIF25ASYNC] ; CS2 == Panel A1CR = 0x08640100 ; CS3 == DSP and Keyboard A2CR = 0x00020100 ; CS4 Unused A3CR = 0x3FFFFFFC ; CS5 Unused A4CR = 0x3FFFFFFC [PSCCONFIG] LPSCCFG = 0x00000003 [PSCCONFIG] LPSCCFG = 0x00010003 [PSCCONFIG] LPSCCFG = 0x00020003 [PSCCONFIG] LPSCCFG = 0x00030003 [PSCCONFIG] LPSCCFG = 0x00040003 [PSCCONFIG] LPSCCFG = 0x00060003 [PSCCONFIG] LPSCCFG = 0x000A0003 [PSCCONFIG] LPSCCFG = 0x000B0003 [PSCCONFIG] LPSCCFG = 0x000C0003 [PSCCONFIG] LPSCCFG = 0x000D0003 [PSCCONFIG] LPSCCFG = 0x01010003 [PSCCONFIG] LPSCCFG = 0x01030003 [PSCCONFIG] LPSCCFG = 0x01060003 [PSCCONFIG] LPSCCFG = 0x01080003 [PSCCONFIG] LPSCCFG = 0x010A0003 [PSCCONFIG] LPSCCFG = 0x010B0003 [PSCCONFIG] LPSCCFG = 0x010C0003 [PSCCONFIG] LPSCCFG = 0x010D0003 [PSCCONFIG] LPSCCFG = 0x01110003 [PSCCONFIG] LPSCCFG = 0x01180003 [PSCCONFIG] LPSCCFG = 0x01190003 [PSCCONFIG] LPSCCFG = 0x011A0003 [PSCCONFIG] LPSCCFG = 0x011F0003 [PINMUX] REGNUM = 0 MASK = 0xFFFFFFFF VALUE = 0x11112108 [PINMUX] REGNUM = 1 MASK = 0xFFFFFFFF VALUE = 0x11111111 [PINMUX] REGNUM = 2 MASK = 0xFFFFFFFF VALUE = 0x01111111 [PINMUX] REGNUM = 3 MASK = 0xFFFFFFFF VALUE = 0x00000000 [PINMUX] REGNUM = 4 MASK = 0xFFFFFFFF VALUE = 0x00000000 [PINMUX] REGNUM = 5 MASK = 0xFFFFFFFF VALUE = 0x11111110 [PINMUX] REGNUM = 6 MASK = 0xFFFFFFFF VALUE = 0x11111111 [PINMUX] REGNUM = 7 MASK = 0xFFFFFFFF VALUE = 0x18111111 [PINMUX] REGNUM = 8 MASK = 0xFFFFFFFF VALUE = 0x21122111 [PINMUX] REGNUM = 9 MASK = 0xFFFFFFFF VALUE = 0x88888802 [PINMUX] REGNUM = 10 MASK = 0xFFFFFFFF VALUE = 0x88888880 [PINMUX] REGNUM = 11 MASK = 0xFFFFFFFF VALUE = 0x11281888 [PINMUX] REGNUM = 12 MASK = 0xFFFFFFFF VALUE = 0x88888880 [PINMUX] REGNUM = 13 MASK = 0xFFFFFFFF VALUE = 0x11088888 [PINMUX] REGNUM = 14 MASK = 0xFFFFFFFF VALUE = 0x00111111 [PINMUX] REGNUM = 15 MASK = 0xFFFFFFFF VALUE = 0x11000000 [PINMUX] REGNUM = 16 MASK = 0xFFFFFFFF VALUE = 0x88888811 [PINMUX] REGNUM = 17 MASK = 0xFFFFFFFF VALUE = 0x00011188 [PINMUX] REGNUM = 18 MASK = 0xFFFFFFFF VALUE = 0x00111010 [PINMUX] REGNUM = 19 MASK = 0xFFFFFFFF VALUE = 0x00000000 ; Set Both Test Pin GPIOs high [AIS_Set] TYPE = 2 ADDRESS = 0x01E26010 DATA = 0xf3ffffff SLEEP = 0 [AIS_Set] TYPE = 2 ADDRESS = 0x01E26018 DATA = 0x0C000000 SLEEP = 0