comparison README @ 43:52325cb524a8

new README written for the UI-enabled configuration
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Thu, 05 Nov 2015 08:09:54 +0000
parents 132b3e230631
children
comparison
equal deleted inserted replaced
42:fa6b0576202d 43:52325cb524a8
1 This semi-source tree contains a hacked version of TI's TCS211 firmware that 1 This semi-source tree contains a hacked version of TI's TCS211 firmware that
2 has been made to run on the Motorola C139. The UI part of TI's reference fw 2 has been made to run on the Motorola C139. Once the remaining bugs get shaken
3 has not been ported over yet, hence the version presented here currently builds 3 out (there are still some crippling ones, so don't break out the champagne yet),
4 and works only in the modem-like ACI configuration, i.e., control via AT 4 one will be able to replace Motorola's firmware in flash with this one and
5 commands only. 5 *still be able to use the phone as an end user* - but now running firmware that
6 6 we build from source ourselves, one whose internals we know and understand and
7 TI's original fw was/is designed to make use of two UARTs, one for the classic 7 which we can use a baseline for further functional improvements.
8 AT command interface and the other for their RVTMUX debug/calibration/etc 8
9 interface. Unfortunately though, our present target hw has only one UART 9 Compiling
10 practically accessible (Calypso's MODEM UART brought out on the headset jack), 10 =========
11 thus the classic AT command interface had to be sacrificed. Instead the AT
12 command interface (which is currently the only way to control the GSM
13 functionality in the absence of a UI ported to the present target) needs to be
14 accessed through the RVTMUX binary packet interface using FreeCalypso host
15 tools rvinterf and fc-shell.
16
17 The present fw has been built from a semi-src (half source, half binary objects)
18 TI firmware release which was made for some manufacturer that made GSM/GPRS
19 modems, rather than voice handsets, hence the present configuration is
20 unfortunately highly suboptimal for our use case. The entire mass of code
21 supporting CSD, fax and GPRS data services is included and cannot be removed
22 because that part of the fw is in binary blobs, but all this code is pure dead
23 weight in the present configuration: the phone UI layer (when we get around to
24 porting it) won't make any use of data functionality (nowhere near enough
25 resources on this hw to implement a WAP browser or MMS), and because we had to
26 give up the standard AT command channel, the option of having the phone dual-
27 function as a laptop-tethered modem is not available either.
28 11
29 Building the present firmware from semi-source requires using a Wine environment 12 Building the present firmware from semi-source requires using a Wine environment
30 to run TI's proprietary compiler toolchain and other build tools which exist 13 to run TI's proprietary compiler toolchain and other build tools which exist
31 only as M$ Windows binaries. The necessary environment can be downloaded here: 14 only as M$ Windows binaries. The necessary environment can be downloaded here:
32 15
36 finishing steps in generating an image that can be usefully flashed into a C139: 19 finishing steps in generating an image that can be usefully flashed into a C139:
37 20
38 ftp://ftp.freecalypso.org/pub/GSM/GTA02/gsm-fw/mokosrec2bin.c 21 ftp://ftp.freecalypso.org/pub/GSM/GTA02/gsm-fw/mokosrec2bin.c
39 22
40 Once you have the necessary build tools installed, you should be able to 23 Once you have the necessary build tools installed, you should be able to
41 compile the present fw by running first winebuild.sh, then copyout.sh in the 24 compile the present fw as follows:
42 g23m subdirectory. Then you can flash this firmware you just built into an 25
43 actual C139 phone with FreeCalypso host tool fc-loadtool. Flash sector 0 (the 26 cd g23m
44 brickable boot sector) needs to contain our patched bootloader version 27 ./winebuild.sh
45 compal-flash-boot-for-fc.bin (this brickable sector only needs to be rewritten 28 ./copyout.sh
46 once when first installing some FreeCalypso fw on the phone; no need to touch 29
47 this dangerous sector on subsequent updates from one FC fw version to another), 30 The build products will be in the g23m/mfw-build directory. mfw-build.progbin
48 and the main fw image needs to be flashed starting at 0x10000. The image to 31 is the flashable image, and the other files should be saved as documentation:
49 flash is aci-build.progbin - it has TI's bootloader code stripped off, as we 32 you should retain the COFF, map and str2ind.tab files that correspond exactly
50 are using compal-flash-boot-for-fc instead. 33 to what you have flashed, so you can debug it later.
51 34
52 The phones in question have a data structure in flash at 0x3FC000 (in an 8 KiB 35 Flashing: what goes where
53 short sector) that must contain factory programming, including each phone's 36 =========================
54 unique IMEI and RF calibration values. However, we don't understand how to 37
55 grok this data structure. Therefore, our firmware features the following 38 WARNING: C139 phones are brickable! If you type the wrong command in
56 points of inconvenience: 39 fc-loadtool, you can brick your phone *unrecoverably*! Flash sector 0 MUST at
57 40 all times contain working boot code that can successfully perform the following
58 * You have to set your own IMEI. It's entirely up to you whether you set the 41 functions:
59 same IMEI as the phone had originally or a different one, but our fw has no 42
60 way of reading the original from Mot/Compal's factory flash programming. 43 1. Check the headset jack UART for a possible serial download - if an external
61 You probably won't be able to connect to a live commercial GSM network until 44 host is requesting a serial code download, accept the serially loaded code
62 you set some IMEISV which the network will accept as valid. 45 and jump to it.
63 46
64 * Because Mot/Compal stored their RF calibration values in some format 47 2. If no serial download is taking place, jump to the main fw image in the rest
65 (different from TI's) which we can't grok, a phone running our aftermarket fw 48 of the flash for normal boot.
66 will run UNCALIBRATED. It may have difficulty connecting to networks if it 49
67 can't acquire the frequency burst lacking VCXO calibration, and the Tx power 50 Function (2) may differ depending on what main fw is to be used, but function
68 levels are almost certainly wrong (out of spec) - BEWARE! 51 (1) is absolutely essential: if flash sector 0 is erased and not immediately
69 52 reprogrammed with working boot code, or if it gets programmed with some code
70 * Our fw does not even know whether your C139 is the 900+1800 MHz version or 53 version that does not perform function (1), then all ability to take control of
71 850+1900 MHz. You will need to set the correct rfcap configuration at the 54 the phone will be lost, and it will be forever stuck in one of two states:
72 same time when you set your IMEISV. 55
73 56 (a) If the boot code still performs function (2) and there happens to be a
74 Flashing and usage instructions 57 working main fw image in the flash, the phone will be stuck with that fw
75 =============================== 58 version forever, with no ability to reflash it or to load and execute any
59 code in RAM.
60
61 (b) If the conditions of (a) above aren't met, the phone will be reduced to a
62 paperweight. There is no JTAG access on these phones, and the flash chip
63 is not only a micro-BGA, but also combined with SRAM in the same package.
64 Desoldering the flash+SRAM chip and replacing it with an externally
65 programmed one is not likely to be feasible, hence bricked really means
66 bricked. You've been warned!
67
68 For FreeCalypso we've adopted our own version of the bootloader that performs
69 function (1) exactly like Mot/Compal's original (actually slightly better, as
70 we've removed the "1003" check, thus the inefficient -c 1003 fc-loadtool option
71 becomes unnecessary), but we've modified function (2): in Compal's original
72 design the main fw image starts at 0x2000 with the entry point at 0x20F8,
73 whereas in our arrangement the main fw image starts at 0x10000 with the entry
74 point at 0x10058.
75
76 We've changed the starting address for the main fw image to coincide with the
77 physical flash erase block boundary and thereby reduce the bricking risk. If
78 we put our main fw image starting at 0x2000 like Mot/Compal did, we would have
79 to erase and reprogram flash sector 0 every time we would like to change the
80 main fw, incurring the risk of bricking the phone. But with our modified boot
81 code we only have to do it once, when a given phone is first transitioned from
82 Mot/Compal's original fw to one of ours. With subsequent reflashings from one
83 FreeCalypso fw version to another, we only need to reflash the main fw starting
84 at 0x10000, and leave flash sector 0 alone.
85
86 Besides the main fw and the critical boot code, the flash houses two more
87 entities: the factory data block and the flash file system (FFS).
88
89 Factory data block
90 ==================
91
92 The 8 KiB flash sector at 0x3FC000 contains per-unit factory programming from
93 Motorola/Compal: RF calibration values, the unit's official IMEI and Cthulhu
94 knows what else. Unfortunately we haven't been able to parse this info beyond
95 a superficial level, hence we have no way to make use of any of this data.
96 But of course we should not erase or overwrite it, so we just leave this flash
97 sector alone.
98
99 Flash file system
100 =================
101
102 Because Mot/Compal had moved their IMEI and RF calibration values into their
103 own proprietary format, these juicy items are NOT found in the FFS maintained
104 by the original firmware. Instead the original fw's FFS contains only dynamic
105 state and user data, hence it is of no use to us. We have adopted a different
106 flash location for our FFS from that used by Mot/Compal's fw in order to prevent
107 any possible cross-contamination, and you will need to manually initialize this
108 aftermarket FFS the first time you install FreeCalypso firmware on your C139.
109
110 Flashing procedure
111 ==================
76 112
77 If you are not scared off by all of the above and you still wish to try this 113 If you are not scared off by all of the above and you still wish to try this
78 experimental fw on your C139, you can install it as follows: 114 experimental fw on your C139, you can install it as follows:
79 115
80 1. Connect to the phone with fc-loadtool, preceded by tfc139 if necessary - 116 1. Connect to the phone with fc-loadtool, preceded by tfc139 if necessary -
83 2. If the C139 in question does not already have some other FreeCalypso fw 119 2. If the C139 in question does not already have some other FreeCalypso fw
84 version in its flash, replace the bootloader: 120 version in its flash, replace the bootloader:
85 121
86 loadtool> flash erase-program-boot compal-flash-boot-for-fc.bin 122 loadtool> flash erase-program-boot compal-flash-boot-for-fc.bin
87 123
124 (compal-flash-boot-for-fc.bin is our modified bootloader version, and it is
125 built from one of Compal's versions via binary patching in the freecalypso-sw
126 source tree.)
127
128 Optional step: If your serial cable setup supports the special GSM high baud
129 rates, you can speed the process up by issuing a baud 406250 or baud 812500
130 command at this point.
131
88 3. Flash the main fw image: 132 3. Flash the main fw image:
89 133
90 loadtool> flash erase 10000 220000 134 loadtool> flash erase 10000 290000
91 loadtool> flash program-bin 10000 aci-build.progbin 135 loadtool> flash program-bin 10000 mfw-build.progbin
92 136
93 (If your serial cable setup supports the special GSM high baud rates, 137 Or you can use the supplied nifty loadtool command script:
94 you can speed the process up by issuing a baud 406250 or baud 812500 138
95 command first.) 139 loadtool> exec ./flash-mfw
140
141 The current directory must be g23m for the script method to work.
96 142
97 4. Erase the sectors where our firmware's non-volatile flash file system 143 4. Erase the sectors where our firmware's non-volatile flash file system
98 (aftermarket FFS configuration) will reside: 144 (aftermarket FFS configuration) will reside:
99 145
100 loadtool> flash erase 3C0000 30000 146 loadtool> flash erase 3C0000 30000
101 147
102 5. Cleanly end your fc-loadtool session, which will power the phone off: 148 5. Cleanly end your fc-loadtool session, which will power the phone off:
103 149
104 loadtool> exit 150 loadtool> exit
105 151
106 Now your phone has FreeCalypso firmware in its flash, but it no longer works 152 FFS initialization
107 as a "normal" phone. Gotchas to be aware of: 153 ==================
108 154
109 * Mot/Compal's original firmwares (like all other production phone fws) 155 The first time you boot your C139 after the above flashing procedure, the phone
110 implement on a guard on the power-on button: you have to hold it down for a 156 should have no SIM in it. Firmwares built with UI enabled (like the present)
111 little while to confirm that you really mean to power the phone on; a 157 automatically fire up GSM functionality and try to connect to a network
112 momentary press of the power-on button is interpreted as spurious by standard 158 immediately upon boot if a SIM is present, and you don't want to do that on
113 fws, and they power the phone back off. However, the present hack-fw has no 159 your first boot: at this point your phone has *no* IMEI and no working FFS at
114 such guard, hence even a momentary press of the power-on button will launch 160 all. When the fw boots up without a SIM, it still enables the part of the GSM
115 the firmware into full boot. 161 radio protocol stack that looks for usable cells, in anticipation of the
116 162 possibility that the user may need to make an emergency call, but it never
117 * Because our present fw has no UI, the LCD will remain dark and the buttons 163 transmits anything in this state (Tx fully off) unless you do dial that
118 won't do anything. A momentary press of the power button will turn the phone 164 emergency call.
119 on, but you won't know that it's on - it will just silently and invisibly eat 165
120 the battery. Furthermore, the only way to power it off (aside from yanking 166 So take the SIM out before you start the reflashing procedure, and then boot
121 the battery) is to connect a serial cable and send a poweroff command via 167 the SIM-less phone afterward. You should see a message on the LCD that reads
122 fc-shell - there is no way to command a power-off from the keypad. (Pressing 168 "Insert SIM". But instead of inserting a SIM, you should run the fc-fsio
123 and holding the power button produces some kind of hang or crash - to be 169 utility from FreeCalypso host tools at this point. Plug the serial cable back
124 investigated - instead of a proper power-off.) 170 in if you unplugged it, and run fc-fsio:
125 171
126 * The present fw includes TI's LCC (low-cost charger) code that came with 172 fc-fsio -p /dev/ttyXXX
127 TCS211, but it is not clear whether or not this code drives the charging 173
128 circuitry correctly for Mot/Compal's hardware. Therefore, plan on having 174 (Omit the -p argument if you already have rvinterf running for fc-fsio to
129 the phone with FC firmware draining batteries only, and have another phone 175 connect to.)
130 running official fw (or a standalone charger) to charge them back up. 176
131 177 Then issue the following commands:
132 What all of these gotchas practically mean is that the phone with FC fw in it
133 should not have a battery inserted on a regular basis; instead you should use
134 it as follows:
135
136 1. Begin each FC hacking session by inserting the SIM you wish to use, then
137 inserting the battery - but don't touch the power button yet.
138
139 2. Connect the serial cable and run rvinterf on your host.
140
141 3. Press the power button, and see the firmware boot output in the rvinterf
142 window.
143
144 4. Run fc-shell, fc-fsio, fc-tmsh etc as desired during your hacking session.
145
146 5. End the session by yanking the battery, killing rvinterf and stowing away
147 your serial cable.
148
149 First session
150 =============
151
152 Remember the notes above regarding this fw not being able to read the factory
153 IMEI record? That's right, you'll need to set your own IMEISV. Furthermore,
154 because we are using our own "aftermarket" FFS configuration for non-volatile
155 data storage (you erased the flash sectors to be used for this FFS when you
156 flashed the fw with fc-loadtool, or at least you should have), this FFS needs
157 to be initialized before the fw can function correctly.
158
159 Initialize your FFS as follows:
160
161 1. Connect the serial cable, run rvinterf and boot the fw as above.
162
163 2. Before you try issuing any AT commands via fc-shell, run fc-fsio first.
164
165 3. Initialize the FFS via fc-fsio as follows:
166 178
167 fsio> format / 179 fsio> format /
168 fsio> mk-std-dirs 180 fsio> mk-std-dirs
169 fsio> set-imeisv fc XXXXXXXX-YYYYYY-ZZ (punctuation optional, place anywhere) 181 fsio> set-imeisv fc XXXXXXXX-YYYYYY-ZZ (punctuation optional, place anywhere)
170 fsio> set-rfcap dual-eu (if you have 900+1800 MHz hardware) 182 fsio> set-rfcap dual-eu (if you have 900+1800 MHz hardware)
171 or 183 or
172 fsio> set-rfcap dual-us (if you have 850+1900 MHz hardware) 184 fsio> set-rfcap dual-us (if you have 850+1900 MHz hardware)
173 185
174 After the above steps, you can exit fc-fsio (or leave it running), run fc-shell 186 Yes, you need to set your own IMEISV. The official one is stored in the factory
175 and exercise the GSM MS via AT commands - try connecting to a network! With my 187 data block, but we don't know how to parse it, so it effectively does not exist
176 US band C139 (former Tracfone, now a Crackfone) on Operator 310260's network, 188 for us. It is entirely up to you whether you set the same IMEI as the official
177 both voice calls and SMS work like a charm. YMMV. 189 one or a different one: our fw has no psychic powers to compare. Unless you
190 have reason to do otherwise though, the default should be to keep the original
191 IMEI. It is not clear what Mot/Compal's fw puts in the SV digits, so just put
192 00 in there if you don't feel like inventing version numbers.
193
194 The set-rfcap command is necessary because our fw does not know otherwise
195 whether your C139 is the 900+1800 MHz version or 1900+850 MHz. If you don't
196 write a /gsm/com/rfcap file with this command, the fw defaults to quadband
197 (the part of the fw where this default is effected is a binary blob in the
198 present version) and will waste time scanning frequencies which it can't
199 receive because the corresponding RF transceiver input is unconnected
200 (unsupported high band) or because they are blocked by a SAW filter
201 (unsupported low band).
202
203 After you have initialized your new aftermarket FFS with fc-fsio per the above,
204 exit fc-fsio and power your phone off: hold the power button down until a TI
205 logo appears on the LCD, then release the button; the phone will power off
206 shortly, and you'll know it's off when the LCD turns off. Now you can insert
207 a SIM and boot again - this time the phone should be live!
208
209 Limitations
210 ===========
211
212 * The present fw has been built from a semi-src (half source, half binary
213 objects) TI firmware release which was made for some manufacturer that made
214 GSM/GPRS modems, rather than voice handsets, hence the present configuration
215 is unfortunately highly suboptimal for our use case. The entire mass of code
216 supporting CSD, fax and GPRS data services is included and cannot be removed
217 because that part of the fw is in binary blobs, but all this code is pure dead
218 weight in the present configuration: the phone UI layer won't make any use of
219 data functionality (nowhere near enough resources on this hw to implement a
220 WAP browser or MMS), and because we had to give up the standard AT command
221 channel (see next point), the option of having the phone dual-function as a
222 laptop-tethered modem is not available either.
223
224 * TI's full-featured phone firmwares allow the phone to dual-function as a
225 modem, so one could connect the phone to a laptop and make a CSD call or use
226 GPRS. But they were designed to make use of two UARTs, one for the classic
227 AT command interface and the other for their RVTMUX debug/calibration/etc
228 interface. Unfortunately though, our present target hw has only one UART
229 practically accessible (Calypso's MODEM UART brought out on the headset jack),
230 and we absolutely need the debug interface, thus the classic AT command
231 interface had to be sacrificed. One can still issue AT commands over RVTMUX
232 with FreeCalypso host utility fc-shell, but this mechanism works only for
233 voice and SMS commands, not CSD or GPRS. Hence the data functions of the fw
234 remain unusable dead weight. :(
235
236 * The headset functionality of the headset jack is also unavailable: because we
237 need to be able to use the debug interface at all times, we always keep the
238 electrically-controlled switch in the state that connects the headset jack to
239 the UART (presenting RVTMUX) instead of the audio circuits.
240
241 * Because we don't know how to grok Mot/Compal's factory data block, our fw
242 currently runs UNCALIBRATED. It may have difficulty connecting to networks
243 if it can't acquire the frequency burst lacking VCXO calibration, and the Tx
244 power levels are almost certainly wrong (out of spec) - BEWARE!
245
246 * The only 3 display configurations for which TI produced demo/prototype UI in
247 their chipset reference firmware are 84x48 pix monochrome, 176x220 pix
248 monochrome and 176x220 pix full color. We have a 96x64 pix LCD on the C139,
249 hence we are using TI's 84x48 UI design until we can create one that makes
250 use of the slightly larger 96x64 screen. However, TI had that 84x48 LCD on
251 their C-Sample and earlier platforms (*very* old), and as we discovered
252 empirically, the support for this 84x48 display config is already bitrotten
253 in the source tree we got, which officially targets TI's D-Sample and Leonardo
254 boards.
255
256 At first the C-Sample UI configuration did not even compile. We got it to
257 compile by fixing it in a way that *seemed* right, but when we run this
258 resurrected C-Sample UI on our C139 hardware, one can plainly see that the UI
259 is still defective, as the expected output on the LCD is mixed with garbage.
260 We will need to delve into the UI code in more depth in order to really fix it
261 to where the display will be readable without garbage.
262
263 * Battery charging has not been tried yet. It most likely won't work without
264 additional fixes.