

初質問失礼いたします。

現在秋月の[VL53L0X](https://akizukidenshi.com/catalog/g/gM-12590)をRaspberryPi
1台に対して2つ使用接続して使用したいと考えております。このToF距離センサーはI2Cアドレス"29"を持ち、ハードでの変更はできません。  
ここで、2台をそれぞれ1台ずつ接続して、値の読み出しとXSHUT端子での電源オンオフの動作は確認できました。

しかし、2台並列に接続すると、XSHUTのオンオフに関わらず以下のようなありえないアドレスが認識されます。また、認識されるアドレスは試行するたびに変わります。

[code]

    pi@raspberrypi4:~ $ i2cdetect -y 1
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          03 04 -- 06 -- -- 09 -- 0b 0c -- 0e 0f 
    10: 10 11 -- 13 14 15 -- 17 18 -- -- -- 1c 1d -- -- 
    20: 20 -- -- 23 24 25 -- -- -- 29 2a 2b 2c -- -- 2f 
    30: -- -- 32 33 -- 35 -- -- 38 39 3a -- -- 3d -- -- 
    40: -- -- -- 43 44 45 -- -- -- -- -- -- -- -- -- 4f 
    50: -- -- -- -- -- 55 -- 57 58 -- 5a 5b -- 5d 5e -- 
    60: -- -- -- -- -- -- -- 67 68 -- -- 6b -- 6d 6e -- 
    70: 70 -- 72 73 74 75 76 77  
    
    pi@raspberrypi4:~ $ sudo i2cdetect -y 1
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          03 04 -- 06 07 08 09 -- 0b -- -- -- -- 
    10: 10 11 12 13 14 15 16 17 -- 19 1a 1b -- -- -- 1f 
    20: -- -- 22 -- 24 -- -- -- 28 29 2a 2b -- -- 2e -- 
    30: 30 -- 32 33 -- -- -- -- 38 39 -- 3b 3c 3d 3e -- 
    40: -- 41 42 43 -- 45 -- -- -- -- -- 4b 4c 4d 4e -- 
    50: -- 51 52 53 -- 55 -- 57 58 59 5a -- 5c -- -- -- 
    60: -- -- -- 63 64 65 66 67 -- 69 -- 6b -- 6d -- 6f 
    70: 70 -- 72 73 -- -- -- --  
    
[/code]

この状況の解決方法をご教授ください。

環境：  
Raspberry Pi 4(4GB) OKdo版（RSコンポーネンツにて購入）

[code]

    No LSB modules are available.
    Distributor ID: Raspbian
    Description:    Raspbian GNU/Linux 10 (buster)
    Release:    10
    Codename:   buster
    pi@raspberrypi4:~ $ uname -a
    Linux raspberrypi4 5.4.72-v7l+ #1 SMP Mon Oct 26 10:56:14 JST 2020 armv7l GNU/Linux
    
[/code]


CC BY-SA 4.0
2020-11-02T12:15:55.287
71676
2021-03-03T11:15:02.643
2020-11-02T13:15:09.450
42574
42574
question
raspberry-pi i2c
I2Cデバイスをラズパイに複数接続時に正しいアドレスが認識されない


１）片方のセンサー（"センサーA"と呼びます）の電源を切っておいて、もう一方のセンサー("センサーB"と呼びます)のI２Cアドレスを変更する。  
２）センサーAに電源を入れて、センサーAのI2Cアドレスを変更する  
という操作をラズパイの電源を切らないで行うには、センサーAの電源をラズパイでOn/Offできるように細工する必要があります。

例えば、[ＮＪＭ２８６５](https://akizukidenshi.com/catalog/c/creg33v)、のような制御端子を持つ電源レギュレータIC
を使って、GPIOの信号(GPIO-XX)でAE-VL53LOX（センサーＡ）の電源のON/OFFができるようにする（下図(I2Cの信号は省略してます)）

[![画像の説明をここに入力](https://i.stack.imgur.com/4EFD4.png)](https://i.stack.imgur.com/4EFD4.png)

そうすれば、ラズパイで

  1. GPIO-XX(OUTPUT, プルアップ)をLowにする。(センサーAの電源が切れる）
  2. センサーＢのI2Cアドレスを29以外に変更する。(XSHUTに接続されているGPIO-YYを利用)
  3. GPIO-YYをHighにする(センサーAに電源が入る）

これで２つのセンサーに異なるI2Cアドレスが設定されるので、ラズパイから自由に両方のセンサーを制御できるようになる。

電源レギュレータは、制御端子があって、出力電圧が3.3Vの低損失型(5Vの入力で3.3Vの出力ができる）ものなら何でも良いです。  
たまたま部品箱に入っていたので、例にしましたが表面実装のICは扱いにくいのでリードが出ているものをお勧めします。


CC BY-SA 4.0
2020-11-20T07:20:18.763
72093
2020-11-20T07:20:18.763
217
71676
answer


I2Cなら、SCLを有効とするデバイスのみに供給するようにゲートしてやればいいです


CC BY-SA 4.0
2021-03-03T11:15:02.643
74392
2021-03-03T11:15:02.643
27481
71676
answer