LinuxボードでI2Cスレーブアドレスを変更する方法はありますか?

LinuxボードでI2Cスレーブアドレスを変更する方法はありますか?

目的:i2cスレーブデバイスソフトウェア側のアドレスを設定します。

例:3つのセンサーが同じアドレス0x29を持ちます。特定の方法では、センサー1は0x22を設定し、センサー2は0x25を設定し、サーバー3は0x28を設定します。

情報:同じi2cアドレスを持つ3つの類似したデバイスがあります。 i2cスレーブデバイスは、BeagleBone Black Debianオペレーティングシステムを使用するVL53L0X(TOF)センサーです。通信はおよびsys/ioctl.hを介して行われますlinux/i2c-dev.h

サンプルコード:

#include <sys/ioctl.h>
#include <linux/i2c-dev.h>

ioctl(open("/dev/i2c-2", O_RDWR), I2C_SLAVE, 0x29);

ありがとうございます! !

ベストアンサー1

これVL53L0X データシートページ 18-19 は、デバイスの対応するレジスタへの簡単な書き込み操作でデバイスの I2C アドレスを変更できることを示しています。例のI2Cアドレス0x29はデータシートの0x52に等しくなりますが、データシートアドレス値は最下位ビット位置にI2C読み取り/書き込みビットを含めるために1ビット左にシフトされます。

ただし、複数のVL52L0Xデバイスは最初に同じアドレスを持つため、各VL53L0Xチップのリセット信号を独立して制御する方法が必要です。必要な手順はで説明されています。VL53L0X用AN4846アプリケーションノート。つまり、各VL53L0Xチップには、直接または一部のGPIO拡張チップを介して接続された2つのGPIOピンが必要です。ハードウェア設計を確認して、ハードウェアがどこにルーティングされているかを調べる必要があります。

レジスタ番号は次のとおりです。VL50L0X用CプログラミングAPIパッケージ(無料ですが有効なメールアドレスで登録する必要があります)。 APIパッケージでファイルを見つけますVL53L0X_REG_I2C_SLAVE_DEVICE_ADDRESSVL53L0X_1.0.4/Api/core/inc/vl53l0x_device.hen.STSW-IMG005_v1.0.4.zip

おすすめ記事