1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ラズパイPicoを通信の導通確認用のスレーブにする(UART/I2C/SPI/PWM)

Last updated at Posted at 2026-01-11

PicoSlave

機能概要

本ファームウェアは、Raspberry Pi Picoを通信の導通確認用のスレーブ(UART/I2C/SPI/PWM)として動作させます。

  • UART (シリアル通信)
    • 受信したデータをそのまま送り返す「エコーバック」機能を提供します。
  • I2C スレーブ
    • マスタから書き込みを行うと、受信したデータが内部バッファ(256バイト)に順次保存されます。その後、マスタから読み出しを行うと、以前にマスタが書き込んだデータが返されます。(例:マスタが 0x10, 0x20 を書き込んだ後に読み出しを行うと、0x10, 0x20 ... の順でデータが返されます)
  • SPI スレーブ
    • マスタからデータが送信されると、それと同時にマスタから送られるクロックに合わせてスレーブ側からもデータ(本ファームウェアではテスト用の固定値)が送り返されます。具体的には、0xFF, 0xFE, 0xFD ... 0x00 の順で値が出力されます。
  • PWM (パルス幅変調) 測定
    • 入力ピンに入力されたPWM信号のデューティ比(High期間の割合)を測定し、ログをUSBシリアル(仮想COMポート)経由でPCに出力します。

ソースコードとバイナリ

今回作成したプログラムの全ソースコードと、そのまま書き込めるバイナリ(uf2ファイル)は、以下のGitHubリポジトリで公開しています。
shiomachisoft/PicoSlave

ソースコードは、Pico SDKとC言語で作成しています。

配線 (Pinout)

デフォルトのピン配置は board_config.h で定義されています。

インターフェース ピン (GP) 信号線
UART GP0 TX
GP1 RX
I2C GP6 SDA
GP7 SCL
SPI GP16 RX
GP17 CSn
GP18 SCK
GP19 TX
PWM GP21 Input

通信設定

各機能のデフォルト設定値は以下の通りです。

これらの設定値やピン配置を変更したい場合は、board_config.h を編集してください。

UART

  • ボーレート: 9600 bps
  • データ形式: 8データビット, 1ストップビット, パリティなし

I2C スレーブ

  • スレーブアドレス: 0x17
  • 通信速度: 100 kHz
  • バッファサイズ: 256バイト

SPI スレーブ

  • ビットオーダー: MSB First (固定)
  • データビット長: 8 bit
  • バッファサイズ: 256バイト
  • クロック極性/位相: CPOL=1, CPHA=1
  • 重要: CPHA=1のままにして下さい。(CPHA=0に変更しないで下さい。)
  • 理由: 一般的なSPIであれば、CSをLowに下げたまま連続してクロック(SCLK)を送り、データを何バイトも送り続けることができますが、RP2040(Pico)のSPIスレーブには以下の特殊な仕様が存在します。
    • 「1フレームごと」のCSトグル要求(CPHA=0):
      RP2040に搭載されているSPIコントローラの仕様上、SPIモード0および2(CPHA=0のモード)で動作している際、マスター側が1データ(1バイトまたは1ワード)送るごとにCSを一度Highに戻さないと、次のデータが正常に受け取れない(または同期が崩れる)という挙動があります。
      image.png
      • 一般的な期待値: CSをLowにしたまま、SCLKを8発×10回送れば10バイト受信できる。
      • Pico(スレーブ)の現実: CSをLowにしたままクロックを送り続けると、1データ目の終了タイミングを正しく認識できず、2データ目以降のサンプリングがズレたり、FIFOへの格納が正常に行われないケースがあります。

PWM

  • 機能: 入力信号のデューティ比測定

使い方

  1. まず、使用する機能に応じて必要な配線を行います。ピン配置については「配線 (Pinout)」の章を参照してください。

    SPI通信の配線(特にクロック線:SCK)は、できるだけ短く接続してください。

  2. PicoSlave.uf2 ファイルを、BOOTSELボタンを押しながらPCにUSB接続したPico (RPI-RP2ドライブ) にコピーします。
    ⇒ コピー完了後、Picoは自動的に再起動し、本ファームウェアが動作を開始します。

  3. TeraTermなどのシリアルモニタソフトでPicoのCOMポートを開くと、PWM測定結果のログが約5秒間隔で表示されます。(TeraTermのボーレート設定はとりあえず115200bpsに設定して下さい。)

  4. 各インターフェース (UART, I2C, SPI) のマスタ機器からPicoSlaveにデータを送信して動作を確認してください。PicoSlaveが返すデータの内容については「機能概要」を参照してください。

メモ

CMakeLists.txtの下記の記述でプログラム全体をRAMに展開し高速に実行します。

pico_set_binary_type(PicoSlave copy_to_ram)

免責事項

本ソフトウェアの使用により生じた、いかなる損害やトラブルについても、作者は一切の責任を負いません。ご利用は自己責任でお願いいたします。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?