Skip to content

Update nuke.c to auto-detect flash size #653

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions flash/nuke/nuke.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,11 @@

int main() {
uint flash_size_bytes;
#ifndef PICO_FLASH_SIZE_BYTES
#warning PICO_FLASH_SIZE_BYTES not set, assuming 16M
flash_size_bytes = 16 * 1024 * 1024;
#else
flash_size_bytes = PICO_FLASH_SIZE_BYTES;
#endif
uint8_t txbuf[4];
uint8_t rxbuf[4];
txbuf[0] = 0x9f;
flash_do_cmd(txbuf, rxbuf, 4);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this guaranteed to work with every variety of SPI Flash chip that might be used with RP2040 or RP2350?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a good question. I was under the dangerous assumption that they all follow a standard query for that information, like the JEDEC command used. Of course just because JEDEC claims "Global Standards for the Microelectronics Industry", it's plausible for non compatible things to be used by more adventurous souls.

I'm not an expert on this matter.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not an expert on this matter.

Me neither! The only reason I asked, was because I assumed that if it was universally supported, then there'd already be a wrapper-function for it in pico-sdk? 🤔
But that's merely a hunch, I could be entirely wrong! 🙊

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This suggests for an FPGA situation with NOR flash that two possible command sets exist, but I've no idea if that first option is supported by RP2s.
https://electronics.stackexchange.com/a/673366

Copy link
Author

@tyeth tyeth Jun 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, so digging deeper, yes the Serial Flash Discovery Protocol spec also mandates the backwards compatible support for 0x9f command from the Common Flash Interface, or at least as far as my limited research indicates.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cc @Wren6991 who i believe has said in the past that such a command is not universally supported

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Try it- with fall back to 2MB or 4MB depending on chip? (Though it would probably be Pico boards where it works)

That said it’s kinda up to the vendor to verify flash_nuke works on their board and - if not - supply a customised alternative.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That said it’s kinda up to the vendor to verify flash_nuke works on their board and - if not - supply a customised alternative.

😂 🤣 😂 🤣 😂 🤣

If every vendor provided even half of the support that Pimoroni did, the world would be a much better place 😀

flash_size_bytes = 1u << rxbuf[3];
flash_range_erase(0, flash_size_bytes);
// Leave an eyecatcher pattern in the first page of flash so picotool can
// more easily check the size:
Expand Down