FreeCalypso > hg > freecalypso-docs
comparison Flash-boot-modes @ 8:dc0e9c91d54a
Flash-boot-modes article added (migrated from freecalypso-tools)
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Fri, 26 Oct 2018 06:41:47 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 7:43829da82312 | 8:dc0e9c91d54a |
|---|---|
| 1 The Calypso chip includes an on-die boot ROM that allows the boot process to be | |
| 2 interrupted and diverted by an external host sending some special characters | |
| 3 into either of the two UARTs; this mechanism is what allows us to load code into | |
| 4 RAM and to reload the flash on Calypso GSM devices without having to resort to | |
| 5 JTAG or chip desoldering or other extreme measures. In normal operation, when | |
| 6 the boot path is NOT being diverted by an external serial download, the boot ROM | |
| 7 transfers control to the regular firmware in the flash - but there are two | |
| 8 different modes in which the flash fw image may be booted. | |
| 9 | |
| 10 In order for the flash fw image to be considered bootable by the Calypso boot | |
| 11 ROM, the 32-bit word at flash address 0x2000 must equal either 0 or 1; if it | |
| 12 equals any other value, the boot ROM will consider the flash fw image to be | |
| 13 invalid (e.g., blank flash) and will wait forever for a serial download instead | |
| 14 of proceeding with flash boot. Depending on whether this word at 0x2000 equals | |
| 15 0 or 1, the flash fw image will be booted in one of two very different ways; | |
| 16 we shall call them flash boot mode 0 and flash boot mode 1, respectively. | |
| 17 | |
| 18 In flash boot mode 0 the following 32-bit word at flash address 0x2004 must | |
| 19 contain the address of the flash fw image entry point (ARM/Thumb selection in | |
| 20 the least-significant bit); the boot ROM will simply jump to this address with | |
| 21 a BX instruction. When the flash fw image is booted in this manner, the boot | |
| 22 ROM is still mapped at address 0 and the first 8 KiB of flash are inaccessible | |
| 23 except via the 0x03000000 alternate mapping, unless the firmware later changes | |
| 24 the FFFF:FB10 register. This boot mode is intended for flash fw images that | |
| 25 use the interrupt and exception vectors in the ROM (branching to IRAM addresses | |
| 26 0x80001C-0x800034) for their interrupt and exception handling. | |
| 27 | |
| 28 Flash boot mode 1 is different: instead of jumping directly to the flash fw | |
| 29 image, the boot ROM copies a small piece of its code into IRAM and jumps to that | |
| 30 code; the copied code disables the boot ROM via the FFFF:FB10 register (puts | |
| 31 the external flash at address 0) and induces a processor reset through the | |
| 32 watchdog timer. It is not clear to us exactly what blocks are affected by the | |
| 33 watchdog reset, but bits 9:8 of the FFFF:FB10 register are not reset, hence | |
| 34 the ARM processor now boots from the reset vector in the flash as if the boot | |
| 35 ROM weren't there - and the latter really is not there after having disabled | |
| 36 itself. | |
| 37 | |
| 38 Flash boot mode 0 is only usable on Calypso C035 silicon (the "new" kind); | |
| 39 while all commercial Calypso GSM devices targeted by FreeCalypso feature Calypso | |
| 40 chips of the correct "new" kind, the people at TI who wrote and maintained their | |
| 41 official firmware also had to work with older Calypso C05 chips featured on the | |
| 42 early D-Sample and Leonardo boards. The earlier boot ROM code version in those | |
| 43 early Calypso chips also implements the two boot modes which we call mode 0 and | |
| 44 mode 1, but its implementation of mode 0 is broken and unusable, therefore TI's | |
| 45 firmware people only used flash boot mode 1. On the other hand, newer firmware | |
| 46 designs made for current rather than historical hardware will probably find | |
| 47 mode 0 to be cleaner, more intuitive and more convenient. | |
| 48 | |
| 49 All TI official firmwares use flash boot mode 1, our FreeCalypso Magnetite | |
| 50 firmware does likewise, being a direct derivative of TI's TCS211 fw, but our | |
| 51 gcc-built FC Selenite firmware uses flash boot mode 0, as the assembly code | |
| 52 pieces and linker script magic are entirely new (our own original design) in | |
| 53 the gcc-built version. |
