|
Forum Index : Microcontroller and PC projects : Is it possible to ‘backup’ everything in a PicoMite into a single file
| Author | Message | ||||
| WhiteWizzard Guru Joined: 05/04/2013 Location: United KingdomPosts: 2966 |
Probably a question for Peter, but will ask here hoping someone else may have some experience. I have an almost finished product that is based around a PicoMite (standard RP2350 firmware). Throughout development, I updated the firmware (typically to test Peter’s latest set of ‘goodies’), and OPTIONs were tweaked as I adjusted things. I also have a data file stored in the built-in flash drive that is used by my code. If I were to build another unit, then I would manually do the following: 1. Nuke Pico 2. Load standard RP2350 firmware (.uf2) 3. Configure OPTIONs manually (TeraTerm into Pico) 4. Load data-file into Pico (TeraTerm) 5. Save data file to drive A: 6. Load program code into Pico (TeraTerm) 7. RUN program….. Doing this as a one-off is fine, but the question is to ask if there is any way to take a ‘snapshot’ of everything in a configured Pico, generate a single file (.uf2?), and then simply load that into a ‘blank’ Pico so that everything is ‘pre-configured’. Hope this makes sense; and appreciate any help pointing me towards a solution…… |
||||
| karlelch Guru Joined: 30/10/2014 Location: GermanyPosts: 324 |
Hi WhiteWizzard Some time ago, I wrote a Python tool („picom“) to backup and restore a picomite installation. It saves everything in a folder on the connected PC (not a single file, though). I use it for my projects, maybe you want to have a look. https://github.com/teuler/picom Best Thomas |
||||
| matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 11247 |
I haven't done it but Geoff certainly has and it is definitely doable to create a uf2 ready to go. |
||||
| WhiteWizzard Guru Joined: 05/04/2013 Location: United KingdomPosts: 2966 |
Thanks Peter. I think I may have read something in his original Pico game console about this so will have a look when back home. Maybe Geoff can steer me on this if he sees this thread. |
||||
| Frank N. Furter Guru Joined: 28/05/2012 Location: GermanyPosts: 1083 |
We used to have a program here that allowed you to read out an RP2040 and use it to generate a uf2 file. I'm not sure if that works with a RP2350, though... Frank |
||||
| toml_12953 Guru Joined: 13/02/2015 Location: United StatesPosts: 607 |
I got no errors in any of the install steps. Even though I did the pip install pyserial and even tried pip install serial, I get ModuleNotFoundError: No module named 'serial' I use Win 11. Footnote added 2026-04-25 05:27 by toml_12953 Ignore the above. I got out of PowerShell and back in then all the modules loaded properly. The list of serial ports only lists 5 although it finds 14. No big deal since the PicoCalc is always on COM5. I kept editing picom.py and not getting anything to work. Finally I saw that I have to change picom.toml to actually change the parameters. Everything works, now. picom.toml is an easy name for me to remember. Tom Lake |
||||
| ebbandflow Regular Member Joined: 31/08/2023 Location: United StatesPosts: 43 |
I have not tried this (yet) but I read about picotool here: https://www.thebackshed.com/forum/ViewTopic.php?FID=16&TID=18048 |
||||
| toml_12953 Guru Joined: 13/02/2015 Location: United StatesPosts: 607 |
I'm getting close but now I get this (I'm showing just the first part): PicoM v0.1.9 (beta) Save options to "202604241532.opt" file ... Save library, if exists, to `202604241532.lib` ... Retrieving file tree from `B:` : Parsing `B:/` ... Warning: Entry #0 (`B:/`) not recognized. Warning: Entry #1 (`ine.mp3`) not recognized. Warning: Entry #4 (`s`) not recognized. Warning: Entry #6 (`bas`) not recognized. Warning: Entry #8 (`e_johnybot.nes`) not recognized. Warning: Entry #11 (`as`) not recognized. Warning: Entry #13 (`as`) not recognized. Warning: Entry #14 (`11:47 22-04-2026 383 Going Up.b`) not recognized. Warning: Entry #15 (`as`) not recognized. Warning: Entry #19 (`s`) not recognized. Warning: Entry #21 (`as`) not recognized. Warning: Entry #23 (`txt`) not recognized. 13:59 27-11-2023 2408 Lemmings.t`) not recognized. Warning: Entry #25 (`xt`) not recognized. Warning: Entry #29 (`Test.bas`) not recognized. Warning: Entry #35 (`s`) not recognized. Warning: Entry #39 (`mp`) not recognized. Warning: Entry #41 (`as`) not recognized. 23:22 10-06-2025 135 savage.bas`) not recognized. Warning: Entry #51 (`.bas`) not recognized. Warning: Entry #53 (`02R.bas`) not recognized. Warning: Entry #55 (`.bas`) not recognized. Warning: Entry #57 (`bas`) not recognized. Warning: Entry #60 (`s.txt`) not recognized. |
||||
| Geoffg Guru Joined: 06/06/2011 Location: AustraliaPosts: 3359 |
This describes how I do it: Instructions.pdf Geoff Graham - http://geoffg.net |
||||
| WhiteWizzard Guru Joined: 05/04/2013 Location: United KingdomPosts: 2966 |
Many-Thanks for all the replies. Geoff - I will try following your clear instructions to generate an .uf2 file over the weekend; hopefully it will work for me here and generate what is needed. Thanks again. |
||||
| phil99 Guru Joined: 11/02/2018 Location: AustraliaPosts: 3163 |
Geoff's "clear instructions" are exactly that. Worked first try. Worth including in the "Extra Documentation" folder. Edited 2026-04-25 16:30 by phil99 |
||||
| karlelch Guru Joined: 30/10/2014 Location: GermanyPosts: 324 |
Hi WhiteWizzard, glad you found a solution with the uf2 files. Sorry for the trouble with picom. I updated picom (v0.1.11) and tested it for my use case but not with b:\ as my systems usually don't have an SD card ... I will look into that in the future. Best Thomas |
||||
| toml_12953 Guru Joined: 13/02/2015 Location: United StatesPosts: 607 |
Even the 0.1.11 version seems to have a problem with subdirectories. It thinks many (but not all) files are in a different subdirectory than they actually are. The ft (filetree) command shows many files under the wrong subdirectory and the backup command can't find those files. |
||||
| EDNEDN Senior Member Joined: 18/02/2023 Location: United StatesPosts: 290 |
You are better off using PicoTools and generating a .UF2 to save your installation. I use a similar sequence of commands that Geoffg's instructions describe to backup a PicoMite all the time. You can take a snap shot of everything in your Pico and either restore that Pico back to that state or clone that Pico unto another Pico. It is a very clean and reliable way to get everything in the Pico. Edited 2026-04-26 14:14 by EDNEDN |
||||
| karlelch Guru Joined: 30/10/2014 Location: GermanyPosts: 324 |
Hi toml_12953, could you give me an example? On A: I have not problems with directories (see below). In any case, as I said before, the uf2 solution seems ideal for WhiteWizzard's use case. I often want to change the firmware - trying out the latest versions - and then want to make a backup that I can restore after the firmware update. Best Thomas Restore: (picom) PS F:\Dropbox\__GIT\picom> python picom.py -t -s "COM5" -n ".\miiha_202604251745\" r PicoM v0.1.11 (beta) # Getting command line arguments ... done. Trying to kill open terminal ... # Checking for PicoMite ... done. Retrieving key data from PicoMite ....... done. # Check drive ... # Locate backup ... Retrieving file tree from `F:\Dropbox\__GIT\picom\miiha_202604251745` : Parsing `F:\Dropbox\__GIT\picom\miiha_202604251745` ... Parsing `F:\Dropbox\__GIT\picom\miiha_202604251745\vl53l5cx` ... Parsing `F:\Dropbox\__GIT\picom\miiha_202604251745\vl53l5cx\sub2` ... Parsing `F:\Dropbox\__GIT\picom\miiha_202604251745\vl53l5cx\sub_directory` ... Parsing `F:\Dropbox\__GIT\picom\miiha_202604251745\vl53l5cx\sub2\sub3` ... 13 file(s) and 4 folder(s) found. Restoring backup `F:\Dropbox\__GIT\picom\miiha_202604251745` to `PicoMite` @`COM5` : Continue (y/n)? y Kill everything on drive `A:` (y/n)? y Formatting drive `A:` ... # Sending `drive "A:/FORMAT"` ... # `.fm` : Size: 128 bytes (= 1 packages) # Send `xmodem receive ".fm"` ... Restore [==================================================] 100% `.fm` - complete (128 of 128 bytes). # `202604251745.lib` : Size: 26368 bytes (= 206 packages) # Send `xmodem receive "202604251745.lib"` ... Restore [==================================================] 100% `202604251745.lib` - complete (26368 of 26368 bytes). # `bootcount` : Size: 128 bytes (= 1 packages) # Send `xmodem receive "bootcount"` ... Restore [==================================================] 100% `bootcount` - complete (128 of 128 bytes). # `lib_vl53.bas` : Size: 40192 bytes (= 314 packages) # Send `xmodem receive "lib_vl53.bas"` ... Restore [==================================================] 100% `lib_vl53.bas` - complete (40192 of 40192 bytes). # `miiha.bas` : Size: 32896 bytes (= 257 packages) # Send `xmodem receive "miiha.bas"` ... Restore [==================================================] 100% `miiha.bas` - complete (32896 of 32896 bytes). # `tof.dat` : Size: 2048 bytes (= 16 packages) # Send `xmodem receive "tof.dat"` ... Restore [==================================================] 100% `tof.dat` - complete (2048 of 2048 bytes). Make folder `vl53l5cx` ... # Send `mkdir "vl53l5cx"` ... # `vl53l5cx/firmware.bin` : Size: 86016 bytes (= 672 packages) # Send `xmodem receive "vl53l5cx/firmware.bin"` ... Restore [==================================================] 100% `vl53l5cx/firmware.bin` - complete (86016 of 86016 bytes). # `vl53l5cx/nvm_cmd.bin` : Size: 128 bytes (= 1 packages) # Send `xmodem receive "vl53l5cx/nvm_cmd.bin"` ... Restore [==================================================] 100% `vl53l5cx/nvm_cmd.bin` - complete (128 of 128 bytes). Make folder `vl53l5cx/sub2` ... # Send `mkdir "vl53l5cx/sub2"` ... Make folder `vl53l5cx/sub_directory` ... # Send `mkdir "vl53l5cx/sub_directory"` ... # `vl53l5cx/xtalk.bin` : Size: 896 bytes (= 7 packages) # Send `xmodem receive "vl53l5cx/xtalk.bin"` ... Restore [==================================================] 100% `vl53l5cx/xtalk.bin` - complete (896 of 896 bytes). # `vl53l5cx/sub2/202604251745.opt` : Size: 896 bytes (= 7 packages) # Send `xmodem receive "vl53l5cx/sub2/202604251745.opt"` ... Restore [==================================================] 100% `vl53l5cx/sub2/202604251745.opt` - complete (896 of 896 bytes). Make folder `vl53l5cx/sub2/sub3` ... # Send `mkdir "vl53l5cx/sub2/sub3"` ... # `vl53l5cx/sub_directory/202604251745_filetree.txt` : Size: 206 bytes (= 2 packages) # Send `xmodem receive "vl53l5cx/sub_directory/202604251745_filetree.txt"` ... Restore [==================================================] 100% `vl53l5cx/sub_directory/202604251745_filetree.txt` - complete (256 of 206 bytes). # `vl53l5cx/sub_directory/202604251745_options.txt` : Size: 291 bytes (= 2 packages) # Send `xmodem receive "vl53l5cx/sub_directory/202604251745_options.txt"` ... Restore [==================================================] 100% `vl53l5cx/sub_directory/202604251745_options.txt` - complete (384 of 291 bytes). # `vl53l5cx/sub2/sub3/conf.bin` : Size: 1024 bytes (= 8 packages) # Send `xmodem receive "vl53l5cx/sub2/sub3/conf.bin"` ... Restore [==================================================] 100% `vl53l5cx/sub2/sub3/conf.bin` - complete (1024 of 1024 bytes). Restore library from `202604251745.lib` (y/n)? n Backup `F:\Dropbox\__GIT\picom\miiha_202604251745` successfully restored. 13 file(s) copied, 4 folder(s) created; 0 failed 2 backup management files ignored Trying to launch terminal programm ... # Launching `C:\Program Files (x86)\teraterm5\ttermpro.exe` ... # Done. Check: (picom) PS F:\Dropbox\__GIT\picom> python picom.py -t -s "COM5" ft PicoM v0.1.11 (beta) # Getting command line arguments ... done. Trying to kill open terminal ... # Checking for PicoMite ... done. Retrieving file tree from `A:` : # Sending `files "A:/"` ... # Sending `files "A:/vl53l5cx/"` ... # Sending `files "A:/vl53l5cx/sub2/"` ... # Sending `files "A:/vl53l5cx/sub2/sub3/"` ... # Sending `files "A:/vl53l5cx/sub_directory/"` ... 13 file(s) and 4 folder(s) found. Content of `A:` : ├──vl53l5cx │ ├──sub2 │ │ ├──sub3 │ │ │ └──conf.bin │ │ └──202604251745.opt │ ├──sub_directory │ │ ├──202604251745_filetree.txt │ │ └──202604251745_options.txt │ ├──firmware.bin │ ├──nvm_cmd.bin │ └──xtalk.bin ├──.fm ├──202604251745.lib ├──bootcount ├──lib_vl53.bas ├──miiha.bas └──tof.dat Trying to launch terminal programm ... # Launching `C:\Program Files (x86)\teraterm5\ttermpro.exe` ... # Done. Backup: (picom) PS F:\Dropbox\__GIT\picom> python picom.py -t -s "COM5" -n "miiha" b PicoM v0.1.11 (beta) # Getting command line arguments ... done. Trying to kill open terminal ... # Checking for PicoMite ... done. # Check drive ... # Create unique local folder for backup ... # Get option list ... # Sending `option list` ... Save options to "202604260741.opt" file ... # Sending `option disk save "202604260741.opt"` ... Save library, if exists, to `202604260741.lib` ... # Sending `library disk save "202604260741.lib"` ... Retrieving file tree from `A:` : Parsing `A:/` ... # Sending `files "A:/"` ... # Sending `files "A:/vl53l5cx/"` ... # Sending `files "A:/vl53l5cx/sub2/"` ... # Sending `files "A:/vl53l5cx/sub2/sub3/"` ... # Sending `files "A:/vl53l5cx/sub_directory/"` ... 15 file(s) and 4 folder(s) found. Create backup of PicoMite @`COM5` : Backup folder : `F:\Dropbox\__GIT\picom\miiha_202604260741` Create local folder `F:\Dropbox\__GIT\picom\miiha_202604260741\vl53l5cx` Create local folder `F:\Dropbox\__GIT\picom\miiha_202604260741\vl53l5cx\sub2` Create local folder `F:\Dropbox\__GIT\picom\miiha_202604260741\vl53l5cx\sub2\sub3` # `vl53l5cx/sub2/sub3/conf.bin` : Size: 1024 bytes (= 8 packages) # Send `xmodem s "vl53l5cx/sub2/sub3/conf.bin"` ... Backup [==================================================] 100% `vl53l5cx/sub2/sub3/conf.bin` - complete (1024 of 1024 bytes). # `vl53l5cx/sub2/202604251745.opt` : Size: 896 bytes (= 7 packages) # Send `xmodem s "vl53l5cx/sub2/202604251745.opt"` ... Backup [==================================================] 100% `vl53l5cx/sub2/202604251745.opt` - complete (896 of 896 bytes). Create local folder `F:\Dropbox\__GIT\picom\miiha_202604260741\vl53l5cx\sub_directory` # `vl53l5cx/sub_directory/202604251745_filetree.txt` : Size: 256 bytes (= 2 packages) # Send `xmodem s "vl53l5cx/sub_directory/202604251745_filetree.txt"` ... Backup [==================================================] 100% `vl53l5cx/sub_directory/202604251745_filetree.txt` - complete (256 of 256 bytes). # `vl53l5cx/sub_directory/202604251745_options.txt` : Size: 384 bytes (= 3 packages) # Send `xmodem s "vl53l5cx/sub_directory/202604251745_options.txt"` ... Backup [==================================================] 100% `vl53l5cx/sub_directory/202604251745_options.txt` - complete (384 of 384 bytes). # `vl53l5cx/firmware.bin` : Size: 86016 bytes (= 672 packages) # Send `xmodem s "vl53l5cx/firmware.bin"` ... Backup [==================================================] 100% `vl53l5cx/firmware.bin` - complete (86016 of 86016 bytes). # `vl53l5cx/nvm_cmd.bin` : Size: 128 bytes (= 1 packages) # Send `xmodem s "vl53l5cx/nvm_cmd.bin"` ... Backup [==================================================] 100% `vl53l5cx/nvm_cmd.bin` - complete (128 of 128 bytes). # `vl53l5cx/xtalk.bin` : Size: 896 bytes (= 7 packages) # Send `xmodem s "vl53l5cx/xtalk.bin"` ... Backup [==================================================] 100% `vl53l5cx/xtalk.bin` - complete (896 of 896 bytes). # `.fm` : Size: 64 bytes (= 0 packages) # Send `xmodem s ".fm"` ... Backup [==================================================] 100% `.fm` - complete (128 of 64 bytes). # `202604251745.lib` : Size: 26368 bytes (= 206 packages) # Send `xmodem s "202604251745.lib"` ... Backup [==================================================] 100% `202604251745.lib` - complete (26368 of 26368 bytes). # `202604260741.lib` : Size: 26188 bytes (= 205 packages) # Send `xmodem s "202604260741.lib"` ... Backup [==================================================] 100% `202604260741.lib` - complete (26240 of 26188 bytes). # `202604260741.opt` : Size: 896 bytes (= 7 packages) # Send `xmodem s "202604260741.opt"` ... Backup [==================================================] 100% `202604260741.opt` - complete (896 of 896 bytes). # `bootcount` : Size: 128 bytes (= 1 packages) # Send `xmodem s "bootcount"` ... Backup [==================================================] 100% `bootcount` - complete (128 of 128 bytes). # `lib_vl53.bas` : Size: 40192 bytes (= 314 packages) # Send `xmodem s "lib_vl53.bas"` ... Backup [==================================================] 100% `lib_vl53.bas` - complete (40192 of 40192 bytes). # `miiha.bas` : Size: 32896 bytes (= 257 packages) # Send `xmodem s "miiha.bas"` ... Backup [==================================================] 100% `miiha.bas` - complete (32896 of 32896 bytes). # `tof.dat` : Size: 2048 bytes (= 16 packages) # Send `xmodem s "tof.dat"` ... Backup [==================================================] 100% `tof.dat` - complete (2048 of 2048 bytes). Backup `miiha_202604260741` successfully created. 15 file(s) and 4 folder(s) saved; 0 failed Trying to launch terminal programm ... # Launching `C:\Program Files (x86)\teraterm5\ttermpro.exe` ... # Done. (picom) PS F:\Dropbox\__GIT\picom> |
||||
| The Back Shed's forum code is written, and hosted, in Australia. | © JAQ Software 2026 |