KR260にはラズパイと同じく40ピンのピンヘッダーがあります。
ピンアサインを確認して、Vivadoで合成してPYNQからI2C通信をしてみました。
プログラム、オシロスコープ交えたテスト動画含めて紹介します。
KR260のRpiのピンアサイン確認して、I2C通信をしてみた
KR260にはラズパイと同じく40ピンのピンヘッダーがあります。
ピンアサインを確認して、Vivadoで合成してPYNQからI2C通信をしてみました。
プログラム、オシロスコープ交えたテスト動画含めて紹介します。
VivadoでIICのIPを追加する
KR260の環境でI2Cを合成していきます。
VivadoでIICのIPを追加しています。
I2CのIPはデフォルトで設定しています。
.xdcファイルは下記のようにラズパイのピン配置に合わせた形で設定しています。
1 2 3 4 5 |
set_property PACKAGE_PIN AE14 [get_ports iic_rtl_scl_io] set_property PACKAGE_PIN AE15 [get_ports iic_rtl_sda_io] set_property IOSTANDARD LVCMOS33 [get_ports iic_rtl_scl_io] set_property IOSTANDARD LVCMOS33 [get_ports iic_rtl_sda_io] |
PYNQからのプログラムは下記のような形で用意しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# I2C test in Programmable Logic (PL) from pynq import Overlay from pynq.lib import AxiIIC ol = Overlay("/root/jupyter_notebooks/pynq-i2c/dpu.bit") iic = AxiIIC(ol.ip_dict['axi_iic_0']) device_address = 0x50 # I2C device address mem_address = [0x01, 0x01] # Memory address to write to data_to_write = [0x5A] # Data to write # Combine memory address and data to create the data to be sent write_data = mem_address + data_to_write iic.send(device_address, write_data, length=len(write_data), option=0) num_bytes = 1 # Number of bytes to read (only 1 byte, 0x5A) read_data=[] iic.send(device_address, mem_address, length=len(mem_address), option=1) iic.receive(device_address, read_data, num_bytes) |
ラズパイとオシロスコープでI2C通信テスト
最初に比較用としてラズパイで練習しました。
(スレーブアドレスの確認含めてです)
i2cdetectする際のI2C通信の波形を確認します。テスト動画は下記となります。
I2CのEEPROMのクロックとデータにオシロスコープを接続済です。
使用したEEPROMは下記です。
ラズパイでi2cdetectのコマンドを入力します。
ラズパイの画面を確認しても、「0x03」から「0x77」までのアドレスを検索しています。
今回のEEPROMだと「50」と「58」がスレーブアドレスとなっています。
波形を取得できました。詳細を確認していきます。
i2cdetectをすることで、ラズパイは総当たりでアドレスにチェックしにいっています
今回ラズパイとEEPROMをI2Cで接続しています。スレーブアドレスは50と58です。
その付近の波形を確認しています。
50周辺の波形を確認しています。
50のアドレスをReadする波形にはACKが確認できます。
ACKがあった後は、ALL1のデータを確認できます。
同様な波形を下記記事でもI2C測定して、紹介しています。
よろしければ一緒にご確認ください。
KR260とオシロスコープでI2C通信テスト
KR260でもI2C波形を取得します。
Pythonのプログラムは下記に保存しています。
https://github.com/iotengineer22/kr260-ubuntu-test/blob/main/pynq-i2c/i2c-test.ipynb
テスト動画が下記となります。
ラズパイと同じようにオシロスコープ含めて、I2CとEEPROMを接続済です。
最初にスレーブアドレス0x50、メモリアドレス0101にデータ「5A」を書き込みます。
その後、スレーブアドレス0x50、メモリアドレス0101をReadします。
書き込んだデータ「5A」を読めることを確認しました。
まとめ
KR260にはラズパイと同じく40ピンのピンヘッダーがあります。
ピンアサインを確認して、Vivadoで合成してPYNQからI2C通信をしてみました。
ぜひ皆様も同様にテストしてみてください。
コメント