FreeCalypso > hg > fc-am-toolkit
view doc/Pirelli-VPM-howto @ 27:9e7ca43275eb
doc/Pirelli-VPM-howto: new article
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 12 Jun 2023 04:21:16 +0000 |
parents | |
children |
line wrap: on
line source
Running FreeCalypso VPM firmware on a Pirelli DP-L10 phone is much easier and much more convenient than doing the same on Mot C1xx. There are two principal reasons for this difference: * Pirelli DP-L10 has huge RAM (8 MiB), allowing our FC aftermarket fw to run entirely in RAM (fc-xram) without flashing. * In the flash layout used by official fw, there is an area that is used only for high-level firmware updates over WLAN (as opposed to "surgical" firmware reflashing with fc-loadtool) and remains unused otherwise. We put our aftermarket FFS in this part of the flash, and this aftermarket FFS just stays there, untouched by Pirelli's official fw, in between fc-xram sessions that run FC VPM fw. This article explains how to initialize the aftermarket FFS for FreeCalypso fw on your Pirelli phone, and how to actually run the VPM fw afterward. Required software components ============================ You will need the following 4 FreeCalypso software packages installed on your host machine: 1) FC host tools base package: ftp://ftp.freecalypso.org/pub/GSM/FreeCalypso/fc-host-tools-latest.tar.bz2 2) FFS data bundle add-on: ftp://ftp.freecalypso.org/pub/GSM/FreeCalypso/ffs-data-bundle-latest.tar.bz2 3) FFS editing agent target binaries: ftp://ftp.freecalypso.org/pub/GSM/FreeCalypso/ffs-editor-latest.tar.bz2 4) The present fc-am-toolkit package. All 4 packages install all of their files under the /opt/freecalypso directory tree defined by the Mother, and you only need to do this host software installation once (or when updates come out), irrespective of how many phones of various kinds (both Pirelli DP-L10 and Mot C1xx) you are going to work with. Working with Pirelli phones: general principles =============================================== In order to work with a Pirelli DP-L10 phone in any interesting way, you need to connect it to your host computer via USB. However, USB VBUS rail is also used as the charging power source on this phone, hence any time USB is connected, the Calypso+Iota chipset gets the "charger inserted" condition applied to it, and is not allowed to be fully switched off. The solution adopted by the Mother of FreeCalypso consists of using the "booted for charging only" mode of Pirelli's official fw, plus the -Petmoff mechanism added to loadtools in fc-host-tools-r19. Like all standard handset firmwares, Pirelli's official fw has two fundamental operating modes in terms of power on/off control: it can be fully booted, in which case GSM functionality is brought up (network registration, or if there is no SIM, camping on whatever cell it can find for the possibility of an emergency call), or it can be booted for charging only. If you plug USB into a fully switched-off Pirelli phone, the firmware will boot, but it won't do anything other than manage the charging process - that is what we call "booted for charging only" mode. Another way to enter this mode is to plug USB into the phone while it is in fully booted state (with menus working normally), and then execute the power-off sequence. The firmware will actually command the same regular soft power-off as it would in the absence of charging, but the presence of VCHG (coming from USB VBUS) causes the chipset to immediately do another switch-on - and then the firmware boots again, this time for charging only. When the firmware is booted for charging only (and you don't give it the additional button press that ungates full boot), all GSM functionality is off (the SIM interface is powered off, and no radio bring-up is done, not even for emergency mode), but the RVTMUX interface is fully working. Pirelli's fw includes ETM, and we can send it an ETM ABB write (abbw) command that writes to the VRPCDEV register in the Iota chip, commanding switch-off. We can make this intrusion into Pirelli's fw in any state, but doing so in the regular fully booted state (basically killing the running fw by brute force) is obviously bad. However, when the fw is booted for charging only, killing it in this manner causes no harm, as there is nothing running besides the charging process - and the Iota chip does turn off charging when this switch-off is executed. Thus comes our general principle: whenever you wish to use your Pirelli DP-L10 phone for playing with FreeCalypso VPM, begin by putting it into the "booted for charging only" state. If you started with the phone off, simply plug in USB but don't press the "On" button, and if you started with the phone on, you can plug in USB and then turn it off. When the phone is in this state and you need to run fc-loadtool, fc-simint, fc-xram or any other loadtools program, run your fc-loadtool or fc-xram etc command with an added -Petmoff option, and then you don't need to do any manual manipulations on the phone: the Calypso boot ROM entry will happen as soon as you execute the command on the host. And when your fc-loadtool or fc-simint session cleanly finishes, or when you finish an FC VPM fw session with fc-shell poweroff or AT@POFF, the phone will return to the same "booted for charging only" state - very convenient! This "booted for charging only" state, running Pirelli's official fw in the flash, thus becomes the "ground" state for FreeCalypso manipulations, corresponding to the fully switched-off state on a Mot C1xx phone or a traditional TI/FC dev board. Aftermarket FFS initialization ============================== To initialize the aftermarket FFS for FC firmware on your Pirelli phone, execute this command: pirelli-init-fc-ffs /dev/ttyUSB0 (Change ttyUSB0 to other ttyUSBx if needed.) This command is a shell script, the script begins with an fc-loadtool batch operation erasing the aftermarket FFS area, and that fc-loadtool batch command invokation is made with -Petmoff option described in the previous section - thus the phone needs to be in "booted for charging only" mode when you run that pirelli-init-fc-ffs command. After erasing the aftermarket FFS area with fc-loadtool, our pirelli-init-fc-ffs script runs our FFS editing agent via fc-xram, and then does the actual FFS initialization via fc-fsio. An fc-fsio command script stashed in /opt/freecalypso/scripts/pirelli-am-ffsinit (installed by the present fc-am-toolkit package) contains the actual magic commands, and these commands populate the FFS with files that come from FC FFS data bundle package. You can rerun this pirelli-init-fc-ffs operation at any time, if you need to reset the aftermarket FFS to its pristine state or if you got an updated version of the relevant files in the FFS data bundle. Running VPM firmware ==================== To run FC VPM firmware, once your Pirelli phone is in "booted for charging only" mode and the aftermarket FFS has been initialized as above, execute a command of this form: fc-xram -h pirelli -Petmoff /dev/ttyUSB0 path/to/ramimage.srec rvinterf The FC firmware image needs to be ramimage.srec; to build this image format (if you are compiling your own fw, rather than using a released build), run 'make ram' in the firmware build directory. (By default the firmware build system produces flash images on all targets, but on the Pirelli target you really don't want to flash this fw - hence the need to run 'make ram' explicitly.) When you run the above command, the firmware image will be loaded into XRAM and jumped to. The command is structured so that fc-xram will then pass the serial communication channel to rvinterf, and from that point on you have a regular rvinterf session, talking to an in-RAM (not flashed) firmware instance. The principles and guidelines for exercising the GSM MS as a VPM are the same as described in the C1xx-VPM-usage article for C1xx phones - please refer to that article. Instead of checking for a present rvinterf process via keepalive packets, the Pirelli DP-L10 version of our VPM firmware periodically (every 10 s) checks for still-present USB connection, by checking the "charger present" status bit in Iota VRPCSTS register. If it detects USB unplug, it performs an immediate power-off - and because the firmware is not flashed, only loaded in RAM, the next boot cycle (be it the power button or USB plug-in) will return the phone to its regular official fw.