2 ポイント 投稿者 GN⁺ 2024-06-12 | 1件のコメント | WhatsAppで共有
  • Raspberry PiのRP2040は、コンシューマー向け電子製品に組み込むマイクロコントローラとして、低価格で大量在庫を確保しやすく、開発初期の選定負担を下げてくれる
  • Raspberry Piは複数の派生品ではなく単一部品に注力し、細かな仕様最適化の余地は減った一方で、質問・作例・ライブラリ・ツールが一箇所に集まる効果を得ている
  • 70セントという価格は、大量生産での部品コスト最適化には不利になりうるが、Late Mateのようなプロジェクトでは開発コスト削減のほうが大きなメリットになることがある
  • 2コア、30個のGPIO、USB、UART/SPI/I2C/PWM、より多い内蔵RAM、そして内蔵フラッシュなしという構成は、十分で柔軟な折衷案に近い
  • PIOと読み取り専用ブートローダ、過剰なファームウェア保護を避けた設計は、RP2040を特定用途に合わせた実用的な部品に見せている

単一部品戦略が生んだエコシステム

  • RP2040はRaspberry Piが作ったマイクロコントローラで、より広く知られるRaspberry Piボードとは異なり、コンシューマー向け電子製品に組み込まれる用途を想定している
  • Mouserでは数万個単位で即納可能な在庫があり、価格は約70セント水準
  • 一般的なマイクロコントローラメーカーは、似ているが少しずつ異なる製品を多数提供している
    • 物理製品は製造コストがかかるため、大量生産では部品あたり1セントの削減でも利益に影響する
    • そのため、製品にちょうど合った性能のマイクロコントローラを選ぶ適正仕様化の誘因が生まれる
  • Raspberry PiはRP2040で事実上1つの部品に集中している
    • 選択肢や細かな仕様調整の余地は減る
    • その代わり、StackExchangeの質問、ブログ記事、経験、GitHub Issues、ライブラリ、ツールが同じ部品に蓄積される
  • Late Mateのようなプロジェクトでは、部品コストよりも開発コストのほうを大きく節約できるため、単一部品戦略がよい折衷案になりうる
  • RustのサポートはEmbassyの例のように充実しており、キーボード・ドローン・サッカーロボット向けのファームウェア例もある

十分なハードウェアとPIOの柔軟性

  • RP2040の設計は、「最高スペック」よりも十分で柔軟な構成を選んだ汎用的な折衷案に近い
    • そこそこ優秀なコアを2つ備え、2つ目のコアは必要なときに使える
    • GPIOは30本で平均的な水準
    • オンボードフラッシュはなく、代わりに外部接続が難しい内部RAMにより多くの予算を割いている
    • ADCは十分な水準で、USBやUART/SPI/I2C/PWMといった一般的なペリフェラルを備える
  • やや非伝統的な機能としてPIOがある
    • PIOはProgrammable Input/Outputの略で、高速IOを正確なタイミングで実行しつつCPU時間を使わない、小さな補助プロセッサ2基のようなもの
    • DShot ESCのような通信プロトコル実装に使われている
    • Pico-PIO-USBはPIO上に完全なUSBスタックを実装し、RP2040に2つ目のUSBコントローラを提供する
    • DMAと組み合わせると、ディスプレイドライバがディスプレイおよびタッチ通信をCPUから完全にオフロードできる

ブリック状態を避けるブートローダとセキュリティの折衷

  • RP2040はブリック状態にできない構造を備えている
    • 読み取り専用ブートローダが含まれている
    • USBマスストレージとしてマウントし、ファームウェアをその「ストレージ」にコピーする方式で更新できる
    • 独自のシンプルなUSBプロトコルはpicotoolで使われている
  • ファームウェアを専任の攻撃者から守ることはほぼ不可能であり、そうした試み自体に複雑さと開発者体験上のコストが伴うという判断から、過剰なセキュリティ演出は行っていない
  • こうした選択は、RP2040が小さなシリコン部品の置かれたニッチを踏まえ、実用的にバランスを取った結果と見ることができる

1件のコメント

 
GN⁺ 2024-06-12
Hacker News の意見
  • RP2040の真の主役は PIO で、ESP32 のような競合チップではなかなか実現しにくい能力を与えてくれる。
    そのためコンソールハックの分野であちこちに使われている。ただ、バッテリー駆動用途では、V2 でディープスリープ時の消費電力がもっと低くなるとよい。

    • バッテリー寿命のようなものは、経験が蓄積されれば改善する可能性が高い。シリコン側の人と RP2040 について話したことがあるが、第1世代設計としてはかなり典型的な特徴だと言っていた。
      FPGA で検証できるデジタルロジックはおおむね問題ないが、アナログ要素ははるかに微調整が難しく、その結果として消費電力が悪い、ADC が弱い、内部 DAC やオペアンプがない、といった形で表れる。Pico W の無線チップも ESP32 のような完全統合ではなく、別個の既製部品になっている理由はそのあたりに近い。
    • PIO で一番いら立つのは、2個しかないことだ。それぞれに 4 個のサブユニットはあるが、命令空間は 32 個しかなく、外部クロック入力もない。
      ごく基本的なペリフェラルを実装するには素晴らしいが、少し複雑なものを作り始めて、遅すぎるし領域も足りないと気づいたことが何度もある。もう少しだけ強化されれば、ちょっとした FPGA 用途をかなり簡単に置き換えられそうだ。
    • 私にとっては供給の安定性が肝だ。IC は 1 つ、製品寿命は長く、常に在庫がある。2021/2022 年の混乱を経験した後では、数セントを節約するためにまたこういうものを犠牲にする気はない。
    • ロボティクスでも同じだ。8 個の PIO があれば、割り込みコストをほとんどかけずに 4 つの直交エンコーダを読み取って記録するのに十分で、MicroPython のような遅い環境でも高性能な閉ループ制御器を作れる。
    • ESP32 と RP2040 を比較するのは、リンゴとオレンジを比べるようなものに近い。
      入出力が大量に必要なら、普通は ESP32 は見ない。ESP32 の強みは安くて WiFi が内蔵されていることだ。RP2040 と比べて有利な他のマイクロコントローラの選択肢は多いが、その大半はホビー市場向けではない。
  • ここ数年、RVASec セキュリティカンファレンスの電子バッジ[1]に RP2040 を使ってきており、ソフトウェアを書く体験はかなり良かった。
    今年のバッジの GitHub リポジトリはこちら。ハードウェアなしでもある程度触れるソフトウェア専用のバッジシミュレータがあるが、赤外線によるバッジ間通信に依存するマルチプレイヤー機能は、少し面白みに欠けるかもしれない: https://github.com/HackRVA/badge2024

    [1] 2023 年のバッジ動画: https://www.youtube.com/watch?v=KWZriUMNpLc
    [2] https://rvasec.com/

    • なぜカスタムで作って NXP 製品を使わなかったのか気になる。
  • 「同じマイクロコントローラで、バグ修正リビジョンが 2 つだけ」という表現は正確ではない。
    実際にはまったく同じマイクロコントローラで、パッケージングオプションが 2 種類あるだけだ。一方は 500 個入りの 7 インチリール、もう一方は 3400 個入りの 13 インチリールだ。データシートの “Ordering code” を見ればよい: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.p...

    • それでもバグ修正リビジョンは何度かあった。RP2040-B0 がオリジナルで、-B1 では ROM コードが一部改善され、-B2 ではさらに ROM 変更が入り、初期版のシリコンバグも修正された。
      公式 SDK を使うなら、どのバージョンかを大きく気にする必要はあまりない。標準の高レベルライブラリが実行時にハードウェアリビジョンを検出し、必要な回避策を有効化または無効化するからだ。
  • RP2040 は、カスタムコントローラというかなりニッチな市場をほぼ単独で再び活性化させたと言える。
    オープンソースのゲームパッドファームウェアである gp2040[1] のおかげで、人々は Victrix や Razer のようなメーカーの製品よりもはるかに安く、そこそこ品質の良いファイトスティックやレバーレスコントローラを買えるようになった。オープンソースなので、コントローラ愛好家コミュニティでも、あらゆるプロジェクトや変わったコントローラのアイデアに合わせた RP2040 PCB が作られている。

    [1] https://gp2040-ce.info

    • そのうちどれだけを RP2040 のおかげと直接見なせるのかは気になる。QMK0 のようなプロジェクトは、DIY キーボード向けに技術的にはかなり似たコードベースをかなり前から使ってきた。
      ざっと見る限り、GP2040 には、ある程度現代的な他のマイクロコントローラではできないようなことは特になさそうだ。RP2040 が GP2040 の広範な採用を促す触媒だったのは明らかだが、Pro Micro でも似たことは可能だったように思う。

    • PhobGCC も外してはいけない。私はそのリード開発者で、GameCube への特化を少し弱めた後続系統として ProGCC V3、GC Ultimate、Phizard などもある。

    • 「単独で」という表現は、Brook ボード、たとえば Zero-Pi[1] のようにそれ以前からあったものを過小評価しているように思う。歴史的には完全に正しいとは言えなさそうだ。

      [1] https://www.brookaccessory.com/detail/53169470/

  • 電子工作を趣味にしているが、自分で表面実装ボードを作ったり設計したりしたくないなら、安価で入手しやすい RP2040 ボードが非常にたくさんある。
    Raspberry Pi Pico($5)で使ってみたが、入出力の多い良いボードに載っている。少し多く払えば WiFi 付きの W 版もある。

    入出力が少し減ってもよければ、RP-2040 Zero を注文できる。AliExpress で 6 個を約 $12 で買った。入出力ピンは 23 本しかないが、リセットボタンと USB-C があり、とても小さい(1.5cm x 2.5cm)。

こうしたボードの良いところは、標準の Raspberry Pi 開発ツール、Micropython、C++ がそのまま問題なく動き、USB でファームウェアを手軽に書き込めること。

  • pico ice もおすすめしたい。$30 という価格の大部分は搭載されている UP5K によるものだが、サブマイクロ秒単位の動作が必要な組み込みプロジェクトには、オープンソースツールを使える比較的安価な選択肢だ。

  • RP2040 ベースの代替開発ボードをいろいろ探してみることを強くおすすめする。公式の Pi Pico は意外といまひとつで、ほぼすべての代替ボードが何らかの面でより優れている。
    リセットなし、大きなフォームファクタ、2Mbit のフラッシュだけ、しかも micro USB というのは、2024 年にはちょっと厳しい。ほぼ唯一の利点は広く入手できることだ。

  • 小型の RP2040 ボードが良い。adafruit QT Py ベースで小さなプロジェクトをいくつか作った。
    無線版があるといいのだが。ESP32 QT を使えば存在はするものの、RP2040 では私の見る限りないようだ。

  • 空間制約がものすごく厳しいのでなければ、2040 Zero の利点はよく分からない。機能は少ないのに価格は高い。Pico もすでにかなり小さい。
    それでも Pico はピン互換性が本当に良い。ESP 系では入出力ピンが多く見えても、内部フラッシュやブートローダーなどにつながっているピンのせいで、運が良ければようやく足りる程度まで減ってしまう。なぜそういうピンをわざわざ外に出しているのかも疑問だ。ESP32-CAM にはデータピンが 10 本あるが、実際に一般用途で使えるのは 4 本だけだ。

  • ESP32 から RP2040 に移った理由は、より安定していてドキュメントがよく整備されたデバイスだったからだ。
    今 RP2040 について唯一気にしているのは、SPIRAM を搭載した ESP32 モデルは多い一方で、SPIRAM 付きの RP2040 ボードはそれほど簡単には見つからないこと。正直、RP2040 の C 開発環境は非常に良いのでメモリをうまく活用できるが、大きな MicroPython プロジェクトを作るなら SPIRAM は本当に大きな資産になる。それ以外では RP2040 はあらゆる面で素晴らしい。

    • 記事では Rust サポートの部分を最終的に削ったが、Rust に抵抗がないなら、組み込みでの非同期 Rust は本当に使いやすい。
      Embassy の中心人物の一人である Dario Nieuwenhuis が RustNL で優れた概要発表をしている: https://www.youtube.com/watch?v=H7NtzyP9q8E
    • まったく同意できない。ここ数か月 Espressif エコシステムで作業してきたが、現存するマイクロコントローラープラットフォームの中で最もドキュメントが整っている。
    • RP2040 には QSPI ポートが 1 つしかない。
      JLC は RP2040 ボードを 5 個の数量なら 1 個あたり $3 未満で組み立ててくれる。
    • esp-idf を使ったのか、それとも Arduino ライブラリを使ったのか気になる。
  • 比較自体がリンゴと桃を比べるようなものだ。RP2040 は単なるチップで、ESP32 側には望む周辺機器がたくさん付いた選択肢が多い。
    WiFi/Bluetooth アンテナ、リチウムイオンバッテリーコントローラー、Ethernet、ディスプレイやカメラのコネクターなどから選べる。

    CPU の選択肢も多様で、コインセルで動かす場合は、不要な第 2 コアや WiFi に電力を使うかどうかが差を生む。

    C6 バリアントでは Espressif が ISA も再び変更し、8266 から ESP32 を経て RISC-V ベースの ISA へ移行している。

    結局、第 1 世代 SoC と 10 年ものの SBC 系列を比べているようなものだ。

    • ESP32 devkit と ESP32 自体を混同しているように思う。アンテナ、バッテリーコントローラー、何らかのコネクターが付いているものは devkit、あるいは少なくともモジュールだ。ESP32 自体は RP2040 と同じく小さな IC である。
      たとえば、こういう devkit を想定しているのだと思う: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s...

      このボード自体も ESP32-S3-WROOM-1 のようなモジュールをベースにしており、そのモジュールは ESP32-S3 IC に WiFi アンテナやコネクターのような便利要素をまとめたものだ。

      RP2040 で対応するのは Raspberry Pi Pico で、ここにも WiFi バリアントのような小さな便利要素がある。他の周辺機器と一緒にパッケージ化した製品もある。

      RP2040 も ESP32 シリーズも SBC ではなく、どちらにも SBC の系譜はない。Raspberry Pi SBC はすべて Broadcom ベースで、RP2040 は Raspberry Pi が新たに開発した IC であり、私の知る限り Broadcom からライセンスした IP もない。

    • 技術的には正しいが、核心は用途に近い。RP2040 は実際に独特な存在で、趣味・教育用途だけでなく プロ向け組み込みデバイスでも、急に多くのプロジェクトにとって優れた選択肢になった。
      価格に対する可能性を見れば、単一チップのバージョン 1 つで本当に多くの領域をカバーしている。私にとっては、こういうものこそ技術進歩の意味だ。

    • 両方ともチップ自体について話していると見るのが無難だ。どちらもバッテリーチャージャー、カメラ、原子炉に接続できるが、そうした 周辺機器はこの比較とはまったく無関係だ。

    • WiFi のような モジュール統合の面で、ESP と比較できる非中国製の代替があるのか気になる。コストが多少高くても構わない。

  • RP2040 については複雑な感情がある。
    一方では、趣味の開発者にとって素晴らしいチップだ。安く、入手しやすく、ボード設計が簡単で、平均的なアプリケーションに必要なものを十分に提供してくれる。

    他方で、プロの観点では確かに少し物足りない。周辺機器は悪くないが、細部に入ると制約にすぐぶつかる。XIP インターフェースは素晴らしいが書き込みをサポートしないため、FRAM チップを付けてメモリを拡張できない。PIO インターフェースは驚くべきものだが、より複雑なインターフェースを実装しようとすると、2x32 命令という制限はかなり大きい。Timer/Counter はどこにある? 静電容量式タッチはないのか? アナログは 4 ピンだけなのか? 5V トレラント入力はないのか? PIO モジュール用の高速クロック入力はなぜないのか? 内部リング発振器でブートローダーを実行できない理由は? USB-C PHY もあればよかったのに、と思う。

    ESD 性能が悪いのにも驚いた。Atmega や STM32 はたまに静電気ショックを受けても大丈夫で、外部に露出したポートの ESD 保護はあれば良い程度だ。RP2040 はすべてのピンに外部保護を追加しないと、日常使用の中でいくつかが死ぬのを実質的に目にすることになる。

要するに、クールなチップで趣味用途には素晴らしいが、プロの現場で自分が最初に選ぶものではなさそう

  • USB-C PHY が具体的に何を意味しているのか気になる。USB-C はコネクタで、その上で USB 1.1/2.0/3.0/3.1 を動かせる。現実的には、RP2040 は USB 2.0 PHY すら十分に使いこなせない

  • 趣味の開発者でも、結局はより複雑なプロジェクトをやるようになり、まさにそうした限界にぶつかる

  • FRAM がどのような種類のアプリケーションで最も役に立ったのか気になる。技術自体は本当に面白そうだが、価格が高すぎて、SRAM や PSRAM と NAND の組み合わせの代わりにいつ使うべきなのか、理解しにくい

  • RP2040 内の Synopsys DesignWare SSI マクロは、実際には読み書き可能な PSRAM や FRAM に使えそうではある。ただし、RP2040 データシートの要約版ドキュメントだけでは、そのように設定するには十分でないように見える

  • Raspberry Pi はもともと教育向けの非営利から始まった

  • RP2040 はかなりクールで、これまでに半ダースほどのプロジェクトで使ってきた
    ただし「これ一つで全部できる」というアプローチは自分には合わない。必要なことをこなせる最小のマイクロコントローラを使う方が好みだ

    できるだけ非力なマイクロコントローラを使おうとする理由は、お金ではなく電力予算にある。ほとんどのプロジェクトがバッテリー駆動なので、できるだけ消費電力を抑えられるのは大きな利点だ

    それでも、20セントのものでも同じことができるのに、なぜ 1ドルのマイクロコントローラを使うのかと思う

    • はるかに大規模なオンラインドキュメント、サンプルコード、質問に答えてくれる経験豊富な趣味開発者の層は、80セントの差よりずっと価値がある
      バッテリーを長持ちさせるために、より非力なコントローラを使うのは十分に良い理由だ。安いというのは理屈の上では良いが、実際には一回限りのプロジェクトではほとんど意味がない。数十セントの差を気にして買い物をしたのがいつだったかも覚えていないし、体感できる差ではない
  • RP2040 は好きだが、現在のプロジェクトで離れた理由を説明したい
    第一に、PlatformIO をめぐる論争は本当に印象が悪かった。ツールの混乱で被害を受ける開発者の側に立ちたい

    第二に、上位の ESP32-S3 はモジュール形態で提供されており、実質的にはいくつかのデカップリングコンデンサを付けるだけで PCB に載せられる。RP2040 は水晶を含め、十数個ほどの部品を慎重に配置する必要がある。モジュールは実装の複雑さを大きく減らすだけでなく、標準化によって、エンジニアごとに間抜けな部品配置ミスをする可能性も減らしてくれる

    第三に、ESP32-S3 には静電容量式タッチとして設定可能な GPIO ピンが 14 本あるが、RP2040 にはない。RP2040 と静電容量式タッチを組み合わせるプロジェクトの多くは MPR121 に依存しているが、この IC は廃番状態で、今後数か月の間に急な再設計を多数引き起こす可能性が高い

    いずれ RP2040 も、より強力または非力なバージョン、そしてモジュール形態のバージョンを出す可能性は高い。STM や PIC のような状況にまではしないだろうが、ESP32 ファミリも慣れてしまえばそれほど奇妙には見えない

    • Espressif も PlatformIO に関して Pi と同じような状況のようだ[1]。外から見る限り、PlatformIO は RPi と Espressif に非常に大きな年間費用を要求しようとしていて、それは初期サポートが追加され、コミュニティの一部が採用し始めた後だったように見える
      奇妙な状況だが、PlatformIO は複数のプラットフォームをサポートし、コミュニティからの貢献を受け入れて支配的な地位を築いた後、事後的にメーカーから直接価値を引き出そうとしたように見える。新しいボードリビジョンの追加やバグ修正を行うコミュニティ PR もブロックしていた。関連情報: [2]

      [1] https://github.com/platformio/platform-espressif32/issues/12...

      [2] https://github.com/platformio/platform-raspberrypi/pull/36

    • 公平に言えば、RP2040 はそれらの部品を本当に配置しやすいように設計されている。筋の通った配置は実質的に一つしかなく、必要なすべてのピンに簡単にアクセスできる
      優れたドキュメントまで含めると、一度入れておけば二度と考えなくてよい、多部品のドロップイン設計に近い。最初は少し気後れしたが、実際の実装は本当に楽しかった

    • RP2040 を発売時から使っていて PlatformIO は一度も使ったことがないのだが、どのように使っていて、何がそんなに良くなかったのか気になる
      ローカルで cmake と pico sdk、または micropython で開発するのはとても簡単に見えるので、なぜそこに PlatformIO を混ぜるのかよく分からない

    • これをモジュール化しても、有意な価値が生まれるとはあまり思わない。誰もが少しずつ違うフォームファクタを望んでいるし、周辺回路の設計が非常に簡単なので、モジュールが明確な成果を出しにくい
      タッチはニッチな単一機能に近く、入れなかったのはむしろ良いことだ。その機能には別の IC を使うのが正しく、人々が怠けて廃番部品にしがみついているのは RPi の問題ではない。あるいはソフトウェアで実装すればよい

      この点では元記事に同意しており、財団は製品定義を本当にうまくやったと思う

    • Atmel、STM、TI、Ambiq、Nordic などのチップを何十年も設計に組み込んできたが、そうした問題を解決する方法がなかったわけではない。私の隣 2ヤードのところにいるインターンも、初めての PCB 設計で STM の周辺に正しい部品を配置しようと奮闘している。こうしたことを少しでもやったことがある人にとっては、難しい問題ではない
      どうせその十数個の部品は、発振器/水晶回路、リセットのホールドアップ、3.3V 電源、そして大量のデカップリングコンデンサだ。アンテナチューニングは確かに難しいこともあるが、チップアンテナを使えるならそれほど難しくもない

      どれもあまりに標準的なので、adafruit RP2040 Feather の回路図を見たとき、多くの部分が既存の Feather からほぼそのまま持ってこられているように見えて、むしろ驚いた。RP2040 Feather と nRF52840 Feather の違いは、マイクロコントローラ自体、RP2040 用タイミング回路全体の 5 部品、Nordic ボード用のアンテナ回路くらいだ

      モジュールは趣味市場に売るには非常に便利だが、実際の製品を販売するには依然として RF 認証プロセスを通す必要がある。コストは下がるかもしれないが、モジュール使用による高めの先行コストが低い認証費用で相殺されるかどうかは、自分で判断する必要がある。それでも結局、節約できるのはアンテナチューニングの段階くらいで、通常これは大きな配線修正ではなく BOM のバリエーションで対応する

STM や PIC のチップが何十種類もあるのと同じように、TI も同じ状況です。顧客は必要なものにだけお金を払いたがり、メーカーにはその需要を支える生産能力があります。違いが重要なら、これは負担になることではありません。Home Depot が木材の種類を売りすぎていると文句を言うのと非常によく似ています。

静電容量式タッチ IC も、Adafruit が1つしか扱っていないだけで、Mouser にはディスコンではない部品が199個あります。機能を維持するには、Adafruit がその中から1つ選べばよいだけです。最も安いものは TSOT パッケージなので、製造のしやすさもかなり良いはずです。職場でこういうものを設計してプログラミングするのに疲れきっていなければ、今夜家に帰って1つ作ってみることもできます。ボード設計は1時間ほどででき、I2C ドライバーにはさらに数時間かかりそうです。