I'm thinking about creating a programmer with 3D printer and some spring contacts, but I really would love some tiny device with RP2040 inside where I can put another RP2040 and have all pins available for further connecting if necessary. Right now it's a mess of wires.
Another RP2040 aspect which I didn't like is a complexity of boot process. Now I have no idea whether it's common to microprocessors or not. What I wanted to do is to write my software with pure assembly without any SDKs. So far my research is as follows:
RP2040 contains unmodifiable boot1 code. You can't modify it at all. It contains some preliminary initialization code and some procedures like float point operations, etc. That looks very weird to me: why put that code in unmodifiable ROM. There're few revisions of this ROM with different procedures (I guess they optimize them in later revisions).
Boot1 connects to flash and loads 256 bytes of boot2 loader which contains 252 bytes of code and CRC32.
Boot2 is compiled from SDK. It configures flash for some kind of faster access mode and calls sdk initializtion procedures. I didn't investigate further yet.
I managed to learn ARM Cortex M0 assembly, at least most of it, and it's interesting to try to program with it. But now I'm stuck with reading about flash, those QSPI protocols and their commands to make sense of their boot2 bootloader (I could just re-use one from SDK but I don't like this way). And then I still need to understand how to configure the whole stack to run code from flash.
Basically to re-implement writing hello world to UART, I have to learn a lot of things. Which is fine, I guess, but I didn't imagine this being that hard. I thought that I would need to learn about UART hardware and how to interact with it and that's about it.
And I really don't like their SDK. I managed to get it up and running, but they're using cmake which is cryptic for me, it takes seconds to compile my software, I have enough of that in my Java work. I guess that's fine for professionals who need to get things done.
That's not to say that I don't like this project, I still think that's the most friendly ARM, at least when I tried to use STM32 it was much worse. RP2040 datasheets are very readable for beginner. I just wish their setup was not so convoluted.
At this stage I'm considering to drop flash usage at all. I have 256 KB of RAM anyway, ought to be enough for anybody, right? Just copy my program from flash to RAM and run it from RAM. On the plus side is predictable performance. I still don't understand how can one write timing-sensitive code with flash where jump to non-cached address could stall CPU for some unspecified number of tacts.