RP2040とネットワークチップが合体! WIZnet W55RP20-EVB-PICO レポート

はじめに

こんにちは、tnishinagaです。

今回はWiznetの新製品W55RP20-EVB-PICOをいただいたので、遊んでみようと思います。

要約

  • W55RP20はW5500とRP2040とFlashが1パッケージになったもの
  • メリット
    • チップ面積が減るので基板をつくる人にはサイズメリットがあるかも
  • デメリット
    • W5500とRP2040間の通信にPIOが必要
      • 代わりにSPI0は不要。一長一短。

W55RP20

W5500は韓国のWIZnet社で作られているマイコン向けのネットワークチップです。
TCP/IPの通信の大部分をハードウェアが行ってくれるので、プログラムサイズや処理コストなどを抑えつつ外部とのネットワーク通信が行えるようになります。
たとえば、有線LANに繋がるIoTデバイスをマイコンで作りたい場合などに重宝するでしょう。

W55RP20はこのネットワークチップW5500と、Raspebrry Pi Picoに載っているRP2040とFlashを1パッケージにまとめた製品です。
1パッケージにまとめるメリットとしては、中身のW5500とRP2040とFlashを別々に基板に乗せる場合に比べてチップ1枚分の面積が減らせて基板を小型化できたり、配線をシンプルにできるなどがあります。私は趣味でRP2040の基板設計制作もしているので、個人的にも1パッケージになって面積や配線のコストが減るのは大変嬉しいです。

EVB-PICOの比較

(EVB-PICOの比較画像。3チップが1パッケージになって回路がだいぶスッキリしている。USB端子がType-Cになったのも地味に嬉しいポイント)

サンプルの動作

W5500-EVB-PICO向けのコードそのままでは動かない

W55RP20向けのサンプルコードは、2024/10/09現在以下の環境向けに提供されています(W55RP20-EVB-PICOページ より引用)

  • C/C++
    • Ethernet Examples
    • AWS Examples
    • Azure Examples
    • LwIP Examples
    • FreeRTOS Examples
  • MicroPython Examples
    • Ethernet Examples

私は普段embassy-rsというRust用のライブラリを使って開発をしているので、紹介されているサンプルではなくembassyのW5500-EVB-PICO用サンプルを試すことにしました。
W55RP20はW5500とRP2040がパッケージ内で接続されているだけなので、W5500とRP2040が使われているW5500-EVB-PICO用のサンプルはちょっと手直しするだけで動くだろうと思って試してみたのですが、うまく動きませんでした。なぜでしょうか?

W55RP20のW5500とRP2040の接続

W5500-EVB-PICO用のサンプルがW55RP20で動かない原因を探るため、W5500とRP2040の接続を公式サイトのsystem overviewより調べます。

W55RP20

(画像はW55RP20プロダクトページより引用)

この図によると、RP2040のGPIO20から25がW5500のSPIインターフェイスに繋がれているようです。
次にRP2040のGPIO20-25を見ていきます。

RP2040GPIO20-25

(rp2040のデータシートpp.237より引用)

データシートによるとRP2040のGPIO20-25にはSPI0の割当ができるので、SPIペリフェラル経由でW5500を制御できると思っていたのですが、うまく動きません。
結論を先にいうと、W55RP20でW5500を制御するためにはPIOでSPI通信する必要があります。

SPI0で通信できない理由

SPI0を使って制御できない理由はW5500とRP2040のピン配線にあります。
通常SPI通信を行うためには、マイコンとデバイス間のIO方向があうように接続が必要です。
しかし、W55RP20のサンプルコードよりSPIピン配置を調べてみると、RP2040のデータシートに記されたピン配置とまったく合いません。

(W55RP20のサンプルコード更新履歴より引用)

RP2040のSPI0を使う前提で図示したらこんな感じでばらばらになっています。どういうことでしょう?

ここでW55RP20のsystem overviewを見直してみると、SPI接続部に「PIO SPI」と書かれていました。

(画像はW55RP20プロダクトページより引用)

また、W55RP20対応時の差分を見直してみると、PIOのアセンブリが追加されていました。
つまり、どうやらRP2040のSPI0はピンの接続があわなくて使えないので、PIOを使ってピンを入れ替えてW5500を制御する必要があるようです。

サンプルコード作成と動作確認

制御のためにPIOのプログラムが必要とわかったので、早速作って動かしてみました。

とりあえず動かすことを目的にSPI MODE0のみ対応かつクロックもテキトーなPIOのコードを書いて、emabssyのwiznet driverで使えるようにSpiBus traitを実装してSPIデバイス部を差し替えています。
抽象レイヤーをちゃんとつかって作られているライブラリは、こういう入れ替えが簡単にできて嬉しいです。

ベースにしたembassyのtcp_serverのサンプルコードは、入力をechobackするだけの簡単なTCPサーバーを立ち上げるだけです。
動作の様子はこんな感じです。

サンプルコードは以下で公開しています。

https://github.com/tnishinaga/w55rp20_tcp_server_example

感想

実際に触ってみての感想です。

  • チップ面積が減るのは基板をつくる人的には大変嬉しい
  • ライブラリが充実してくるまでは使いづらいチップかも
    • W5500制御のためにPIOでSPI制御プログラムを作るのはちょっと大変
      • デバッグ時に疑うところが増えるのも大変
    • 逆に考えればPRチャンスでもある
  • SPIの代わりにPIOが1つ使えなくなるのは一長一短
    • RP2350ならPIOが3つ付いてるので欠点にならないかも?
    • チップリビジョン変更時にSPI0でも制御できるようになると嬉しい

どこで買えるの?

公式通販サイトではcomming soonとなっていますが、digikeyではすでに買えそうでした。

チップ単体はまだ買えませんが、WIZnetさんが以下のような投稿をしているので近いうちに買えるようになると思います。楽しみですね。

Raspberry Pi SSD および SSD Kitsを発表

Raspberry Pi Ltdは10月23日にRaspberry Pi SSD および SSD Kitsを発表しました。

https://www.raspberrypi.com/news/raspberry-pi-ssds-and-ssd-kits

256GBと512GBの2種類が用意されており、SSD単品の場合は256GBが30ドル、512GBが45ドルとなっています。また、M.2 HATとセットになったSSD Kitの場合は、256GBが40ドル、512GBが55ドルとなっています。

なお、今月上旬には、A2クラスに対応した公式のMicroSDカードと、Raspberry Pi 5向けのバンパーも発表されています。

https://www.raspberrypi.com/news/sd-cards-and-bumper

Raspberry Pi AI Cameraをさわってみた

こんにちは、あっきぃです。

先日発売されたRaapberry Pi AI Cameraのサンプルをミドクラ様からお借りできましたので、さわってみたレポートをお送りします。

製品のようす

カメラ本体。カメラセンサーはソニーのIMX500という、2020年頃に登場したセンサーを使用しています。

一見すると今までのカメラモジュールと同じように見えますが、AI Cameraは、搭載されているIMX500カメラセンサー自体がAI処理を実行して結果を返すため、映像と結果を受け取ることも、結果だけ受け取ることもできます。後者を活用すれば、通信帯域を節約しながら物体検出を行ったり、プライバシーに配慮しながらデータを軽量に保存することも可能になります1。ちなみに、右側のパーツはレンズ部分に付属する保護カバー?のようです。使うときは外して使用するようです。

カメラセンサーの下にチップが見えていますが、これはRaspberry Pi PicoでおなじみRP2040チップです。以下は製品画像の引用2ですが、センサーの下はこうなっているようです。

こちらは特筆することはないのですが、カメラセンサーの裏側も。

パッケージと付属物はこちら。白いドーナツ状のパーツは、Camera Module2にも付属していた。レンズのフォーカス調整用リングです。カメラケーブルはPi 5で登場した、今までより硬めのケーブルが、Pi 5とZero系向けのものと、それ以外の従来モデル向けのものの2種類付属しています。

導入してみよう

今回はドキュメントのチュートリアルをそのまま試すだけとしたため、手順は以下のページを参照ください。

https://www.raspberrypi.com/documentation/accessories/ai-camera.html

とはいえ、OSを最新にアップデートして(カーネル、libcamera、Picamera2などをIMX500のバージョンに上げる必要があります)、imx500-allパッケージを導入するだけで遊び始められるため、比較的かんたんです。

動かしてみる

実際に動かしてみましょう。まずはRaspberry Pi 5を使用して、いろいろなサンプルを動かしてみました。カメラは、カメラケーブルにマスキングテープで針金(ケーブルを束ねるのに使われているネジネジのやつ)を貼り付けて、フレキシブルなケーブルにするハックと、スマホスタンドの組み合わせで固定しました。

まずはシンプルな物体検出のサンプル。最近はあまり見かけないような気もする、Raspberry Pi公式マスコットのクマ「Babbage Bear」が、きちんと「teddy bear」として認識されていますね。皆さんご存知でしょうか?Pimoroniで現在もふつうに購入できるので、気になる方はこちらです。

少し見づらいですが、ディスプレイの左下でhtopコマンドを実行しています。Raspberry Pi自体に負荷がそれほどかかっていない=カメラがAI処理をやっています。

こちらはスクリーンショットでちゃんと撮影してかつ、Picamera2バージョンの物体検出サンプルです。AI Cameraももちろん、Picamera2で開発できるのが利点の一つです。こちらのほうがhtopの結果が見やすいですね。ちなみに、左上のデモ実行の出力を見ると、Network Firmware Uploadという出力が見えますが、コマンドを実行すると、カメラにデータを転送する処理があり、起動までに30秒〜1分ほど時間がかかります。

こちらは人間のモーション検出デモ。これも先のデモも含め、AI Kitで同様のデモが実行できますが、ほぼ同じことがカメラだけでできています。おかしなポーズをとってもちゃんと認識していますね。

これはセグメンテーションのデモ。検出したものの物体に色をつけてくれるものですが、暗めの緑で色付けをされて、呪いにかかった人間のエフェクトっぽいなと思ったので、そんなポーズにしてみました。夜に試していたときの写真なので、実際に疲れているのですが。

他のモデルでも動かしてみる

AI Cameraのリリースの記事では、AI CameraはPi Zeroをふくむすべてのモデルで動作しますと言及されています。

The AI Camera can be connected to all Raspberry Pi models, including Raspberry Pi Zero, using our regular camera ribbon cables.

実際に、先日のMaker Faire Tokyo 2024のKSYブースでは、Raspberry Pi Ltdから来ていたMattさんがAI Cameraのデモを持参して展示していて、ここではPi Zero(おそらく2W)が使用されていました。

というわけでわたしもPi Zero 2Wで環境を再現してみました。ディスプレイはPimoroniのHyperPixel4を使用しました。

裏面。こちらのカメラの固定には簡易的に、厚紙とマスキングテープを使用しています。

MicroSDカードのセットアップは、あらかじめRaspberry Pi 5で済ませて、動作も確認してからPi Zero 2Wに移しました。が、どうやらこれではPiZero 2W上のRaspberry Pi OSがカメラを自動認識できないようです。ドキュメントのチュートリアルでも、「少し手を加えれば」という一文があるので、どうやら手を加える必要がありそうです。

With minor changes, you can follow these instructions on other Raspberry Pi models with a camera connector, including the Raspberry Pi Zero 2 W and Raspberry Pi 3 Model B+.

ドキュメントには記載がありませんが、はカメラを手動でも認識できるようにすれば良いので、つまり、/boot/firmware/config.txtに設定を追記すればOKです。

# この設定をコメントアウトする
# Automatically load overlays for detected cameras
#camera_auto_detect=1 

# ファイル末尾の[all]以下に追記
[all]
dtoverlay=imx500

# これはHyperPixel4用の設定
dtoverlay=vc4-kms-dpi-hyperpixel4

設定後にOSを再起動をしたら無事に認識してくれたので、試してみた結果がこちら。

動画で!

もちろん、PiZero 2WはRAMが512MBしかないため、デスクトップが起動するまで待たされたりしますが、起動してしまえば、動画のように物体検出の結果がすぐにでてきます。

AI KitとAI Cameraどちらにしよう?

公式のリリースでも言及されていますが、AI Kitはパフォーマンスの代わりにPi 5限定である一方、AI Cameraはカメラと一体になっているため用意するものがこれ一個で済んで、Pi 5以外のほぼすべてのRaspberry Piで使えます。

個人的には、手軽な入門としては、後者のほうが手軽そうな印象をもちました。

入手するには?

AI Cameraは各リセーラーを通じて販売される見込みです。観測している範囲では、KSYさんと、イギリスのPimoroniは未入荷です。スイッチサイエンスだけ昨晩に販売がありましたが、初回入荷分は少量だったようで、一瞬で完売してしまったようです(わたしはなんとか間に合って購入できました)。1万3千円ほどするのに、皆さん判断が早い……!!

そう言った状況のため、例によって当面入手が難しいと予想されます。AI Cameraが欲しい方は、リセーラーさんの入荷通知機能や、Pre-Orderを活用してみてください。

  1. https://www.sony.com/ja/SonyInfo/News/Press/202005/20-037/ ↩︎
  2. https://www.raspberrypi.com/products/ai-camera/ ↩︎