阅读RP2040资源介绍时,“八个独立PIO状态机”容易给人一种印象:每个状态机都带着一份自己的程序存储。MicroPython的PIO文档却同时写了另一层关系——指令存储属于PIO块,由块内四个状态机共享。独立与共享在这里并不矛盾,因为它们描述的不是同一种资源。

先看数量的组织方式。文档的RP2040段说明,芯片有两个PIO块,每块包含四个独立状态机,合计八个。因此,八并不是一个没有内部划分的数:状态机先归入不同的块,再构成整颗芯片的总量。若资源摘要只保留“八个”,就会丢掉后面理解存储关系所需的分组。

在Instructions部分,原文明确说每个PIO块有可容纳32条指令的存储,由其中四个状态机共享。这句话的主语是“每个块”,不是“每个状态机”。将它改成“八个状态机各有32条独享指令空间”,就把共有资源重复算成了私人资源;仅有独立状态机这一描述,并不支持这样的改写。

可以把文档中的两句话放在一起理解:状态机数量说明有多少执行单元,块内指令存储说明这些单元所用程序资源的一层组织关系。一个单元能够独立工作,并不要求它周围的每一种资源也都独占。这里的分析不涉及某个实际程序怎样分配、几段程序能否同时放入或如何复用指令,只是先让资源名称对应到正确层级。

同页还单独介绍FIFO,用来在状态机与其他部分之间传递数据。这又提醒读者,“存储”一词可能用于不同用途:指令所在的空间与传递数据的队列,不能因为都能容纳内容,就合成一项笼统容量。整理芯片资料时,保留块、状态机、指令存储和数据队列的原名,能减少把某一容量附到错误对象上的情况。

本篇读取的是MicroPython的latest开发分支文档,其页首提示内容可能包含已发布版本尚不具备的功能。这里只采用RP2040的资源层级说明,不把页面中的其他型号、例程或兼容性描述当成项目已经验证的能力,也不提供接线、频率或汇编配置。八个状态机说明了执行资源数量;它们怎样分组共享指令空间,是另一项同样需要读清的事实。

信息来源

本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。