上周,我们尝试了在RP2040板上使用非官方的Raspberry Pi Pico Arduino Core(包括Raspberry Pi Pico)。
鉴于所有东西都很早就设置好了,所以blink示例运行得很好。
不过,Arduino最近却在推特上发布了官方的Arduino Core mbed 2.0版本,这个版本增加了Raspberry Pi RP2040板,包括Arduino Nano RP2040 Connect和Raspberry Pi Pico板。
因为Arduino没有适用于Nordic nRF52840 Cortex-M4微控制器的官方Arduino内核,便在他们的Arduino Nano 33 BLE板上使用mbed。,值得一提是,他们似乎也为Raspberry Pi RP2040做了同样的事情,其mbed实现本身依赖于C SDK。
我们一起来试试看,到底有多难?
首先,在Github上找到发布和更新日志的说明。
其次,在sketchbook目录中克隆repo(参见下图Arduino IDE的首选项),在我的例子中是~/Arduino:
mkdir -p ~/Arduino/hardware/arduino-git
cd ~/Arduino/hardware/arduino-git/
git clone https://github.com/arduino/ArduinoCore-mbed mbed
接着需要克隆ArduinoCore API:
git clone https://github.com/arduino/ArduinoCore-API
ln -s ~/ArduinoCore-API/api mbed/cores/arduino/api
然后,去Boards Manager中,查找mbed,然后安装“Arduino mbed OS RP2040 Boards”

接下来选择Raspberry Pi Pico 板,以及它所连接的端口:/dev/ttyACM0。

尝试中,我发现blink示例可以构建,但无法下载到板上。

我试过用两块Raspberry Pi Pico板,但都以同样的方式失败告终,而它们在非官方的Arduino Core端口上却可以正常工作。连接到板上后,可以查看Ubuntu 20.04的日志如下:
1 2 3 4 5 6 7 |
[19281.103834] usb 1-1: new full-speed USB device number 11 using xhci_hcd [19281.279258] usb 1-1: New USB device found, idVendor=2e8a, idProduct=000a, bcdDevice= 1.00 [19281.279263] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [19281.279265] usb 1-1: Product: PicoArduino [19281.279267] usb 1-1: Manufacturer: Raspberry Pi [19281.279269] usb 1-1: SerialNumber: E6605838833D8338 [19281.315348] cdc_acm 1-1:1.0: ttyACM0: USB ACM device |
也能正确地检测到ttyACM0设备:
1 2 3 4 |
bt -l port | age (sec) | device | driver | description ------+------------+------------+------------------+---------------------- * 0 | 46 | ttyACM0 | cdc_acm | Board CDC |
我尝试将固件烧录到主板上,并在boot模式下重启。但操在安装Pico分区(RPI-RP2)的时候,串口就断开了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[19354.726744] usb 1-1: USB disconnect, device number 11 [19354.729182] cdc_acm 1-1:1.0: failed to set dtr/rts [19355.005594] usb 1-1: new full-speed USB device number 12 using xhci_hcd [19355.173187] usb 1-1: New USB device found, idVendor=2e8a, idProduct=0003, bcdDevice= 1.00 [19355.173192] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [19355.173196] usb 1-1: Product: RP2 Boot [19355.173199] usb 1-1: Manufacturer: Raspberry Pi [19355.173201] usb 1-1: SerialNumber: E0C912D24340 [19355.175326] usb-storage 1-1:1.0: USB Mass Storage device detected [19355.175506] scsi host2: usb-storage 1-1:1.0 [19356.183622] scsi 2:0:0:0: Direct-Access RPI RP2 1 PQ: 0 ANSI: 2 [19356.184049] sd 2:0:0:0: Attached scsi generic sg2 type 0 [19356.184363] sd 2:0:0:0: [sdc] 262144 512-byte logical blocks: (134 MB/128 MiB) [19356.185221] sd 2:0:0:0: [sdc] Write Protect is off [19356.185223] sd 2:0:0:0: [sdc] Mode Sense: 03 00 00 00 [19356.187259] sd 2:0:0:0: [sdc] No Caching mode page found [19356.187266] sd 2:0:0:0: [sdc] Assuming drive cache: write through [19356.217512] sdc: sdc1 [19356.221243] sd 2:0:0:0: [sdc] Attached SCSI removable disk |
正常情况下来说,这种情况下,Arduino IDE应该将UF2文件复制到分区,但这没有发生。于是,我在树莓派论坛上发现了解决方法,我找到了在 /tmp/arduino*中uf2文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
jaufranc@cnx-laptop-4:/tmp/arduino_build_781291$ ls -l total 5824 -rwxrwxr-x 1 jaufranc jaufranc 89672 Apr 12 16:45 Blink.ino.bin -rwxrwxr-x 1 jaufranc jaufranc 1567000 Apr 12 16:45 Blink.ino.elf -rw-rw-r-- 1 jaufranc jaufranc 179712 Apr 12 16:45 Blink.ino.elf.uf2 -rw-rw-r-- 1 jaufranc jaufranc 252290 Apr 12 16:45 Blink.ino.hex -rw-rw-r-- 1 jaufranc jaufranc 4047278 Apr 12 16:45 Blink.ino.map -rw-r--r-- 1 jaufranc jaufranc 1852 Apr 12 16:45 build.options.json drwxr-xr-x 2 jaufranc jaufranc 4096 Apr 12 16:45 core -rw-r--r-- 1 jaufranc jaufranc 449 Apr 12 16:45 includes.cache drwxr-xr-x 2 jaufranc jaufranc 4096 Apr 12 16:45 libraries drwxr-xr-x 2 jaufranc jaufranc 4096 Apr 12 16:45 preproc drwxr-xr-x 2 jaufranc jaufranc 4096 Apr 12 16:45 sketch |
并将其复制到驱动中:
1 |
cp Blink.ino.elf.uf2 /media/jaufranc/RPI-RP2/ |
这个时候,我发现板上的LED灯在闪烁。所以这只是一个初步的端口,也许这也就可以解释为什么Arduino只是在推特上发布了这个消息,而不是专门写一篇博客来宣布RP2040板Arduino Core Mbed 2.0的发布了。

文章翻译者:Nicholas,技术支持工程师、瑞科慧联(RAK)高级工程师,深耕嵌入式开发技术、物联网行业多年,拥有丰富的行业经验和新颖独到的眼光!