検証】RP2350 (Pico 2互換) でSDカードSPI接続における書き込み速度測定

RP2350チップを搭載したRaspberry Pi Pico 2互換の開発ボードを入手し、そのハードウェアSPI性能を評価するため、SDカードへの書き込み速度検証を行いました。
標準的なSPI接続(4線)において設定を最適化した結果、2.30 MB/s という速度を達成しました。本記事では、アロケーションサイズやバッファサイズが速度に与える影響を含めた詳細な検証データを共有します。

接続

目次

検証環境

  • マイコン: RP2350 (Generic / Raspberry Pi Pico 2)
  • ライブラリ: SdFat (Arduino)
  • 接続方式: Hardware SPI (SPI0)
    • MISO: GP0 (RX)
    • CS: GP1 (CSn)
    • SCK: GP2 (SCK)
    • MOSI: GP3 (TX)
  • ※実装形態: 余ったSDカードアダプタに配線をはんだ付けし、RP2350のGPIOへ直結(パスコンや外部プルアップ抵抗は未実装)。

検証結果 ①:アロケーションユニットサイズによる速度差

まずはSPIクロックを 24 MHz に固定し、SDカードのフォーマット形式(アロケーションユニットサイズ)の違いによって、書き込み速度がどう変化するかを測定しました。
バッファサイズ(1回の書き込みデータ量)を512バイトから64KBまで変化させています。

【測定結果:書き込み速度 (MB/s)】

(SPI Clock: 24 MHz 固定)

RP2350_write_speed_vs_allocation_unit_size_24MHz

バッファサイズ 16KB Format 32KB Format 64KB Format
512 B 0.606 0.605 0.606
1 KB 0.935 0.932 0.936
4 KB 1.466 1.450 1.461
8 KB 1.606 1.592 1.619
16 KB 1.680 1.668 1.666
32 KB 1.684 1.708 1.738
64 KB 1.680 1.693 1.727

考察:

  • フォーマットの影響: 全体的に 64KBフォーマット が最も高いパフォーマンスを示しました。16KBフォーマットと比較して、ピーク速度で約3.2%の向上が見られます。
  • バッファサイズの影響: バッファサイズを大きくするにつれて速度は向上しますが、32KB 付近で飽和(サチュレーション)することが分かりました。

検証結果 ②:SPIクロック周波数と物理的限界

次に、最も成績の良かった「64KBフォーマット」に固定し、SPIクロック周波数を上げて限界速度を探りました。

【測定結果:書き込み速度 (MB/s)】

(Format: 64KB 固定)

RP2350_write_speed_vs_SPI_clock_freq_64kb

バッファサイズ 24 MHz 30 MHz 32 MHz 36 MHz
512 B 0.606 0.668 0.668 0.668
1 KB 0.936 1.073 1.074 1.074
4 KB 1.461 1.836 1.856 1.821
8 KB 1.619 2.024 2.025 2.069
16 KB 1.666 2.196 2.195 2.146
32 KB 1.738 2.211 2.211 2.265
64 KB 1.727 2.301 2.301 2.274

40 MHz以上は初期化エラーとなり動作しませんでした。

考察:

  • 最速設定: 30 MHz 設定時に、バッファサイズ64KBで 2.301 MB/s という最高速度を記録しました。
  • 限界点: 30 MHzと32 MHzで速度が完全に一致しています。これはRP2350側の限界ではなく、SDカード内部のフラッシュメモリ書き込み速度がボトルネックになっていることを示しています(Bus Efficiencyは約61%)。
  • 安定性: 36 MHzでは速度低下が見られ、信号品質の劣化が示唆されます。安定性を考慮すると30 MHzが最適です。

考察:40 MHz以上の高速動作を狙うために

今回の検証では、40 MHz以上の設定で初期化エラーが発生しました。しかし、これはRP2350やSDカードのコントローラ自体の限界というよりも、「配線による電気的な信号品質の低下」 が要因である可能性が高いと考えられます。

もしさらなる高速化(40 MHz 〜 50 MHz)や、より高い信頼性を目指す場合は、以下のハードウェア対策が有効であると推測されます。

  1. バイパスコンデンサ(パスコン)の追加
    • SDカードは書き込み(フラッシュメモリへのプログラム)瞬間に大きなピーク電流を消費します。SDカードのVDD-GND端子間(可能な限り近く)に 0.1µF 〜 10µF の積層セラミックコンデンサ を配置することで、瞬時的な電圧降下を防ぎ、高クロック時の挙動を安定させられる可能性があります。
  2. 外部プルアップ抵抗の追加
    • RP2350の内蔵プルアップ抵抗は弱いため、数十MHzの高速信号では波形が「なまる(立ち上がりが遅れる)」原因になります。信号線(特にCS, MISO, MOSI)に 10kΩ 程度の外部プルアップ抵抗 を追加することで、信号の波形を整形し、通信エラーを低減できると期待されます。

今回は「最小限の配線」での検証でしたが、これらの対策を施すことで、さらなる限界突破(2.5 MB/s超など)が可能になるかもしれません。

結論:RP2350 SPI接続の最適解

今回の検証データから導き出された、RP2350におけるSDカードSPI通信のベストプラクティスは以下の通りです。

  1. 配線: RP2350のハードウェアSPIピン(GP0-3 等)を使用する。
  2. フォーマット: アロケーションユニットサイズを 64 KB に設定する。
  3. SPIクロック: 30 MHz に設定する。
  4. バッファ: 書き込みバッファとして 32 KB または 64 KB を確保する。

以上の構成により、手軽なSPI接続においてもオーディオ録音や高速ロギングに十分耐えうる 2.3 MB/s の書き込み性能を発揮できます。