在【你晒单,我买单,DigiKey带您畅享好物】第7期的活动中,除了购买了ESP32-P4-EYE开发板外,我还购买了一片PI PICO 2W的树莓派开发板。这树莓派PICO 2W虽然是国外发货,但价格和国内基本一样。
一.硬件介绍
1. 核心功能亮点:
双架构处理器:RP2350采用双核双架构设计,用户可通过软件选择使用双核Arm Cortex-M33(150MHz)或双核开源Hazard3 RISC-V处理器,均支持浮点运算和DSP功能。
集成无线通信:板载英飞凌CYW43439芯片,支持2.4GHz 802.11n Wi-Fi和蓝牙5.2,无需外接模块。
增强安全性:基于Arm TrustZone技术构建安全模型,支持签名引导、SHA-256加速和硬件真随机数生成器。
丰富外设接口:包含2×SPI、2×I2C、2×UART、3×12位ADC、24×PWM通道、3个可编程IO块(PIO)。26个GPIO,其中3个IO可作为ADC检测。
2. 核心硬件配置
| 组件 | 规格参数 | 特点说明 |
|---|---|---|
| 尺寸 | 25×20.5mm | |
| 处理器 | RP2350双核芯片 | 40nm工艺,150MHz主频,可选Arm Cortex-M33或RISC-V Hazard3架构 |
| 内存 | 520KB SRAM | 含64KB高速TCM内存 |
| 无线模块 | CYW43439芯片 | 集成2.4GHz Wi-Fi和蓝牙5.2,板载PCB天线 |
| 存储 | 4MB QSPI闪存(Pico 2) | 相比前代Pico的2MB容量翻倍 |
| 接口 | USB Micro-B |
其中,比较诟病的是USB接口为micro-b接口。现在开发板一般都是用type-c接口。反而不好找usb micro-b的数据线。
3.开发板实物及引脚说明
下载程序时,按下板上的BOOTSEL键,同时复位开发板。PICO 2W就会进入烧写状态。但是,由于开发板没有复位键,每次下载程序都要插拔usb线。
一.开发环境
PI PICO的开发方式有很多种,包括:
1. Arduino IDE, 使用Arduino的好处是它提供大量的库代码和外设使用的例程。
2. 在Thonny/VS Code软件上使用MicroPython来开发,这样做可以直接使用python语言开发,对python开发者比较友好。但是需要先烧写对应的固件。
3. 使用树莓派官方的Rust库开发Rust嵌入式程序。这方法可能是官方将来的主推方向。但是个人感觉还不太成熟。
4. 使用C/C++ SDK开发。
我使用的是方法4。并且,我是直接在VS Code安装pico的插件,一步完成sdk下载和环境配置。可以在插件市场中搜索“Raspberry Pi Pico”获得这个插件。
安装这个插件将自动下载SDK,CMake,Ninja等工具,并完成路径配置。插件提供了新建工程、导入样例和编译、下载的命令。这样对新手相对便利。免去复杂的配置操作。但是需要注意的是,最好电脑网络是可以连接外网的。不然下载SDK的成功率不高。
三.示例测试
1. USB模拟串口测试
由于身边没有USB转串口的模块,不好查看例程的调试信息。不过查看例程发现其中一个例子为“dev_multi_cdc”。这个例程基本功能为是使用tinyusb枚举出2个usb虚拟串口。可以略微修改,便可以通过串口打印信息到电脑上。根据例程,我修改为串口1不断打印“Hello World”,串口2回显电脑输入的信息。
void custom_cdc_task(void)
{
// polling CDC interfaces if wanted
// Check if CDC interface 0 (for pico sdk stdio) is connected and ready
if (tud_cdc_n_connected(0)) {
// print on CDC 0 some debug message
printf("Connected to CDC 0\n");
sleep_ms(5000); // wait for 5 seconds
}
sleep_ms(10);
tud_cdc_n_write(0, "Hello world\n", strlen("Hello world\n")+1); // 虚拟串口连接后显示
tud_cdc_n_write_flush(0);
}
// callback when data is received on a CDC interface
void tud_cdc_rx_cb(uint8_t itf)
{
// allocate buffer for the data in the stack
uint8_t buf[CFG_TUD_CDC_RX_BUFSIZE];
printf("RX CDC %d\n", itf);
// read the available data
// | IMPORTANT: also do this for CDC0 because otherwise
// | you won't be able to print anymore to CDC0
// | next time this function is called
uint32_t count = tud_cdc_n_read(itf, buf, sizeof(buf));
// check if the data was received on the second cdc interface
if (itf == 1) {
// process the received data
buf[count] = 0; // null-terminate the string
// now echo data back to the console on CDC 0
printf("Received on CDC 1: %s\n", buf);
// // and echo back OK on CDC 1
// tud_cdc_n_write(itf, (uint8_t const *) "OK\r\n", 4);
tud_cdc_n_write(itf, buf, count+1); // 修改为回显接收的数据
tud_cdc_n_write_flush(itf);
}
}
2. Wifi测试
SDK中有个简单wifi测试例程(wifi_scan),功能为将wifi模块配置为sta模式,然后扫描周围环境的wifi热点。并显示这些wifi热点的名称,信号强度,通讯通道,mac和加密方式。
这个例程和可以和上一个CDC例程结合。通过虚拟串口打印wifi热点的信息。
修改后的代码可大致修改内容为,结合2个例程的源文件,初始化时分别初始化wifi和usb。在wifi扫描回调函数中用CDC输出函数显示wifi热点信息。
并在cmakelist.txt中同时添加2个例程的用到库文件。
输出的结果如下,CDC在快速打印会出现前几个字节没有显示。但是wifi的信息都是正确。
四.总结
树莓派的生态系统是可能是全球最成熟、最完整的开源硬件生态。官方和网络高手提供了大量实用的开发例子。对于我们这样电子爱好者而言,树莓派的确是最稳妥、最高效的选择。PI PICO 2W自研的双核MCU主频较高,并带有wifi和蓝牙双频模块。我也可以用来开发一下IOT项目。


