Project

General

Profile

SciphoneDreamG2 » History » Version 28

osmith, 03/29/2019 09:43 AM
fix link formatting

1 1 laforge
2 22 marcin
h1. Sciphone Dream G2
3 1 laforge
4 22 marcin
5 22 marcin
The Sciphone Dream G2 is a [[MT6235]] based phone running UI software to mimic the look+feel of Android.
6 22 marcin
7 1 laforge
There is currently an u-boot and Linux port for the MT6235 underway, the primary development platform is the Sciphone G2.
8 1 laforge
9 23 laforge
*[[OsmocomBB]] does not yet support any Mediatek chipsets, so this phone is not supported by [[OsmocomBB]].*
10 1 laforge
11 24 laforge
More information on the hardware of the device can be found at http://en.qi-hardware.com/wiki/Sciphone_Dream_G2
12 1 laforge
The phone has a engineering menu which can be activated by dialing *#36466331#
13 16 steve-m
14 16 steve-m
15 26 gnutoo
h2. Presentations
16 26 gnutoo
17 26 gnutoo
* Getting the First Open Source GSM Stack in Linux at ELC 2012: "slides":https://events.linuxfoundation.org/images/stories/pdf/lf_elc12_mielczarczyk.pdf "video":https://bootlin.com/pub/video/2012/elc/elc-2012-mielczarczyk-first-open-source-gsm-stack.webm
18 26 gnutoo
19 22 marcin
h2. Serial Cable
20 22 marcin
21 22 marcin
22 16 steve-m
You can make a serial cable by sacrificing the headset that comes with the phone, and swapping the pins inside the connector.
23 2 steve-m
24 2 steve-m
Serial pinout:
25 9 sylvain
26 2 steve-m
||Pin||signal||comment||
27 9 sylvain
||1||GND||
28 9 sylvain
||2||GND||
29 1 laforge
||5||Rx||(From PC to Phone)||
30 1 laforge
||7||Tx||(From Phone to PC)||
31 1 laforge
32 25 zecke
{{thumbnail(sciphone_serial.jpg)}}
33 2 steve-m
34 1 laforge
35 22 marcin
h2. JTAG
36 22 marcin
37 22 marcin
38 4 steve-m
The JTAG port of the MT6235 is accessible on the phone PCB, see the attached picture.
39 22 marcin
You can use "OpenOCD":http://openocd.berlios.de/web/ along with the attached configuration file ([raw-attachment:openocd_mt6235.cfg]) for debugging.
40 1 laforge
41 25 zecke
{{thumbnail(scig2_front.JPG,20%)}}
42 25 zecke
{{thumbnail(scig2_jtag.jpg,20%)}}
43 1 laforge
44 11 steve-m
45 22 marcin
h2. Serial Bootloader
46 22 marcin
 
47 1 laforge
48 22 marcin
Like all Mediatek MT62xx SoCs, the phone uses the [[MTKRomloader]].
49 22 marcin
50 10 steve-m
For executing U-Boot and Linux using the MTK romloader, proceed as follows:
51 1 laforge
52 22 marcin
* clone osmocom-bb.git and checkout the branch 'steve-m/loader_sciphone'
53 22 marcin
* compile the code, connect the phone and run osmocon:
54 22 marcin
<pre>
55 1 laforge
$ ./osmocon -p /dev/ttyUSB0 -m mtk ../../target/firmware/board/mt62xx/loader.mtkram.bin
56 22 marcin
</pre>
57 22 marcin
* press and *hold* the powerbutton of the phone, until the loading has finished and you see the following:
58 22 marcin
<pre>
59 1 laforge
[...]
60 1 laforge
Received branch address ack, code should run now
61 10 steve-m
62 1 laforge
Running on mt62xx in environment mtkram
63 1 laforge
HW_CODE = 0x6235
64 22 marcin
</pre>
65 1 laforge
66 22 marcin
*Uploading U-Boot*
67 22 marcin
* *don't* terminate osmocon and execute:
68 22 marcin
<pre>
69 10 steve-m
$ ./osmoload memload 0x500000 u-boot.bin
70 10 steve-m
$ ./osmoload jump 0x500000
71 22 marcin
</pre>
72 13 marcin
73 22 marcin
* now terminate osmocon and open a serial terminal of your choice (115200-8N1)
74 22 marcin
* see below for loading Linux with U-Boot
75 13 marcin
76 13 marcin
77 22 marcin
h2. MTK boot process
78 22 marcin
79 22 marcin
80 25 zecke
{{thumbnail(mt62xx_boot.jpg)}}
81 1 laforge
82 22 marcin
MT62xx chips have IPL (Initial Program Loader) saved in ROM.
83 1 laforge
84 1 laforge
85 22 marcin
This is first code executed after power up.
86 1 laforge
87 1 laforge
88 22 marcin
It configures basic functionality of CPU (serial port 19200n8) and waits on 0xA beacon.
89 1 laforge
90 22 marcin
91 22 marcin
If beacon won't be received, it jumps to NAND memory read procedure.
92 22 marcin
93 22 marcin
94 22 marcin
At NAND 0x0 address Boot Header is placed which holds informations about NAND memory and parameters of image which is going to be loaded.
95 22 marcin
96 22 marcin
97 1 laforge
NAND memory read procedure tries to read NAND memory from 0x0 address with following NFI controller settings:
98 1 laforge
99 13 marcin
||Bus width||Address bytes||Page size||Column shift||Used in Sciphone G2||
100 1 laforge
||1||3||512||8||||
101 13 marcin
||0||3||512||8||||
102 14 marcin
||1||4||512||8||||
103 13 marcin
||0||4||512||8||yes||
104 1 laforge
||1||4||2048||16||||
105 1 laforge
||0||4||2048||16||yes||
106 1 laforge
||1||5||2048||16||||
107 1 laforge
||0||4||2048||16||||
108 15 marcin
109 22 marcin
If Boot Header read from NAND memory will match to currently used NFI configuration, bootloader will start to read data from NAND to internal SRAM. Internal SRAM size is 64kB, which means that code loaded by IPL can't be bigger than that.
110 1 laforge
111 1 laforge
112 22 marcin
*Note:* IPL doesn't configure PLL and SDRAM controller, so there is no possibility to load code to external RAM. Here is where SPL (Secondary Program Loader) comes into the game.
113 1 laforge
114 13 marcin
115 22 marcin
h2. SPL - Runing U-Boot from NAND
116 1 laforge
117 15 marcin
118 22 marcin
SPL (Second Program Loader) is just small U-Boot loader which includes low level CPU initialization (PLL, SDRAM) and NAND driver.
119 1 laforge
120 15 marcin
121 22 marcin
Using default build it occupies less than 4kB, but it lacks NAND memory detection. All the NAND memory types can be specified using preprocessor which is not comfortable. We already identified three different NAND memories and that would be bad to create seperate builds for them.
122 1 laforge
123 22 marcin
124 22 marcin
Fortunatelly there is no need to strip down SPL size to 4kB, so SPL code has been reworked and new functionalities are added. It detects NAND memory at startup and configures NFI controller automatically. New implementation can be found at "nand_spl/nand_boot_detect.c".
125 22 marcin
126 22 marcin
127 22 marcin
SPL also automatically configures SDRAM controler according to RAM you have on your device (currently it tries two configurations).
128 22 marcin
129 22 marcin
130 22 marcin
SPL is generated on every U-Boot build and binary can be found at "nand_spl/u-boot-spl.bin".
131 22 marcin
132 22 marcin
133 22 marcin
SPL will be loaded and executed by IPL only if Boot Header will contain valid data (in this case checksum and length is most important).
134 22 marcin
135 22 marcin
136 6 marcin
To generate Boot Header and place it at the begining of binary you should use mtk_image tool. MTK Boot Header generator can be found at "tools/mtk_image.c".
137 6 marcin
138 22 marcin
<pre>
139 1 laforge
Usage ./mtk_image [ -s size ] [ -o file ] mtk_dump.bin image.bin
140 1 laforge
	[ -s size ]	- size of image, if not specified file size will be taken
141 6 marcin
	[ -o file ]	- name of output file
142 1 laforge
	mtk_dump.bin	- dump of NAND memory from address 0 (at least 64 bytes)
143 6 marcin
	image.bin	- image to be loaded by MTK bootloader
144 22 marcin
</pre>
145 1 laforge
146 22 marcin
mtk_image tool needs dump file from your device (at least 64 bytes read from NAND 0x0 address) as there are different NAND memory configurations. Thanks to that Boot Header will be properly generated for your device.
147 6 marcin
148 1 laforge
149 22 marcin
*Note! Before flashing U-Boot to NAND, create full dump of your NAND, otherwise you'll be not able to restore phone's original software.*
150 1 laforge
151 6 marcin
152 22 marcin
h2. U-Boot
153 22 marcin
154 22 marcin
155 27 unrznbl
Port of U-Boot for Sciphone G2 can be found at "U-Boot":https://git.osmocom.org/uboot-mt623x/
156 22 marcin
157 1 laforge
Building U-Boot:
158 1 laforge
159 22 marcin
<pre>
160 1 laforge
export CROSS_COMPILE=arm-linux-gnueabi-
161 1 laforge
make sciphone_g2_config
162 8 marcin
make
163 22 marcin
</pre>
164 1 laforge
165 1 laforge
166 22 marcin
h2. Linux kernel
167 1 laforge
168 22 marcin
169 22 marcin
Port of Linux kernel for Sciphone G2 can be found at "Linux kernel":http://git.osmocom.org/gitweb?p=linux-mt623x.git;a=summary
170 22 marcin
171 1 laforge
Building Linux:
172 1 laforge
173 22 marcin
<pre>
174 8 marcin
export CROSS_COMPILE=arm-linux-gnueabi-
175 8 marcin
make ARCH=arm sciphone_g2_defconfig
176 1 laforge
make ARCH=arm uImage
177 22 marcin
</pre>
178 1 laforge
179 8 marcin
180 22 marcin
h2. Building initramfs file system
181 1 laforge
182 8 marcin
183 22 marcin
The easiest way to have file system in Linux kernel is to build "Initramfs image":http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt.
184 22 marcin
185 22 marcin
186 22 marcin
You need to download "Busybox":http://www.busybox.net/, configure it and build it.
187 22 marcin
188 22 marcin
<pre>
189 8 marcin
export CROSS_COMPILE=arm-linux-gnueabi-
190 8 marcin
make menuconfig
191 8 marcin
make
192 8 marcin
make install
193 22 marcin
</pre>
194 1 laforge
195 22 marcin
Generated file system by default installs in _install directory.
196 1 laforge
197 22 marcin
198 1 laforge
Additional to that you'll need to create console device in already built filesystem.
199 1 laforge
200 22 marcin
<pre>
201 1 laforge
sudo mknod dev/console c 5 1
202 22 marcin
</pre>
203 1 laforge
204 1 laforge
Now you can create CPIO archive:
205 1 laforge
206 22 marcin
<pre>
207 1 laforge
find . | cpio -o -H newc > rootfs.cpio
208 22 marcin
</pre>
209 7 marcin
210 22 marcin
Next step is to point to Linux kernel where initramfs image is located.
211 7 marcin
212 22 marcin
213 1 laforge
In menuconfig of Linux kernel you should modify following option:
214 1 laforge
215 22 marcin
<pre>
216 1 laforge
CONFIG_INITRAMFS_SOURCE=<path_to_cpio>
217 1 laforge
General setup -> Initial RAM filesystem and RAM disk -> Initramfs source file(s)
218 22 marcin
</pre>
219 1 laforge
220 22 marcin
After these steps Linux kernel image will have initramfs built in.
221 1 laforge
222 14 marcin
223 22 marcin
*Important note:* Initramfs ignores 'init=' variable given in kernel boot parameters list. It always executes /init command at startup and you can't change it. Check if you have /init in your file system (BusyBox has /linuxrc by default, so just change its name to init).
224 22 marcin
Every time you change initramfs file system you have to rebuild also Linux kernel.
225 22 marcin
226 22 marcin
227 13 marcin
To unpack CPIO archive you can use following command:
228 13 marcin
229 22 marcin
<pre>
230 1 laforge
cpio -i -d -H newc -F <path_to_cpio_archive> --no-absolute-filenames
231 22 marcin
</pre>
232 13 marcin
233 1 laforge
234 22 marcin
h2. Reading data files in U-Boot
235 1 laforge
236 22 marcin
237 22 marcin
*NAND*
238 22 marcin
239 1 laforge
Following command will read 256 bytes from NAND address 0 at address 0x800000.
240 13 marcin
241 22 marcin
<pre>
242 1 laforge
nand read 0x800000 0 0x100
243 22 marcin
</pre>
244 13 marcin
245 22 marcin
*Serial*
246 1 laforge
247 1 laforge
Following command will read data at address 0x800000 from serial at baudrate 115200 (using kermit protocol).
248 1 laforge
249 22 marcin
<pre>
250 1 laforge
loadb 0x800000 115200
251 22 marcin
</pre>
252 1 laforge
253 22 marcin
*SD/MMC*
254 1 laforge
255 13 marcin
Following command will read uImage file at address 0x800000 from MMC card.
256 1 laforge
257 22 marcin
<pre>
258 1 laforge
mmcinfo
259 13 marcin
fatload mmc 0 0x800000 uImage
260 22 marcin
</pre>
261 13 marcin
262 13 marcin
263 22 marcin
h2. NAND memory
264 22 marcin
265 22 marcin
266 13 marcin
So far three types of NAND memories has been identified:
267 1 laforge
268 1 laforge
||Chip||Size||
269 1 laforge
||HY27XS08121M||512Mb (64MB) NAND||
270 13 marcin
||HY27XA081G1M||1Gb (128MB) NAND||
271 1 laforge
||TC58NVG0S3AFT||1Gb (128MB) NAND||
272 1 laforge
273 22 marcin
All of them are supported by "mt62xx_nand.c" NAND driver in U-Boot.
274 1 laforge
275 1 laforge
276 22 marcin
This driver has also support for ECC hardware decoding and encoding.
277 22 marcin
278 22 marcin
279 1 laforge
ECC layout which is used by MTK looks as follows:
280 13 marcin
281 22 marcin
<pre>
282 13 marcin
/*
283 22 marcin
* For small and large page NAND devices ecc block size is the same:
284 13 marcin
 *
285 22 marcin
*      ecc_block_size = 256
286 13 marcin
 *
287 22 marcin
* Placement of ecc bytes in spare area is as follows:
288 1 laforge
 *
289 22 marcin
* --------------------------------------------------------------
290 22 marcin
* |                            SPARE                           |
291 22 marcin
* --------------------------------------------------------------
292 22 marcin
* |    | ECC0  |       | ECC1  |       | ECC2  |       | ECC3  |
293 22 marcin
* --------------------------------------------------------------
294 22 marcin
* 0    8       16      24      32      40      48      56      64
295 1 laforge
 *
296 22 marcin
* ECC0 = 12 bits (from 1st ECC block) + 12 bits (from 2nd ECC block)
297 22 marcin
* ECC1 = 12 bits (from 3rd ECC block) + 12 bits (from 4th ECC block)
298 22 marcin
* ECC2 = 12 bits (from 5th ECC block) + 12 bits (from 6th ECC block)
299 22 marcin
* ECC2 = 12 bits (from 7th ECC block) + 12 bits (from 8th ECC block)
300 1 laforge
 */
301 1 laforge
302 22 marcin
</pre>
303 1 laforge
304 13 marcin
ECC layout information is pretty important as built-in bootloader in MT62xx chips
305 13 marcin
has hardware ECC enabled and it won't load code from NAND if ECC layout will
306 22 marcin
not match.
307 13 marcin
308 1 laforge
309 22 marcin
This layout is also important to properly dump or restore existing firmware.
310 22 marcin
311 22 marcin
312 1 laforge
NAND driver for Linux is under development.
313 1 laforge
314 1 laforge
315 22 marcin
h2. LCD
316 22 marcin
317 22 marcin
Sciphone G2 has LCD with 240x320 resolution.
318 22 marcin
319 22 marcin
320 1 laforge
Currently two different LCD controllers has been identified (on Sciphone G2):
321 22 marcin
* ILI9331
322 22 marcin
* ILI9325
323 22 marcin
These controllers are already supported in U-Boot.
324 1 laforge
325 22 marcin
326 1 laforge
To identify what kind of controller is in your device, just check U-Boot prints.
327 1 laforge
328 22 marcin
<pre>
329 13 marcin
DRAM:  32 MiB
330 13 marcin
NAND:  64 MiB
331 13 marcin
MMC:   msdc_mmc: 0
332 1 laforge
mtk_lcd INFO: Read LCD device code: 9331.
333 22 marcin
</pre>
334 1 laforge
335 22 marcin
U-Boot supports displaying bitmap on the screen, you just have to create bitmap in proper format.
336 1 laforge
337 1 laforge
338 22 marcin
By default U-Boot will build osmocomBB bitmap.
339 13 marcin
340 13 marcin
341 22 marcin
To convert your customized bitmap change type of bitmap to indexed.
342 22 marcin
343 22 marcin
344 22 marcin
Using GIMP, select "Image -> Mode -> Indexed...". Maximum number of colours is 240 (16 is used by internal U-Boot CMAP).
345 22 marcin
346 22 marcin
347 13 marcin
In existing U-Boot bmp logo converting tool (tools/bmp_logo.c) there are two issues:
348 22 marcin
* width of bitmap has to be aligned to 4 (otherwise padding bytes will be added and bitmap will be not properly displayed)
349 22 marcin
* size of bitmap can't be bigger than 65535 (LCD on Sciphone G2 is 240x320 = 76800)
350 22 marcin
Both issues are fixed on "uboot-mt623x":http://git.osmocom.org/gitweb?p=uboot-mt623x.git;a=summary.
351 13 marcin
352 13 marcin
353 22 marcin
MT6235 LCD controller shares data lines with NFI (NAND) controller. Currently there is no possibility to use NAND when LCD is used.
354 22 marcin
355 22 marcin
356 1 laforge
Frame buffer driver for Linux is under development.
357 13 marcin
358 13 marcin
359 22 marcin
h2. BBT handling
360 22 marcin
361 22 marcin
362 13 marcin
Comment from "sciphone_g2.h" configuration file explains how BBT is handled.
363 13 marcin
364 22 marcin
<pre>
365 13 marcin
/*
366 22 marcin
* Below option allows U-Boot to save BBT table in NAND.
367 22 marcin
* Without this option BBT table is created everytime when first nand
368 22 marcin
* command is executed (except "nand dump"). Full scanning of NAND
369 22 marcin
* takes long time and unnecessarily delays first command execution.
370 13 marcin
 *
371 22 marcin
* NOTE! This option is disabled by defaut as at startup it deletes last
372 22 marcin
* two blocks of NAND. Most of people run code from RAM and don't have
373 22 marcin
* NAND memory dumped yet. If you don't like to wait on first nand
374 22 marcin
* command, you should enable below option.
375 13 marcin
 */
376 13 marcin
#define MT62XX_NAND_BBT_IN_NAND
377 22 marcin
</pre>
378 13 marcin
379 13 marcin
380 22 marcin
h2. MTD partitions
381 22 marcin
382 22 marcin
383 13 marcin
Layout of MTD partitions is following:
384 13 marcin
385 22 marcin
<pre>
386 13 marcin
device nand0 <mt62xx_nand.0>, # parts = 5
387 13 marcin
 #: name                size            offset          mask_flags
388 13 marcin
 0: sbl                 0x00020000      0x00000000      0
389 13 marcin
 1: env                 0x00020000      0x00020000      0
390 13 marcin
 2: u-boot              0x00200000      0x00040000      0
391 13 marcin
 3: kernel              0x00200000      0x00240000      0
392 6 marcin
 4: root                0x03bc0000      0x00440000      0
393 22 marcin
</pre>
394 17 marcin
395 17 marcin
396 22 marcin
h2. Building images with [[OpenEmbedded]]
397 17 marcin
398 17 marcin
399 22 marcin
Currently the easiest way to build your own Linux distribution for Sciphone G2 is to use OE.
400 17 marcin
401 17 marcin
402 22 marcin
Setting up of OE is described "here":http://www.openembedded.org/index.php/Getting_started.
403 22 marcin
404 22 marcin
405 22 marcin
To have Sciphone G2 target and Linux kernel with U-Boot from [[OsmocomBB]] repositories, you need to apply patch from "here":http://downloads.qi-hardware.com/people/marcin/.
406 22 marcin
407 22 marcin
408 22 marcin
Under above link you can also find example config file for OE build.
409 22 marcin
410 22 marcin
411 17 marcin
So far following images has been successfully run on Sciphone G2:
412 17 marcin
413 22 marcin
<pre>
414 17 marcin
minimal-image
415 17 marcin
opie-image-16mb
416 17 marcin
opie-image
417 17 marcin
x11-image
418 22 marcin
</pre>
419 17 marcin
After successfull build of image, following directory will contain U-Boot, Linux kernel and file system image:
420 17 marcin
421 22 marcin
<pre>
422 18 marcin
/YOUR_BUILD_DIRECTORY/deploy/images/sciphone_g2/
423 22 marcin
</pre>
424 17 marcin
425 22 marcin
U-Boot and Linux kernel are built from latest sources found in [[OsmocomBB]] repositories.
426 17 marcin
427 17 marcin
428 22 marcin
h2. Running Linux distro
429 22 marcin
430 22 marcin
431 25 zecke
{{thumbnail(scig2_opie.jpg)}}
432 17 marcin
433 22 marcin
It's possible to run any Linux distribution without flashing Sciphone's original firmware.
434 17 marcin
435 17 marcin
436 22 marcin
To do this, you need to prepare microSD card and use osmocon loader to load u-Boot image to RAM.
437 17 marcin
438 17 marcin
439 22 marcin
Current images for U-Boot and Root File Systems can be found "here":http://downloads.qi-hardware.com/people/marcin/.
440 17 marcin
441 22 marcin
First of all ext3 partition has to be created on SD card.
442 22 marcin
443 22 marcin
444 22 marcin
*Note!!! Followig method will erase all data on your SD card.*
445 22 marcin
446 22 marcin
<pre>
447 17 marcin
sudo fdisk /dev/sdbX
448 17 marcin
press p (prints partition table)
449 17 marcin
press d (deletes partition table)
450 17 marcin
press n (adds new partition)
451 17 marcin
sudo mkfs.ext3 /dev/sdbX
452 22 marcin
</pre>
453 17 marcin
454 17 marcin
Next step is to copy built image to SD card:
455 17 marcin
456 22 marcin
<pre>
457 17 marcin
sudo dd if=<path_to_ext3_image_file> of=/dev/sdbx
458 22 marcin
</pre>
459 19 marcin
460 22 marcin
When operation is finished, you can pull out SD card from PC and insert it to Sciphone.
461 20 marcin
462 20 marcin
463 22 marcin
Now you can load U-Boot image using osmocon tool.
464 20 marcin
465 20 marcin
466 22 marcin
When U-Boot starts, it loads /boot/uImage kernel file from SD card to RAM and boots it (OE automatically copies built kernel to /boot directory).
467 21 marcin
468 20 marcin
469 22 marcin
After that you should see [[OsmocomBB]] splash screen with "Please wait ..." text and after few moments an OPIE welcome screen should appear.
470 19 marcin
471 22 marcin
472 22 marcin
*Note!!! Initial boot takes much longer time than next ones.*
473 22 marcin
474 22 marcin
If your screen is not properly calibrated, execute *ts_calibrate* command from shell which will recalibrate your touchscreen.
475 22 marcin
476 22 marcin
477 22 marcin
h2. Additional equipment
478 22 marcin
479 22 marcin
480 22 marcin
Sciphone G2 has microSD card slot in hardly available place.
481 22 marcin
482 22 marcin
During development process you'll waste a lot of time to pull out and put in microSD card with new software.
483 22 marcin
484 1 laforge
Below picture shows home made microSD card extension cable which makes SD card changes much faster.
485 1 laforge
486 25 zecke
{{thumbnail(microsd_extension.jpg)}}
487 25 zecke
{{thumbnail(scig2_microsd.jpg)}}
488 1 laforge
489 1 laforge
490 22 marcin
h2. Links
491 1 laforge
492 28 osmith
- "video showing Sciphone G2 running Angstrom Linux with OPIE":http://www.youtube.com/watch?v=-_guRruQi0I
493 22 marcin
494 28 osmith
- "video showing Sciphone G2 running Linux kernel":http://www.youtube.com/watch?v=w_Iwsckm7Ko
495 22 marcin
496 28 osmith
- "Sciphone G2 binary images and patches":http://downloads.qi-hardware.com/people/marcin/
Add picture from clipboard (Maximum size: 48.8 MB)