2021年,树莓派推出其首款售价仅为4美元的MCU——Raspberry Pi Pico,它基于RP2040构建。而后又推出添加英飞凌CYW43439无线芯片的6美元Raspberry Pi Pico W。
时隔三年,再看这个产品,谁也没想到这一产品能够大获欢迎,不仅本身可玩性强,还被实际用在工业中。但仔细想想,这个产品又有许多设计上的不足,包括片上存储、低功耗空闲和封装选项等,同时内核速度也不够快。
前两天,树莓派推出5美元的Raspberry Pi Pico 2。这一次,他们不仅升级了内核和功能,还加入了RISC-V,这引发了工程师大规模的讨论。其中,不乏一些吐槽。
依然经济实惠的设计
Pico 2延续了Pico一代“经济实惠”这一准则进行了大量升级。
相同点方面,两款产品均基于40nm工艺节点制造,通过专用 QSPI 总线支持高达 16MB 的片外闪存,支持DMA控制器,全连接AHB横杆,片上可编程LDO(用于产生内核电压),2个片上PLL(用于生成USB和内核时钟),30个GPIO引脚(其中 4 个可用作模拟输入),外设支持2个UART、2个SPI 控制器、2个I2C控制器、USB1.1控制器和PHY。
不同点方面,SRAM近乎翻倍,从264KB片上SRAM升级到520KB;板载4MB的外部Flash,相对Pico的2MHz扩充了一倍;PWM 通道从16个提升到24个;从8 PIO状态机提升为3个可编程IO(PIO) 模块,总共12个状态机。
RP2040 |
RP2350 |
|
核心架构 |
双 Arm Cortex-M0+ |
双Arm Cortex-M33、双RISC-V Hazard3或Arm Cortex-M33+RISC-V Hazard3 |
时钟速度 |
133MHz |
150MHz |
片上SRAM |
264KB |
520KB |
板载闪存 |
2 MB QSPI |
4 MB QSPI |
GPIO |
26 |
26(可支持4 x ADC) |
USB |
USB 1.1(Micro USB) |
升级 USB 1.1,支持主机和设备(Micro USB) |
安全功能 |
基本安全功能 |
Arm TrustZone、签名启动、SHA-256、TRNG、故障检测器 |
外设接口 |
2×UART、2×SPI、2×I2C 、 ADC、PWM、USB 1.1 |
增强的外设、额外的 PIO 状态机、更多的 GPIO 引脚、更高的电源效率 |
不止如此,这次树莓派还提供了更多的封装选项。我们都知道,Pico(RP2040)仅提供单个7×7mm QFN56封装选项,这次Pico 2(RP2350)提供四种不同选择:具有 30 个 GPIO 的7×7mm QFN60 封装 (RP2350A) 或具有48个GPIO的10×10mm QFN80封装 (RP2350B);以及每个型号都具有2MB的堆叠封装QSPI闪存(RP2354A 和 RP2354B)。
树莓派称,我们一如既往地坚持可负担的价格:尽管我们的硅芯片面积已经从RP2040的 2mm2增加到了5.3mm2,但RP2350A的价格仅比RP2040高10美分,3400个单元卷轴的价格为0.80美元,单单元数量为1.10美元。RP2350B将比RP2350A贵10美分,而RP2354变体将比他们的无Flash版本贵20美分。
在软件方面,推出了Pico SDK的更新版本,以及新的MicroPython和CircuitPython图像,与谷歌推出原生支持Pico 2的Pigweed SDK,此外未来还会支持Rust语言。
目前Pico 2已经开始在英国销售,价格为5美元。 在日本,Switch Science和KSY计划在不久的将来开始销售。对于产能,树莓派表示,尽管目前渠道中的库存相对较少,但 Pico 2 正处于全速生产中,由合作伙伴Sony负责。此外,许多授权经销商都在运作预订和预留方案。
在年底之前,树莓派还将推出搭载与Pico W相同的Infineon 43439调制解调器的无线版 Pico 2 W,以及预安装0.1英寸排针的Pico 2和Pico 2 W版本。
M33和RISC-V双核齐飞
如果要找出Pico 2与Pico第一代最大的不同,就是内核。
第一代Pico基于双核配置Arm Cortex-M0+(133MHz)的RP2040,而这一次,树莓派RP2350提供了两种内核:一是150MHz的Arm Cortex-M33,一个是树莓派研发的150MHz Hazard 3 RISC-V内核。
从方便开展嵌入式教育的角度出发,树莓派基金会特别在RP2350中添加了两个 Cortex-M33和两个RISC-V核。在芯片的启动阶段,用户可以从4个核心中任选两个,由此产生了以下的组合:
双核Cortex-M33;
双核 RISC-V;
一个Cortex-M33和一个RISC-V。
从内核角度来看,这次Pico 2的确是“史诗级”升级。
首先,Arm Cortex-M33是Cortex-M3和Cortex-M4的继任者,性能更强,具有DSP浮点运算功能,它基于ARMv8-M架构,而M++则基于Armv6-M,整整差了两代。
对比起来,M33采用了TrustZone技术,支持PSA Certified认证,也就是说Pico 2更安全了;同时DSP拓展可以为系统增加85个新指令,支持扩展浮点单元 (FPU) ,也就是说Pico 2的AI性能提升了,很多MCU跑小型的边缘AI都靠DSP和FPU。
从Datasheet中,我们也看到,Pico 2的M33内核配备了DSP、FPU、MPU(用于任务隔离的存储保护单元,8个SAU区域、8个安全MPU区域和8个非MPU区域),同时支持TrustZone安全性和安全启动(签名启动支持、8KB的片上反熔丝一次性可编程OTP内存、SHA-256加速、硬件真随机数生成器TRNG)。
其次,RISC-V内核Hazard3可大有来头,它由树莓派的天才ASIC工程师Luke Wren业余时间所设计。Hazard3完全是他自己设计,并授权给树莓派。
据了解,Luke在16岁时利用空闲时间开始设计基于7400系列逻辑的处理器,并受到RISC-V ISA的启发。Hazard3是Luke之前设计之一Hazard5的分支,专注于在小硅封装内实现MCU时钟频率的最佳性能。从Hazard5到Hazard3的第一个实例的开发过程,Luke只用了不到一周的时间。
Luke把该内核的设计在GitHub(https://github.com/Wren6991/Hazard3)上以Apache 2.0的形式提供任何人学习。未来的处理器设计人员可以查看Hazard3的未经编辑的提交历史记录,并从 Luke的开发过程中学习,包括他的错误以及他如何纠正这些错误。学习处理器设计的学生可以在RP2350上开发和测试软件工作负载,修改处理器以包含他们自己的自定义指令,然后在FPGA上测试新版本。
通过GitHub公开的数据显示,Hazard3在RP2350配置中,跑分达到了3.81 CoreMark/MHz,接近Cortex-M33在Arm Compiler 6.17下4.06的结果。
此外,Hazard3兼容RISC-V RVI20U32 Profile,包括M、A 和C可选扩展以及B、Zbc、Zbkb、Zicsr、Zcb和Zcmp非Profile扩展。这些RISC-V内核可以在启动时选择,并可以访问所有MCU外设。
大部分工程师对于这种设计还是比较认可的,觉得树莓派这次有点东西,毕竟Pico 2很便宜,这次性能升级够看,而且RISC-V内核的发布比较让人意外。
也有工程师感到疑惑,设计得有点怪异,毕竟一个装有四个内核的芯片,但你一次只能使用其中的两个。其中两个内核有一个 FPU、一个 DSP、一个 MPU,并支持 TrustZone 安全性和安全启动,另外 2 个内核仅用于整数,但可以在没有任何安全性的情况下访问所有芯片资源(AFAICS,不经过MPU,很像玄铁C910向量单元),很奇怪的设计。的确,当人们从Pico(RP2040)的两个M0+之一中比重一个HDMI信号时,他们本可以用RV32I做同样的事情。对他来说,仍然是一个奇怪而令人费解的设计。
工程师反驳了上面的观点,他们认为树莓派是为了尽量控制成本,毕竟升级之后涨价了1美元。价格上涨对某些人来说可能是一种耻辱,尽管提供了额外的处理魅力。
非常注重安全的一代
我们都知道,这一次Pico 2里面包含很多安全方面的升级。为了让它更安全,树莓派“定了个小目标”。不仅是与DEF CON黑客大会合作,甚至是直接贴出10000美元的悬赏,奖励第一个发现漏洞的人。(悬赏计划:https://github.com/raspberrypi/rp2350_hacking_challenge)
根据树莓派的介绍,RP2350安全模型的基石是签名引导。如果启用了安全性,则只有使用私钥的二进制文件进行签名,且相应公钥的哈希值存储在 OTP 中的情况下,才能引导该二进制文件。防止攻击者运行任意代码大大增加了提取 OTP 内容(包括用于代码保护的加密密钥)的难度。
虽然RP2350使用多种技术,包括硬件快速故障检测器和我们正在申请专利的冗余协处理器,以保护控制流和数据完整性免受故障注入攻击,但他们想在启动过程中发现并修复缺陷。希望在RP2350部署到关键应用程序中之前尽早发现这些缺陷。
EEWorld论坛,工程师认为这一代产品之所以如此看中安全方面问题,估计是因为用到的M33核,这颗核心在之前出现过一些黑客事件。当然,相比来说,这颗芯片还是通用产品,只是增强了安全方面功能。
被争论的USB
在外网,工程师们争论的核心在于USB。他们认为,Pico 2使用之前相同的表面贴装micro-USB,这种USB总是从板上掉下来,或者数据引脚首先在背面分离。反观其它大多数MCU板(例如 esp32)都换成了USB-C,它在机械上更加坚固且可逆,有些则支持PD,以支持>5V的电源输出。
工程师们普遍认为,这是升级USB-C的好机会,毕竟这次推出了一个性能大升级的产品,没有换成USB-C很令人失望。
也有工程师猜测树莓派为什么一直使用使用micro-USB。一种可能性是为了保持兼容性,保持和上一代Pico一致,就像与Pi Zero 2 W保持其前身的硬件兼容性是一样的,有些OEM/工业客户可能依赖micro-USB连接器,设计师会想要“插头兼容性”。另一种可能性可能是会增加复杂度和产品的价格,毕竟想保持5美元还是挺难的。
除了没有换到USB-C,也有工程师对于USB 1.1有意见,他们需要主机设备延迟,而目前最多只能削减到1毫秒。他们发出疑问,USB 2.0是否存在技术或成本问题?拥有USB 2.0支持会让它变得史诗般美好。
有工程师解释,USB 2.0的芯片面积很大,需要为芯片边缘的物理体增加更多空间,因此硅领域的成本是很大的。此外,它还占用更多的 GPIO。所以说,虽然技术上可行(虽然需要大量的工作),但模具区域的成本令人望而却步。
备受争议的ADC
树莓派Pico(RP2040)是好产品吗?绝对是。但它为什么一直处在一个“不上不下”的地位,或许是因为ADC有一定问题,甚至被工程师称为“缺陷”。
去年,就有工程师发帖称“使用Pico有缺陷的ADC会收到多少错误”,他表示,RP2040中的ADC无法满足最初预期的性能,实际在使用时误差幅度很大,而且引脚在某些电压上误差幅度更高。
工程师曾经发帖分享,通过MicroPython编写的程序,测量ADC的差分非线性,即当信号扫过该范围时,是否存在缺失或接近缺失代码。最后发现,存在4个奇怪的峰值。同时,由于电容器充电和放电时波形的指数性质,直方图的两端高于中间,仔细检查输出文件会发现许多其他异常。
对于这个问题,有的工程师用软件简单修复了一些,似乎也能恢复正常,但很明显这种情况应用到工业中是存在问题的。
一个工程师就表示,曾考虑将RP2040芯片用在一个项目中,但“缺乏”ADC是一个杀手,因此我们最终换成了STM32。
在Pico 2(RP2350)发布以后,很多工程师第一时间就去Datasheet中寻找ADC修复相关的信息。他们在最新的RP2350的Datasheet中发现,RP2040-E11 所述,消除了代码 0x200、0x600、0xa00 和0xe00的差分非线性尖峰,将ADC的精度提高了约0.5 ENOB。将外部ADC输入通道的数量从4个增加到8个通道,仅在QFN-80封装中(海报说明:例如仅限 RP2350B)。
对用户来说,是个好消息,不过具体实际情况,还需要进一步测量。不过,至少树莓派意识到了这个问题,也在抓紧修复。