JFYI, I managed to get QSPI working on PSRAM by modified version of rp2040-psram project, so we will get the speed bump for PSRAM.
The only thing that not working right now is variable bytes write/reads, reads/writes up to 128bits is working now.
Update: Initially wrote about SD card, but then remembered it’s for PSRAM
Here is the stats:
All tests done on on RISC-V core
Full chart without 8bit test for 150mhz sysclock
Testing PSRAM(SPI)...
16 bit: PSRAM write 8MB in 3299527 us, 2542366 B/s
16 bit: PSRAM read 8MB in 6263501 us, 1339284 B/s
32 bit: PSRAM write 8MB in 2306877 us, 3636348 B/s
32 bit: PSRAM read 8MB in 3704978 us, 2264145 B/s
128 bit: PSRAM write 8MB in 1250219 us, 6709711 B/s
128 bit: PSRAM read 8MB in 1613943 us, 5197586 B/s
Testing PSRAM(QSPI)...
16 bit: PSRAM write 8MB in 2963981 us, 2830182 B/s
16 bit: PSRAM read 8MB in 4026536 us, 2083331 B/s
32 bit: PSRAM write 8MB in 1761612 us, 4761893 B/s
32 bit: PSRAM read 8MB in 2278914 us, 3680967 B/s
128 bit: PSRAM write 8MB in 774859 us, 10825980 B/s
128 bit: PSRAM read 8MB in 768089 us, 10921401 B/s
Key Gains:
-
Write speeds: 11% to 61% improvement
-
Read speeds: 55% to 110% improvement
This is with sysclock 200mhz
Testing PSRAM(SPI)...
16 bit: PSRAM write 8MB in 2474646 us, 3389821 B/s
16 bit: PSRAM read 8MB in 4697627 us, 1785711 B/s
32 bit: PSRAM write 8MB in 1730158 us, 4848463 B/s
32 bit: PSRAM read 8MB in 2778734 us, 3018859 B/s
128 bit: PSRAM write 8MB in 937664 us, 8946284 B/s
128 bit: PSRAM read 8MB in 1210457 us, 6930116 B/s
Testing PSRAM(QSPI)...
16 bit: PSRAM write 8MB in 2222985 us, 3773578 B/s
16 bit: PSRAM read 8MB in 3019904 us, 2777773 B/s
32 bit: PSRAM write 8MB in 1321209 us, 6349191 B/s
32 bit: PSRAM read 8MB in 1709185 us, 4907958 B/s
128 bit: PSRAM write 8MB in 581143 us, 14434671 B/s
128 bit: PSRAM read 8MB in 576068 us, 14561836 B/s
sysclock 230mhz
Testing PSRAM(SPI)...
16 bit: PSRAM write 8MB in 2151866 us, 3898294 B/s
16 bit: PSRAM read 8MB in 4084893 us, 2053568 B/s
32 bit: PSRAM write 8MB in 1504485 us, 5575734 B/s
32 bit: PSRAM read 8MB in 2416290 us, 3471689 B/s
128 bit: PSRAM write 8MB in 815360 us, 10288226 B/s
128 bit: PSRAM read 8MB in 1052571 us, 7969636 B/s
Testing PSRAM(QSPI)...
16 bit: PSRAM write 8MB in 1933030 us, 4339616 B/s
16 bit: PSRAM read 8MB in 2626002 us, 3194440 B/s
32 bit: PSRAM write 8MB in 1148877 us, 7301572 B/s
32 bit: PSRAM read 8MB in 1486247 us, 5644154 B/s
128 bit: PSRAM write 8MB in 505343 us, 16599830 B/s
128 bit: PSRAM read 8MB in 500928 us, 16746135 B/s
If I set higher sysclock I got some failures and bitflips while reading
PS I guess we can use PSRAM as framebuffer?
320 × 320 × 2 bytes × 30 fps = 6.14 MB/s
320 × 320 × 2 bytes × 45 fps = 9.22 MB/s
320 × 320 × 2 bytes × 60 fps = 12.29 MB/s
Here is the draft pull to upstream Initial QSPI(QPI) support by shtirlic · Pull Request #15 · polpo/rp2040-psram · GitHub