I started testing the RP2350B (48 GPIO version).
The obligatory primes benchmark:
// 206.142 sec RP2350B @ 250 MHz ??? bytes 51.5 billion clocks
Yes it runs @ 250 MHz without a problem. The RP2040 did too. I didn't try higher yet.
The number of cycles is not too impressive, it's barely lower than a Cortex-M4 (not significantly) while I was expecting a bit better with a M33. I haven't tested on a STM32U5 (which is also a M33) to confirm if it's solely reflecting the "performance" of the M33 or if the Flash cache of the RP2350 is maybe a bit less efficient. Doubt it, but can't say for sure. This is of course only comparing the results of "primes", which only says what uh, it says.
Note for those who want to use the pico sdk without their Cmake-based build system: the SDK v2 has become even much more of a monster than v1 was, so you've been warned. You probably remember the gigantic hierarchy of directories; well, with the support of two families, it hasn't gotten any better. They have also dramatically increased the number of macros to define various parameters. Anddd... they don't just use Cmake and some Python now; they now also use Bazel, which I didn't even know the existence of a couple days ago:
https://en.wikipedia.org/wiki/Bazel_(software) . Now I do, but it didn't entice me in the least.
I used openocd to flash it. You'll have to build the RPi fork for now, as the official openocd doesn't support the RP2350 yet:
https://github.com/raspberrypi/openocd . (The official openocd does support the RP2040 so it's probably safe to assume that they will integrate the RPi changes at some point). You can of course go via UF2 otherwise (but that's not very practical for development purposes). But here again, if you don't intend to use their Cmake/Bazel build system, you'll be in for a rough ride as the old tool (elf2uf2) doesn't support the RP2350 and they have switched to a different tool now for UF2 instead of updating the old one. Of course. So you'll need to build (or download if available for your platform) their new 'picotool' executable, which does a bit of everything except coffee.
Oh and for those who are keen to go directly baremetal without going via the pico-sdk-with-your-own-build-system way first, you can get some (working but very, very crude) starting point here:
https://github.com/metebalci/rp2350-bare-metal-buildIts startup code is very basic, and in particular, it doesn't enable any of the coprocessors of the RP2350 ARM core(s), so if you want to be able to use them, you'll have to figure out how to (oh, and also it only copies the data section, but doesn't zero-out the bss section, so, yes, did I say crude?). Which you'll find in the crt0.S file in the pico-sdk, inside a mountain of conditional compilation and additional source code spread in the runtime.c and runtime_init.c source files. With a non-trivial (before you get to know it) call chain system. I know, because I did build my tests with the pico-sdk and my own makefile, and there were a lot of new things to care about compared to the older sdk with the RP2040, and my first attempts made the CPU hardfault. Finally tracked it down to a NOCP error. Which was because I was calling GPIO functions from the pico sdk, which uses the GPIO coprocessor on the RP2350 (which is nice, btw, doesn't go via a peripheral bus anymore), and this coprocessor was not enabled in the startup code... with the way I was building it.
Just to say that if you're going baremetal, keep this coprocessors thing in mind. The RP2350 -M33 has several of them, and they are nice.
That's all for now, but I'm curious to test PSRAM on it next. And the new PIO.
(Speaking of PSRAM, it doesn't seem to be directly supported by the pico-sdk yet, and there isn't any example in pico-examples either - that I could find - but here's a small project that shows how to configure the QSPI controller for PSRAM, that should be handy to spend less time figuring it all out:
https://github.com/FreddyVRetro/pico_psram/tree/main )