【DigiKey好物畅享】PI PICO 2W评测

在【你晒单,我买单,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项目。