読者です 読者をやめる 読者になる 読者になる

yuqlidの日記

どっかの学生の雑記帳

VL53L0Xについて,複数接続のための調査

はじめに

以前の記事で紹介しました.STmicroelectronics制の距離センサ,VL53L0X
yuqlid.hatenablog.com

についてです.
このセンサはI2C通信という規格で接続します.
SCL,SDAという名前の2本の信号線に対してバス接続をすることで複数のデバイスを接続することが可能です.
I2C - Wikipedia

GitHubにもVl53L0Xと通信するサンプルプログラムが増えてきました.

github.com

しかしながら,どれもVL53L0Xを1つしか接続しているものしかありません.(※探した当時,見つけたら教えてください)
ですので,どうにかしてVL53L0XをI2Cに複数接続できないかと思い,軽く調査したことをまとめます.

結果

先に結論から言うと,VL53L0Xを複数接続して通信することは可能でした
(複数接続してる評価ボードが売ってるんだからそれはそう)
実際にstm32とI2Cで2つ接続して動作テストをしたのが以下になります.

アプリケーションノートに欲しい情報が書いてありました.
http://www.st.com/content/ccc/resource/technical/document/application_note/group0/0e/0a/96/1b/82/19/4f/c2/DM00280486/files/DM00280486.pdf/jcr:content/translations/en.DM00280486.pdf
によると,XSHUTピンと割り込み(GPIO1)ピンを駆使することで複数接続が可能なようです.
以下にVL53L0Xの標準的な接続図をアプリケーションノートより示します.

f:id:Yuqlid:20161012002113p:plain

アプリケーションノートのこの図には非常に驚きました.
f:id:Yuqlid:20161012002112p:plain

ん?? つまり
「I2Cだけで複数のVL53L0Xを接続したかったらI2C-GPIOエキスパンダを一緒に繋いでそこからGPIOを制御しろ」
ってこと?
納得ですが結構な筋肉技でのゴリ押し感も漂いますね...

自分が2つ接続して動作確認を取った時は,XSHUTを直接GPIOに接続して制御していました.
(この時はGPIO1ピンは使用してない)
アプリケーションノートを読んでいると直接GPIOで制御しても良さそうですが,デバイス1つにつき,GPIOのピンを2つ必要とすると書いてあるので,確かに接続する数が増えるとI2C-GPIOエキスパンダを使用したほうが最終的にはスッキリ配線をまとめることができそうです.

また,VL53L0XのAPIのファイル「vl53L0x_platform.h」内部にて「VL53L0x_SINGLE_DEVICE_DRIVER」というマクロを0にすれば自動的に複数接続用のコンテキストが適用されると書いてありますが,
「VL53L0x_SINGLE_DEVICE_DRIVER」の値を参照してプログラムを変更している箇所はこのAPIの中には見当たりませんでした...
まぁこのAPIおよびアプリケーションノートがリリースされたばかりなので,しっかりしたドキュメントがまだ揃いきっていないのかもしれません.
(ところどころコメント内部がVL6180xと書いてある箇所があった)

まとめ

VL53L0xの複数接続について調べ,アプリケーションノートの存在及び現状を確認した.
何か情報がありましたがぜひ教えていただきたいです!