RP2040 PICOSDK食用指南——PIO一些很重要的东西
RP2040 每个时钟周期是 8ns,所以我们可以用 nop 制造 8ns 的倍数的延时
在发送第一个报文时,产生了长达 20us 的延迟,而以后的报文均未出现这样的情况,提示这个问题可能与缓存有关。由此,我们马上能联想到 XIP 的实现机制。RP2040 没有内置 ROM,代码存放在外部 flash 上,通过 SPI 协议通讯,但 SPI 协议速率不足以支撑如此快的指令读取速度。因此,RP2040 内置了一块 16 KB 的 SRAM,专门用于给 flash 提供 cache,从而实现近乎 execute-in-place 的效果。而若缓存未命中,则需从 flash 芯片取出代码,这会造成延时。
pico sdk 提供了几个选项,让我们指定代码执行方式。其中一种是 copy_to_ram,即在程序运行之初,将 ROM 拷贝到 RAM。

我们在 CMakeLists.txt 里加上这句话:
pico_set_binary_type(bitbanging copy_to_ram)
浙公网安备 33010602011771号