{"id":28373285,"url":"https://github.com/wipeseals/nandio.pio","last_synced_at":"2026-05-01T06:32:49.997Z","repository":{"id":316595423,"uuid":"1064026402","full_name":"wipeseals/nandio.pio","owner":"wipeseals","description":"Accelerating NAND Flash Communication using PIO (Programmable IO).","archived":false,"fork":false,"pushed_at":"2025-09-25T13:24:32.000Z","size":199,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-09-25T15:23:04.849Z","etag":null,"topics":["embedded","micropython","nand","pio","raspi"],"latest_commit_sha":null,"homepage":"https://wipeseals.github.io/nandio.pio/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wipeseals.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-25T12:46:20.000Z","updated_at":"2025-09-25T13:24:36.000Z","dependencies_parsed_at":"2025-09-25T15:25:14.796Z","dependency_job_id":"018da1ef-ba30-4bad-b135-f497bd0c56f1","html_url":"https://github.com/wipeseals/nandio.pio","commit_stats":null,"previous_names":["wipeseals/nandio.pio"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/wipeseals/nandio.pio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wipeseals%2Fnandio.pio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wipeseals%2Fnandio.pio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wipeseals%2Fnandio.pio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wipeseals%2Fnandio.pio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wipeseals","download_url":"https://codeload.github.com/wipeseals/nandio.pio/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wipeseals%2Fnandio.pio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32487404,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["embedded","micropython","nand","pio","raspi"],"created_at":"2025-05-29T19:08:43.013Z","updated_at":"2026-05-01T06:32:49.992Z","avatar_url":"https://github.com/wipeseals.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NANDIO.PIO\n\n[![pytest](https://github.com/wipeseals/nandio.pio/actions/workflows/test.yml/badge.svg)](https://github.com/wipeseals/nandio.pio/actions/workflows/test.yml)\n[![simulation](https://github.com/wipeseals/nandio.pio/actions/workflows/simulation.yml/badge.svg)](https://github.com/wipeseals/nandio.pio/actions/workflows/simulation.yml)\n\nAccelerating NAND Flash Communication using PIO (Programmable IO).\n\n## Features\n\n- High-speed NAND flash communication using PIO and payload builder\n- Simulation environment for verification\n- async/await friendly API for MicroPython\n- Supports Raspberry Pi Pico and JISC-SSD (Jisaku In-Storage Computation SSD) board\n\n### Waveforms\n\n![Logic Analyzer Waveforms](/misc/PioNandCommander-ProgramPage-Core125MHz-Pio125MHz.png)\n\n### Online Simulation\n\n\u003chttps://wipeseals.github.io/nandio.pio/\u003e\n\n### Performance\n\nJISC-SSD board with RP2040 and NAND Flash (TC58NVG0S3HTA00) performance comparison.\n\n#### CPU Clock: 125MHz, PIO Clock: 125MHz\n\n```bash\nMPY: soft reboot\nCPU frequency: 125.0 MHz\n# `Fw` commander results:\n- Read ID time      : 3391 us\n- Erase block time  : 4785 us\n- Program page time : 8560594 us\n- Read page time    : 3692423 us\n\n# `Pio` commander results:\n- Read ID time      : 3527 us\n- Erase block time  : 6357 us\n- Program page time : 21405 us\n- Read page time    : 5491 us\n\nMicroPython v1.25.0 on 2025-04-15; Raspberry Pi Pico with RP2040\nType \"help()\" for more information.\n\u003e\u003e\u003e\n```\n\n#### CPU Clock: 250MHz, PIO Clock: 125MHz\n\n```bash\nMPY: soft reboot\nCPU frequency: 250.0 MHz\n# `Fw` commander results:\n- Read ID time      : 1771 us\n- Erase block time  : 2353 us\n- Program page time : 5421321 us\n- Read page time    : 1845875 us\n\n# `Pio` commander results:\n- Read ID time      : 1735 us\n- Erase block time  : 3733 us\n- Program page time : 11197 us\n- Read page time    : 3293 us\n\nMicroPython v1.25.0 on 2025-04-15; Raspberry Pi Pico with RP2040\nType \"help()\" for more information.\n```\n\n## Installation\n\nTo install the project, you can use the `uv` tool, which is a Python package manager that simplifies the installation of Python projects with multiple dependencies.\nYou can install `uv` and the project dependencies using the following commands:\n\n```bash\npip install uv\nuv sync --all-extras --dev\n\n# run unit tests\nuv run pytest\n```\n\n## Usage\n\n### Local Simulation\n\nTo simulate the NAND Flash communication, you can use the provided simulation script. This will run the simulation using the `uv` command.\n\n```bash\n# All scenarios\nuv run sim/cli.py sim --all\nSimulating scenario... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00\nSimulation completed for scenarios: reset, read_id, read, program, erase, status_read\nAll simulations completed successfully. output saved to \u003c/path/to/output\u003e\n\n# Specific scenario\nuv run sim/cli.py sim --scenario reset\n```\n\nYou can view the simulation results on GitHub Pages:  \n\u003chttps://wipeseals.github.io/nandio.pio/\u003e\n\n### Assembly\n\nTo assemble the PIO program, you can use the `uv` command with the `asm` option. This will compile the PIO assembly code into a binary format that can be used by the Raspberry Pi Pico.\n\n```bash\nuv run sim/cli.py asm\nPIO program assembled successfully!\nOutput binary saved to: \u003c/path/to/output/nandio.pio.bin\u003e\n```\n\n### JISC-SSD Board (RP2040 + NAND Flash)\n\n#### Install MicroPython\n\n- Download the MicroPython UF2 file for RP2040 from the official Raspberry Pi Pico website and flash it to the board.\n  - See [MicroPython - Raspberry Pi](https://www.raspberrypi.com/documentation/microcontrollers/micropython.html) for details.\n  - The confirmed working version of MicroPython is `v1.24.1` (other versions may not work properly).\n\n#### Run MicroPython scripts\n\n- Transfer the project to the Raspberry Pi Pico and run.\n\n##### Using vscode [MicroPico Extension](https://marketplace.visualstudio.com/items?itemName=paulober.pico-w-go)\n\nRun the `MicroPico: Upload project to Pico` (`@command:micropico.upload`) command to upload the project to the Raspberry Pi Pico.\n\n##### Using mpremote\n\n```bash\nuvx mpremote connect COM13 + fs --recursive --force cp main.py :/main.py + cp  nandio.py :/nandio.py + cp  sim/nandio_pio.py :/sim/nandio_pio.py  + cp  mpy/driver.py :/mpy/driver.py + fs ls + soft-reset + run main.py + repl\ncp main.py :/main.py\ncp sim/nandio_pio.py :/sim/nandio_pio.py\nUp to date: /sim/nandio_pio.py\ncp mpy/driver.py :/mpy/driver.py\nls :\n         607 main.py\n           0 mpy/\n           0 sim/\n(snip)\n```\n\n## References\n\n- [[VOL-28]JISC-SSD(Jisaku In-Storage Computation SSD 学習ボード)](https://crane-elec.co.jp/products/vol-28/)\n- [TC58NVG0S3HTA00 Datasheet](https://www.kioxia.com/content/dam/kioxia/newidr/productinfo/datasheet/201910/DST_TC58NVG0S3HTA00-TDE_EN_31435.pdf)\n- [RP2040 Datasheet](https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf)\n- [GitHub - crane-elec/rawnand_test](https://github.com/crane-elec/rawnand_test)\n- [ゼロから学ぶ SSD：構造、動作、耐久性のポイント - キオクシア株式会社](https://www.kioxia.com/content/dam/kioxia/ja-jp/business/ssd/asset/SNIA-seminar-202502.pdf)\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwipeseals%2Fnandio.pio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwipeseals%2Fnandio.pio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwipeseals%2Fnandio.pio/lists"}