一起来玩树莓派Pico

今年一月底,树莓派基金会发布了一款低成本、高性能的微控制器开发板Raspberry Pi Pico,售价4美元(国内的价格在30上下),主芯片为基金会自行研发的RP2040芯片,7×7mm QFN-56 封装,具体规格如下:

– 双核 Arm Cortex-M0 + @ 133MHz
– 芯片内置 264KB SRAM 和 2MB 的板载闪存
– 通过专用 QSPI 总线支持最高 16MB 的片外闪存
– DMA 控制器
– 30 个 GPIO 引脚,其中 4 个可用作模拟输入
– 2 个 UART、2 个 SPI 控制器和 2 个 I2C 控制器
– 16 个 PWM 通道
– USB 1.1 主机和设备支持
– 8 个可编程 I/O(PIO)状态机,用于自定义外围设备支持
– 支持 UF2 的 USB 大容量存储启动模式,用于拖放式编程

引脚说明


有很多爱好者可能会觉得Pico从性价比、可玩性上看并不如ESP32,然而,我认为ESP32固然有其各方面的优势,Pico亦有其闪光点,而且两者的市场定位并不相同,ESP32聚焦于物联网市场,面向实际商用的产品,而Pico则很明显受众是全世界的电子爱好者,其竞争对手实际上是Arduino(更明确的说应该是基于atmega128/atmega2560的Arduino开发板),Pico的双核(极限可调整内核电压超频到400MHz),多Bank SRAM(意味着总线上的master可以同时快速访问不同Bank的SRAM,可以达到极高的数据吞吐率),以及最有趣的PIO子系统,均有极大的可玩性,同时可使用C-SDK或者micropython开发,兼顾性能和快速实现,树莓派基金会提供的详细的文档和教程,以及放出的Pico开发板的原理图及PCB,均显示出了极大的诚意和支持。
目前在各路高手的开发下,已经实现了很多有趣的项目,一下选取目前几个比较有意思的介绍:

Pico PIO输出HDMI显示,甚至实现了双屏HDMI输出

项目地址:xhttps://github.com/Wren6991/PicoDVI

Pico PIO驱动以太网

项目地址:xhttps://github.com/sandeepmistry/pico-rmii-ethernet

实现软件自定义无线电(SDR)

项目地址:xhttps://github.com/luigifcruz/pico-stuff/tree/main/apps/piccolosdrhttps://www.hackster.io/news/luigi-cruz-turns-the-raspberry-pi-pico-into-a-software-defined-radio-with-the-piccolosdr-project-0085e14ef96d

采样吉他信号并通过MIDI输出

项目地址:xhttps://www.hackster.io/news/raspberry-pi-pico-converts-electric-guitar-signals-to-midi-89bb5f61998f

Pico上最有意思的应该是其PIO子系统,其提供了类似FPGA的灵活的硬件能力,可以实现各种各样的协议,而且由于PIO子系统的时钟可以和主CPU一致,其甚至可以实现几百M的高速协议。PIO子系统实际上可以看成是一个单独的处理器,只不过其整体设计都是为控制IO实现的,使用汇编语言进行编程,利用汇编编译器pioasm编译成二进制后存入PIO内部SRAM,然后启动PIO状态机执行。


为方便Pico的使用,我制作了两块Pico扩展板,一块为安装到树莓派上的扩展板,支持树莓派3/4,利用树莓派提供的串口和SWD接口,同时两侧引出排针,可以用树莓派方便的进行开发及测试,(树莓派基金会发布的官方教程即为使用树莓派和pico对接进行开发)

Pico树莓派扩展板


另一块则是和DAPLink对接,同样利用了DAPLink提供的串口和SWD接口,同时两侧引出插针,由于PIO子系统提供的灵活的IO能力,非常适合和PMOD标准对接,故额外又引出了PMOD标准接口,方便挂接各种标准PMOD外设,目前已经适配的有2。2.8寸LCD,WS2812灯板,以及PMOD-SWITCH、PMOD-LED等。
Pico PMOD扩展板


原理图、源码和固件已经全部提交在https://github.com/wuxx/RPI-HAT-Pico-BreakoutBoardhttps://github.com/wuxx/pico-lab,感兴趣的朋友可以参考。