How to build the firmware.bin file

In an attempt to answer my own question, I tired (from the top level Firmware directory):

C:\Users\Frank\.platformio\penv\Scripts\platformio.exe run --target clean
C:\Users\Frank\.platformio\penv\Scripts\platformio.exe run

But the generated firmware.bin file was different (and of a slightly different size) from the one which is generated by building from the VS Code GUI (Terminal/Run Taskā€¦/PlatformIO: Build Firmware). I didnā€™t try to run it on the phone.

So I seem to have failed to find a command line that exactly duplicates what the GUI does. Enlighten me Russ :slightly_smiling_face:

Yes @RussNelson, weā€™re all eager to know! :smiley:

Thank you guys for being such a big part of the community! :partying_face:

Yes, itā€™s just following the combination of the ā€œReflash factory firmwareā€ instructions and Frankā€™s instructions then running platformio run. That builds the .bin file, then you program it into the phone using the esptool.py command.

I havenā€™t looked into why the executable is yet a third size: 1547424

1 Like

Because i want to change some thinks in firmware is there any guide with steps how to compile it ? I have downloaded the vs code but i am confused how to do it.

Absolutely everything that is necessary to know can be found in this topic (in which you are asking this question) and this topic: Ringo Reflash factory firmware. In particular, see the first 11 steps of the post I made above (in which there are 12 numbered paragraphs); and of course the various mis-steps/gotchas in the posts leading up to that post. Read it all very carefully and youā€™ll be able to build and flash a custom firmware.bin from the two repositories you download from the github website (CircuitMess Ringo firmware and CircuitMess Ringo). Of course the firmware is up to v1.0.5 now as opposed to 1.0.1 when all of the above posts were written, but just grab the latest tag from each.

Thereā€¦fixed that for you. :innocent:

Yeah, fumbly fingers in the morning! Fixed now.

I have just compiled ( error , warning free ) firmware.bin :slight_smile:
The file size is 1.46 exactly the same as the firmware in the [CircuitMess-Ringo-firmware]
Thank you for your time and for your help.

Now i am waiting info about the module :yum:

Unfortunately, I think youā€™re going to be a little disappointed about that one unless Robert comes up with some miracle that was not possible a year ago. Stay tuned, Iā€™m sure heā€™ll get back to you.

I have noticed a strange thing.

I have changed the word ā€œHoldā€ from the " Hold ā€œ#ā€ to unlock " to capital letters so i can test the compiling and upload feature of the vscode.

The phone is working perfect. . But the problem is when i have tried to run a game after the LOADING NOW prompt the phone resets and halt at the spash screen.
with the Loadingā€¦ message.

I must re-flash the phone to work again. except the game loading, the phone is working ok and i can access sd card. for example load pictures etc. i have problem only for the apps ( games ). Is something that i must change during the compiling ?

Also i have noticed that after the re-flash the phone does not start from the setup wizard but from sim pin security prompt.

To understand. What is the procedure that phone do when i select a game?

First is loading it.
Then it exits the phone app and reboots to run the game ?

Thank you.

It looks like you might be experiencing the same teething issues I ran into when I first started writing my first Ringo app.

The Ringo uses a two partition setup: one is the running partition (call it A for this example) and the other is non-running (B for this example). When Ringo downloads a firmware update or, indeed, loads an app or game from the SD card, it flashes the .bin to the non-running B partition, changes the EEPROM flags to specify which partition (B) is used on next boot, then initiates a reboot to load up the partition B you just flashed. The formerly running partition A still houses the Ringo Loader when youā€™ve loaded up a game or app into B. You call out to mp.loader() manually or via homePopup() screen to return to Ringo Loader, which effectively just switches the EEPROM flags to specify the A partition as next boot and reboots (after properly shutting down the SIM module). You CANNOT flash the running partition, hence the two identically sized partitions. Itā€™s actually a really clever use of the two-partition setup the way Ringo launches apps from the SD card and then returns to the Ringo launcher

Hereā€™s some minimum things you should be including in your apps to ensure they operate properly with the Ringo:

#include <MAKERphone.h>
MAKERphone mp;

void setup() {
  Serial.begin(115200);
  mp.begin(1);  // This inits all the necessary Ringo stuff
  mp.homePopupEnable(1);   // Enable homePopup(), the screen that comes up when 
                           // you press BTN_HOME, so you can change settings and 
                           // return to Ringo loader with ease.
  mp.inCall = 0;  // This will enable the device/display sleep timeout
                  // Setting to 1 disables sleep timeout
}
1 Like

Hi Petros,
Do not use the upload feature of vscode. I was never able to get it to work properly and I donā€™t think it understands the Ringoā€™s partitioning. Instead follow steps 8 through 10 I outlined above to use vscode to build firmware.bin, then copy that file to another directory that contains the standard Ringo boot_app0.bin, bootloader_dio_80m.bin, and partitions.bin files and to do the actual flash by running esptool.py yourself. I think that should solve all your problems.

See Ringo Reflash factory firmware for more detailed instructions on doing the manual re-flash.

1 Like

Thank you for your answer.

I have made the flash folder with all the files that i need as you told me.

I have installed the python ide but i canā€™t install the esptool.py.

I have read the Ringo Reflash factory firmware but i am still confused how to install the esptool.py

Can you help me with that ?

From a DOS box run as administrator,
pip install esptool

And if you still canā€™t find it on your computer, hereā€™s a copy:
esptool.zip (43.5 KB)

All ok i have followed the guide from https://cyberblogspot.com/how-to-install-esptool-on-windows-10/

The phone is working perfect now . Something was messed up with the vscode upload command

THANK YOU for one more time. :grin:

Yes, it doesnā€™t have the other 3 files correct for the Ringo, so the Ringo flash partitioning scheme (where the main firmware is kept in one partition and apps loaded from the menu are put in a separate partition) is not preserved. I tried it but the firmware had strange behavior, so went with the esptool method.

Soā€¦can we get one comprehensive reply - ā€œa reply to end all repliesā€ - here that gives the full instruction list, start to finish, for building and flashing custom firmware? Bouncing between two threads and sifting through all these posts is giving me a headache, and I havenā€™t even gotten to the actual testing a build part yet. :face_with_head_bandage: Hell, it might be best to start an entirely new definitive tutorial thread and merely link back to this one for expanded discussion purposes.

Just be thoughtful in writing it, give it a nice big header line to start the reply so it stands out, and include caveats where they occur so it doesnā€™t need re-written again any time soon. :slight_smile:

Iā€™m guessing between @frankprindle and @Petros, one of you has this down to a precise science by now. haha

(Yeah, Iā€™ve officially set aside WiFiTest for the time being and am shifting my focus to the firmware changes I wanna makeā€¦yā€™all are in trouble now! :smirk:)

Well, TWM, I think Iā€™ll give this a try. I have a virgin Windows 10 laptop that has never seen Arduino, VS Code, or Makerphone. Iā€™ll try to start from scratch and document my steps along the way to getting it to build a customized version the 1.0.5 firmware. Might take me a few days - let me give it a shot.