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