世界を動かす技術を、日本語で。

Raspberry Pi Picoによる100 Mbit/sイーサネットのビットバンギング

概要

  • Raspberry Pi Pico で100Mbps Fast Ethernet送信を ソフトウェアとPIO のみで実現した事例
  • Steve Markgraf による「Pico-100BASE-TX」プロジェクトの内容と技術的詳細
  • RP2040/RP2350 のプログラマブルI/O活用例と、その応用可能性
  • 実際の アプリケーション例 や注意点の紹介
  • 今後の マイコンによる高速通信 の可能性への示唆

Raspberry Pi Picoで100Mbpsイーサネット送信を実現

  • 2021年に @kingyoPiyo が発表した Pico-10BASE-T では、わずかな抵抗のみで10Mbpsイーサネット通信を実装
  • 2023年には bit-banged USB の成功例も登場し、RP2040/RP2350のPIO活用が注目
  • Steve Markgraf (GitHub: @steve-m)が Pico-100BASE-TX を発表し、100Mbps Fast Ethernet送信を 完全ソフトウェア+PIO で実装
  • PIOとDMA を駆使し、 MLT-3エンコーディング・4B5Bライン符号化・スクランブル 処理を125MHzシンボルレートで実行
  • 結果として、UDP経由で 約11MB/s のリアルタイムデータストリーム(オーディオ/ADC)が可能

技術的ポイントと注意事項

  • 送信専用 のプロトタイプであり、 PoE対応機器への直接接続は厳禁
  • パルストランスイーサネットスイッチ による絶縁推奨
  • ソース・詳細: Steve MarkgrafのGitHubリポジトリ

リポジトリのアプリケーション例

  • カウンター 出力
  • 内部ADCストリーミング
  • PCM1802 コンバータ(75kHzサンプリング)を用いたオーディオデモ
  • RP2040 および RP2350(Pico 2) の両方に対応
  • 標準の Pico SDK でビルド可能

今後の展望と可能性

  • 本プロジェクトは、 低コスト・高スループットなデータ収集やストリーミング 用途への新たな道を示唆
  • PHYチップ不要 で11MB/sを超える通信が可能なため、 小型・安価な計測器やリモートセンサ、実験用ネットワークIF への応用が期待
  • ソフトウェア定義ハードウェア の限界に挑戦する動きとして、今後の発展が注目
  • さらなる高速化や多機能化が進めば、 2ドルのマイコンでどこまでできるか という問いが現実味を帯びる

関連情報・フォロー方法

  • Raspberry Pi タグで新着情報のメール通知登録が可能
  • 記事への 評価コメント も受付中

Hackerたちの意見

TOE(TCPオフロードエンジン)は、レイヤー1(MAC)、レイヤー2(イーサネット)、レイヤー3(IP)の機能を実装する専用の周辺カードで、メインCPUの負担を軽減するためのコプロセッシング要素だよ。

現代のNICも同じようなことをたくさんやってるんじゃないの?

それとも数セントで済むかも!でも、それは台湾での戦争が始まるまでか、偽物しか見つからなくなるまでの話かもね。

時々、頭が混乱することがある。ほとんどの人がPICチップでできるようなことをやってるのは知ってるけど、数ドルでWiFi対応のマイコンが手に入るって考えると、すごいことだよね。ピコのIOコプロセッシングはめちゃくちゃ強力だから、これをもっと発展させてほしいな。

PIOなしでこれが可能だったのかな?

あの転送速度では無理だね。SPIは、マイクロコントローラで見られる次に速い(一般的な)プロトコルだけど、だいたい10MHzで動作するから、これは単純な比較にはならないよ。

Picoで?いや、PIOはマイクロコントローラがこの種のビットレートを達成するために使える他の周辺機器を置き換えるから、3〜4 CPUクロックサイクルごとにGPIOピンの状態を変えるためのツールは本当に持ってないよ。ある意味、PIOは「ビットバンギング」を主張するにはちょっと「ズルい」かも。だって、PIOは必要なものにプログラム可能な究極の周辺機器だからね。ここで起こっているようなことをPIOで実現するのは簡単じゃないけど、「ビットバンギング」は通常、特定の周辺機器がないことを補うためにCPUを使うことを指すから、その観点から見ると、100MBit/sのイーサネットをビットバンギングできるマイクロコントローラはほとんどないと思う。専門家じゃないけど、125MHzのIOクロックが必要だと思うから、データを読み込んでピンに出力するのに4 CPUサイクルが必要なら、500MHzのマイクロコントローラを探すことになるよ。その速度だと、バスの特性やスタール、キャッシング、その他の面倒なことを心配しなきゃいけないし、もう昔の8ビットCPUが並列ポートで遅いシリアルプロトコルをビットバンギングしているわけじゃないからね。

これはクラシックなコンピュータのライフサイクルの話だね(ベル、マッジ、マクナマラが70年代に書いたやつ)。* 最初はCPUでやる * 次はバスから外れた専用カードでやる * それでもFPGAや何かが遅すぎるから、そのカードに独自のCPUを持たせる * そうするとまた問題に戻って、特定のCPUの領域にロジックを実装して、他のバスに最適化する... 10年後に戻ってきたら、Raspberry Piのコアを使ったチップレットがあって、再プログラム可能な縮小版がオフロードカードに実装されて、一般的なCPUモデルでテラビットのネットワークドライバーがプログラムできるようになってるんじゃないかな。

そうそう、これは輪廻の車輪だけど、これを書いたのはサザーランドじゃなかった?それにマイヤーも?01968年に? https://www2.cs.arizona.edu/~cscheid/reading/myer-sutherland...

いくつかの単語は理解できたよ。

これに関連して本当にクールなのは、PIOを使ってPDMマイクから直接読み取ることだね。https://github.com/ArmDeveloperEcosystem/microphone-library-.... でも、これがPIOを使っているなら「ビットバンギング」とは呼べないと思う。

それでもビットバンギングとしてカウントされると思うよ。PIOはただ、ビットバンギングをもっと速く、限られた方法でやらせてくれるだけだから。

Hacker Newsで議論の続きを見る