同じI2Cバス上の2つのスレーブ、両方ともアドレスチェックに応答し、一方は正しく機能しますが、もう一方は機能しません
わかりました、できるだけ短くするようにします。
私はGY-86ブレークアウトボードを持っています。回路図を以下に追加します。ご覧のとおり、MPU6050とBMP180は同じI2Cバスに接続されています。

Arduinoもあります。したがって、マスターはArduinoであり、スレーブはMPU6050とBMP180です。
Arduinoで既製のI2Cスキャンスケッチを使用しました。出力は次のとおりです。
13:50:00.731 -> Scanning...
13:50:00.731 -> I2C device found at address 0x68 !
13:50:00.764 -> I2C device found at address 0x77 !
13:50:00.797 -> done
0x68はMPU6050であり、0x77はBMP180であるため、これは問題ありません。したがって、両方のスレーブがアドレスチェックに応答します。ただし、MPU6050は完全に機能していますが、つまりデータを取得できますが、BMP180は応答しません。私はインターネットからいくつかの既成の「BMP180データArduinoコードを取得する」を使用しましたが、どれも機能しませんでした。
私はSTM32MCUも持っていますが、Arduinoのマスターとして使用すると、同じことが起こります。同じI2C読み取り/書き込み機能を使用しているにもかかわらず、MPU6050の読み取り/書き込みはまったく問題ありませんが、BMP180への書き込みまたはBMP180からの読み取りができません。デバッグしたところ、BMP180の書き込み/読み取り中にMCUがスタックすると、AF(確認失敗)フラグが設定されることがわかりました。
また、両方のセンサーのデータシートを数回調べましたが、I2Cの読み取り/書き込みパターンは同じであるようです。
要するに、どういうわけか、BMP180はI2CスキャナーによってI2Cライン上で検出されますが、データの読み取り/書き込みは実行できません。その理由は何でしょうか?どういうわけかBMP180を損傷したと推測できますが、そのアドレスに応答します。だから、何が起こっているのか理解できませんでした。任意のアイデアをいただければ幸いです。
回答
BMP180がアドレスチェックに応答しているという事実は、それが正しく機能していることを示していません。チップを使用する前に、ピンに許容される最大電圧を確認しましたか?ハードウェアの問題のようです。他のBMP180を使おうとしましたか?
私は自分のプロジェクトでこの正確な回路図を使用しました。i2cデバイスの1つが3V3に応答し、もう1つが5Vに応答する可能性があります。私はN_MOS5Vから3V3への信号変換器を使用することになったことがありません(それだけの価値はありません)。すべてのデバイスは3V3バスで問題なく動作します。回路を単純化し、3V3のみを使用することを強くお勧めします。
また、SDA / SCLバス上にマイクロコントローラー用の適切な抵抗があることを確認してください(図2のSCL_R / SDA_Rを参照)。
私の回路図を見てください:私はSCLとSDAの両方のN_MOSを排除することにしました。


そしてここに電源があり

ところで、ここだドローンが実際に動作することをデモで。