Silicon Labs:CP2112でSMBus(I2C)のリード/ライトを行うと、スレーブアドレスが1ビットずれてしまってSMBusデバイスと通信できません。対処方法を教えてください
CP21xx
SMBus(I2C)のスレーブアドレスは7ビット長で、リード/ライトを識別するためのビット(1ビット)を付けて8bitとして通信を行っています。リード/ライトビットがbit0に配置されますので、スレーブアドレスはbit7~bit1に配置されます。
のリード/ライトを行うと、スレーブアドレスが1ビットずれてSMBusデバイスと通信できません。対処方法を教えてください1__1.png)
例えば、スレーブアドレス 111 0000 と通信したい場合には、CP2112では1ビット分シフトして、スレーブアドレス1110 000x として取り扱ってください。CP2112の制御には、AN496で紹介されているAPIをご使用になる場合が多いですが、このAPIではslave addressは0x02~0xFEの範囲で指定することになっています。slave addressを0x00~0x7Fの範囲で設定すると、期待値から1ビットずれたアドレスが出力されることになります。