{"id":21083609,"url":"https://github.com/initdc/libreboot_pico-serprog","last_synced_at":"2025-10-12T19:42:54.287Z","repository":{"id":243178421,"uuid":"811689368","full_name":"initdc/libreboot_pico-serprog","owner":"initdc","description":null,"archived":false,"fork":false,"pushed_at":"2024-06-07T05:55:09.000Z","size":57,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-14T05:09:49.251Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/initdc.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-07T05:28:58.000Z","updated_at":"2024-06-07T05:49:51.000Z","dependencies_parsed_at":"2024-06-07T07:01:38.610Z","dependency_job_id":null,"html_url":"https://github.com/initdc/libreboot_pico-serprog","commit_stats":null,"previous_names":["initdc/libreboot_pico-serprog"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/initdc/libreboot_pico-serprog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/initdc%2Flibreboot_pico-serprog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/initdc%2Flibreboot_pico-serprog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/initdc%2Flibreboot_pico-serprog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/initdc%2Flibreboot_pico-serprog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/initdc","download_url":"https://codeload.github.com/initdc/libreboot_pico-serprog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/initdc%2Flibreboot_pico-serprog/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261883345,"owners_count":23224481,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-19T20:19:00.155Z","updated_at":"2025-10-12T19:42:49.237Z","avatar_url":"https://github.com/initdc.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pico-serprog\n\nSlightly less terrible serprog implementation for the Raspberry Pi Pico and\nother RP2040 based boards. Based on\n![pico-serprog by stacksmashing](https://github.com/stacksmashing/pico-serprog/).\nFurther improved by kukrimate ![here](https://github.com/kukrimate/pico-serprog).\nAnd me (Riku\\_V) here.\n\nPre-compiled binaries binaries can be downloaded from the\n![Libreboot project](https://libreboot.org/download.html#https).\n\nFor a guide on how to flash a chip see\n![this page](https://libreboot.org/docs/install/spi.html#raspberry-pi-pico).\n\nThis takes about 17 seconds to read the 8MiB BIOS chip of an X200.\n\nPinout for the SPI lines:\n| Pin | Function |\n|-----|----------|\n|  7  | CS       |\n|  6  | MISO     |\n|  5  | MOSI     |\n|  4  | SCK      |\n\n![Pico pinout](pinout.png)\n\n## Compiling\n\n```\ncmake .\nmake\n```\n\nPlug in your Pico. Mount it as you would any other USB flash drive.\nCopy `pico_serprog.uf2` into it. Your programmer is now ready.\nIf you want to change the firwmare, you need to press the button\non the board while you plug it in.\n\n## Usage\n\nSubstitute ttyACMx with the actual tty device corresponding to the firmware.\nYou can find this by running `dmesg -wH`. When you plug in the device, a line\ncontaining something like this will appear:\n\n```\n[453876.669019] cdc_acm 2-1.2:1.0: ttyACM0: USB ACM device\n```\n\n\nRead chip:\n\n```\nflashprog -p serprog:dev=/dev/ttyACMx,spispeed=32M -r flash.bin\n```\n\nWrite chip:\n```\nflashprog -p serprog:dev=/dev/ttyACMx,spispeed=32M -w flash.bin\n```\n\nMultiple chips can be connected at the same time. Pins GP5-GP8 are Chip\nSelects 0-3, respectively. The firmware defaults to using Chip Select 0.\n```\nflashprog -p serprog:dev=/dev/ttyACMx,cs=0 -r chip0.bin\nflashprog -p serprog:dev=/dev/ttyACMx,cs=1 -r chip1.bin\n```\n\n## License\n\nAs a lot of the code itself was heavily inspired/influenced by `stm32-vserprog`\nthis code is licensed under GPLv3.\n\npinout.png is based on\n[pico-pinout.svg](https://www.raspberrypi.com/documentation/microcontrollers/images/pico-pinout.svg)\nby Raspberry Pi Ltd, under the\n[Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/)\nlicense.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finitdc%2Flibreboot_pico-serprog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finitdc%2Flibreboot_pico-serprog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finitdc%2Flibreboot_pico-serprog/lists"}