Raspberry Pi Pico × Linux UART DMA 高信頼通信 設計サンプル集(実測・解説付き)
- Digital500 JPY
本商品は、Raspberry Pi Pico (RP2040) における UART DMA 受信設計について、 「なぜこの設計で壊れにくいのか」を 実測コードと設計思想の両面から解説した資料です。 ■この商品でできること(概要) ・Raspberry Pi Pico(RP2040)で UART DMA を使った高信頼通信 の実装例が分かる ・Linux ↔ Pico 間の 双方向テストコード がそのまま使える ・CRC32 + シーケンス番号 による欠落・破損検出の実例 ・数十万フレーム・数時間連続転送の 実測ログ付き ・「なぜこの設計で壊れにくいのか」を 文章で理解できる ■ ディレクトリ構成(概要) common/ └ protocol.h UART通信で使用する共通プロトコル定義 pico/ ├ lib/ │ └ UartDma.* │ UART DMA を用いた送受信ライブラリ └ apps/ ├ pico_rx_seqcrc32/ └ pico_tx_seqcrc32/ Pico 側の送受信・検証用サンプル linux/ ├ rx_seqcrc32.cpp ├ tx_seqcrc32.cpp Linux 側での送受信・CRC/SEQ検証プログラム logs/ 数十万フレーム・数時間の実測ログ 設計思想・説明 explanation.pdf 構造・使い方 README ■動作実績(超重要) ・Baudrate: 921600 bps ・Payload: 4096 bytes ・Frames: 480,000 ・実行時間: 約6時間 ・CRC_NG: 0 ・SEQ_NG: 0 ※ 実測ログ同梱 ■設計の特徴 ・RX は DMA write position 追跡方式 ・RX 側で DMA IRQ に依存しない設計 ・DMA IRQ は 通知としてのみ使用 ・ISR とメイン処理を明確に分離 ・リングバッファは N-1 設計+不変条件 ・mutex / heavy ISR に依存しない ■注意事項・保証範囲 ・任意ボーレート・任意負荷での動作保証は行っていません ・単一 UART / 単一 DMA チャネル前提 ・商用製品への直接組み込み保証なし ・学習・設計例用途向け ■ライセンス MIT License 個人・商用利用可(詳細は LICENSE 参照 ■作者コメント 「UART DMA は怖い」と言われがちですが、 設計と検証をきちんと行えば、 ここまで安定して動く、という実例を残すために作りました。
動作環境
## 動作確認環境 ### Linux側(送受信テスト) - OS: Linux Mint 22.x(Ubuntu 24.04 LTS 系) - Kernel: 6.x 系で動作確認 - コンパイラ: g++(C++17) - ビルドツール: - cmake - make ### Pico側 - 対象ボード: Raspberry Pi Pico(RP2040) - Pico SDK: 1.5.x 系で動作確認 - ツールチェーン: - arm-none-eabi-gcc - cmake - make