MPU-9250 を I2C 経由で Intel edison arduino ボード (ピン A4/A5) に接続しています。
私は読むことができ、ACCとジャイロを完全に読み取ることができます
MPU9250_ADDRESS = 0x68
今、I2Cマスターモジュールを無効にします
i2c.writeReg(USER_CTRL, 0b00000000) # I2C_MST_EN
# 1 – I2C マスター I/F モジュールを有効にします。ピン ES_DA および ES_SCL は、ピン SDA/SDI および SCL/SCLK から分離されています。
# 0 – I2C マスター I/F モジュールを無効にします。ピン ES_DA および ES_SCL は、ピン SDA/SDI および SCL/SCLK によって論理的に駆動されます。
今、私はI2Cバイパスマルチプレクサを有効にします
i2c.アドレス(MPU9250_ADDRESS)
i2c.writeReg(INT_PIN_CFG, 0b00000010) # BYPASS_EN をハイに設定 # アサートされると、i2c マスター インターフェイスが無効になると、i2c_master インターフェイス ピン (ES_CL および ES_DA) は「バイパス モード」になります。有効にされておらず、i2c マスター インターフェイスが無効になっている場合、ピンは内部プルアップにより High にフロートします。
データシートによると、チップ内のi2cマスターモジュールを無効にしてバイパスを有効にすると、I2C経由でコンパスに直接アクセスできるはずです。
なんらかの理由でいいえ、これはまだ発生していると思います「...内部プルアップのために高くフロートします...」、これを言うのは、オシロスコープで2つの信号を見て、信号のバイパスをアクティブにする前だからです1 と 0 のロジックはスポットオンで、アクティブ化した後、1 のロジックレベルは数 mV 上昇しました (まだ心配する必要はありません) が、0 のロジックは 0V に近い場所ではなく、実際にはロジック 1 の電圧に近い場所にあります。オシロスコープの画面では 0 と 1 の違いが視覚的にわかりますが、まともな電子デバイスが 0 として認識できるものではありません。
BYPASS_EN ビットが設定されると、I2C バス全体で問題が発生します。AUX_CL および AUX_DA ピンの信号を測定しました。それらは SCL および SDA ピンの信号と同一であるため、バイパスは完全に機能しますが、後にラインを引っ張るものがあります。バイパススイッチをハイに。無効にする方法がわかりません。
I2C バイパス モードで MPU-9250 を適切に構成する方法は、私が設定している 2 ビット以外に行う必要がある他の設定です。
USER_CTRL->I2C_MST_EN = 0
INT_PIN_CFG->BYPASS_EN = 1
他のすべてのレジスタは変更されません