- Raspberry Pi Picoが専用ハードウェアなしで100 Mbit/sイーサネット送信をソフトウェアで実装した事例
- 開発者Steve MarkgrafがPIOとDMAを用いてMLT-3エンコーディング、4B5Bラインコーディング、スクランブリングを実行
- この実装は125 MHzシンボルレートで動作し、UDP経由で約11MB/sの転送を実現
- サンプルにはADCストリーマー、カウンター、PCM1802ベースのオーディオデモが含まれ、RP2040とRP2350の両方をサポート
- 低価格マイクロコントローラで高速データストリーミングと計測アプリケーションの可能性を示す技術的進展
RP2040およびRP2350での100 Mbit/sビットバンイーサネット実装
- Steve MarkgrafがPico-100BASE-TXプロジェクトを通じて100 Mbit/s Fast Ethernet送信機を完全なソフトウェア方式で実装
- RP2040および**RP2350(Pico 2)**の両方をサポート
- PIO(Programmable I/O) とDMAを使用してMLT-3エンコーディング、4B5Bラインコーディング、スクランブリングを処理
- その結果、UDP経由で約11MB/sのストリーミングが可能となり、リアルタイムオーディオおよびADCデータ転送が実演された
- この実装は**送信専用(proof of concept)**の形態であり、PoE機器との直接接続は禁止
- パルストランスまたはイーサネットスイッチを介した絶縁を推奨
プロジェクトの背景
- 3年前、kingyoPiyoのPico-10BASE-Tプロジェクトが、わずか数本の抵抗で10 Mbit/sイーサネットを実装して注目を集めた
- 2023年にはビットバンUSB実装により、RP2040のPIO性能限界を拡張
- 今回のプロジェクトはその延長線上にあり、100 Mbit/s速度の達成を通じてソフトウェア定義ハードウェアの可能性を探る
GitHubリポジトリとサンプル
- GitHubリポジトリ: Pico-100BASE-TX
- 含まれるサンプル:
- カウンター
- 内蔵ADCストリーマー
- PCM1802(75 kHz)オーディオデモ
- 標準Pico SDKでビルド可能で、RP2040とRP2350の両方に対応
技術的意義
- 専用PHYチップなしでマイクロコントローラのみを使って100 Mbit/sイーサネット送信を実装した点が核心
- 低コスト高速データ収集およびストリーミング機器の開発可能性を提示
- **ソフトウェア定義ハードウェア(Software-defined hardware)**アプローチの拡張可能性を提起
1件のコメント
Hacker Newsのコメント
これは典型的なコンピューティングの循環構造の話だと思う
最初はCPUで処理し、次にバスの外にある専用カードへ移し、そのカードが遅ければ再びカードの中にCPUを入れ、最終的にはバス間通信を最適化するためにCPU内部へ特殊ロジックを組み込むことになる
10年もすれば、RPiコアを縮小してチップレットの中に入れ、テラビットネットワークドライバを汎用CPUモデルとしてプログラムする時代が来そうだ
Design of Display Processors (1968)
最近のMCUは本当にすごい。数ドルで高性能なマイクロコントローラが買える
昔はTCP Offload Engine(TOE)のような専用カードが必要だったのに、今ではその機能の大半を小さなチップがこなしてしまう
PDMマイクをPIOで直接読むプロジェクトは本当にすばらしい
microphone-library-for-pico
これは「bit-banging」というより、PIOを使った高速制御に近い
これは送信(TX)だけを扱っているように見える。受信(RX)はずっと難しい部分では?
これをベースにUSBイーサネットNICを作るのも面白そうだ
特にNintendo SwitchがサポートしているギガビットNICをまねして、ネゴシエーションに失敗した場合は100Mbpsで動作するようにする、といった応用ができそうだ
参考までに、初期のRPi (rev B) はSSHでおよそ6MB/s程度の速度が出ていた。比較材料として興味深い
Steve Markgrafの仕事は本当に印象的だ。
彼はHigh Speed Data Acquisition over HDMIプロジェクトで知られており、Pico2を送信機として使って175MB/sまで達成している
hsdaoh-rp2350版もある
ただしbit-bangingでは100Mbitが限界だろう。1Gbitは125MHzクロックを使うが、full duplexなのでエコーキャンセリングが必要になる。
次の挑戦は、1ドルのRTL8211 PHYを使ってRGMII PHYを実装することだと思う
クロックは125MHzだがDDR方式なので、PIOは250MHzで動作しなければならない。少しのオーバークロックでもいけそうだ
PIOなしでこれは実現できただろうか?
PIOは実質的に「最強の周辺回路」なので、bit-bangingと呼ぶには少し微妙だ。
100Mbit/sをCPUだけで処理するにはおよそ500MHz級のMCUが必要で、その場合はバス特性やキャッシュ遅延といった問題が出てくる
「Raspberry Pi Pico Bit-Bangs 100 Mbit/S Ethernet」だなんて、Siemens単位よりOhmのほうがよさそうだ
画面にGNU Radioが表示されていて混乱した。RPiには電源、TX線が2本、そして3本目の線があるが、あれは何だ?