PIOのI2Cについて例題を確認したいと思います。

PIOのI2Cの例題は、I2Cバスをスキャンして、接続されているデバイスを確認することができます。
I2Cのスキャンに対して該当するデバイスのアドレスが返ってきます。

今回は、以前から使用しているキャラクタLCDの「KKHMF DC 5V 1602 LCD ディスプレイモジュール 16×2キャラクタ LCDブルーブラックライト」と「EasyWordMall 1602 LCD ブラック IIC/I2C/TWI/SPI シリアル インタフェース ボード モジュール」(ともにamazonです)を使用します。

キャラクターLCDは今回5Vのものを使用するので「I2Cバス用双方向電圧レベル変換モジュルAE-FXMA2102(秋月電子)」で3.3Vから5Vにレベル変換しています。

ターゲット用PicoにはOpenOCD用Picoを接続し、I2Cデバイスとして前述のキャラクターLCDを接続します。

pico-examplesのbuild/pio/i2cの移動してmakeします。

$ cd ${PICO_SDK_PATH}/../pico-examples
$ cd build/pio/i2c
$ make

OpenOCD(SWD経由)で書き込みデバックするので、OpenOCD用picoをターゲット用picoに接続し、RaspberryPiにUSBで接続しておきます。
端末を1つ開き、OpenOCDを起動します。

$ cd ${PICO_SDK_PATH}/../openocd
$ src/openocd -f interface/picoprobe.cfg -f target/rp2040.cfg -s tcl

「Info : Listening on port 3333 for gdb connections」が最後に表示されたら端末を最小化しておきます。

シリアル通信用のminicomを新規の端末で開きます。
minicomがインストールされていない場合は「$ sudo apt-get install minicom」でインストールします。

$ minicom -b 115200 -o -D /dev/ttyACM0

minicomの端末は開いたままにします。

gdbのための端末を開きます。端末は開いたままにします。

$ cd ${PICO_SDK_PATH}/../pico-examples
$ cd build/pio/i2c
$ gdb-multiarch pio_i2c_bus_scan.elf

gdbで最初にOpenOCDに接続します。

(gdb) target remote localhost:3333

実行ファイルを読み込みます。

(gdb) load

picoをリセットし、実行します。

(gdb) monitor reset init
(gdb) c

minicomの端末に下記のような表示が出ればOKです


PIO I2C Bus Scan
   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
00 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
10 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
20 .  .  .  .  .  .  .  @  .  .  .  .  .  .  .  .
30 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
40 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
50 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
60 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
70 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
Done.

I2CバスのキャラクターLCDのスキャン結果は「0x27」となりました。

次回は実際にキャラクタLCDに表示をさせたいと思います。

おすすめの記事