From e7a4695536abdf8df4575aa93e8827257efa6f20 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Wed, 8 Nov 2017 14:08:23 -0500 Subject: [PATCH] Add uf2_flash_erasers for conveniently erasing M0 and M4 boards. --- uf2_flash_erasers/README.md | 15 +++++++++++++++ uf2_flash_erasers/erase_m0.uf2 | Bin 0 -> 507904 bytes uf2_flash_erasers/erase_m4.uf2 | Bin 0 -> 1015808 bytes 3 files changed, 15 insertions(+) create mode 100644 uf2_flash_erasers/README.md create mode 100644 uf2_flash_erasers/erase_m0.uf2 create mode 100644 uf2_flash_erasers/erase_m4.uf2 diff --git a/uf2_flash_erasers/README.md b/uf2_flash_erasers/README.md new file mode 100644 index 000000000..a5c8fc3a3 --- /dev/null +++ b/uf2_flash_erasers/README.md @@ -0,0 +1,15 @@ +These UF2 files load all zeros into all of flash, skipping the bootloader section. + +* `erase_m0.uf2` writes 256k-8k of zeros starting at 8k +* `erase_m4.uf2` writes 512k-16k of zeros starting at 16k + +These are useful for clearing out damaged CIRCUITPY filesystems in internal flash. + +Example of how to create erase-m4.uf2, which assume 512k of flash and a 16k bootloader: +```sh +$ truncate -s 507904 512k-16k.bin # 507904 is 512k minus 16k +$ circuitpython/tools/uf2/utils/uf2conv.py -c -b 16384 512k-16k.bin -o 512k-16k.uf2 +$ mv 512k-16k.uf2 erase-m4.uf2 +``` + +These don't erase CIRCUITPY in SPI flash, such as on Express boards. For flash erasers for SPI flash, see https://github.com/adafruit/Adafruit_SPIFlash/tree/master/examples/flash_erase_express. diff --git a/uf2_flash_erasers/erase_m0.uf2 b/uf2_flash_erasers/erase_m0.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..6ca0d290454c65e3d93f5ac2e2270bca27756fc9 GIT binary patch literal 507904 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 X_!IpL{ojv2(ZA6DgZLBuJN*9-c*zy3 literal 0 HcmV?d00001 diff --git a/uf2_flash_erasers/erase_m4.uf2 b/uf2_flash_erasers/erase_m4.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..6c3389ea3972893ec9cf47811762bb8730616c8b GIT binary patch literal 1015808 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