5

私が取り組んでいるプロジェクトでは、I2C を介して多機能チップと通信する必要があります。これは、I2C /dev/i2c-1 インターフェイスを介して Linux ユーザー空間から実行できます。

ただし、ドライバーは同時に同じチップに話しかけているようです。これにより、I2C_SLAVE アクセスが EBUSY の errno 値で失敗します。そうですね - ioctl I2C_SLAVE_FORCE を介してこれをオーバーライドできます。試してみましたが、うまくいきます。私のコマンドはチップに届きます。

質問: これを行っても安全ですか? 私が書いたアドレス範囲が、どのカーネルドライバーからも決してアクセスされないことは確かです。ただし、そのように I2C 通信を強制すると、内部の状態マシンなどを混乱させる可能性があるかどうかはわかりません。

参考までに、ハードウェアの事実:

OS: リナックス
 アーキテクチャ: TI OMAP3 3530
 I2C-Chip: TWL4030 (電源、オーディオ、USB、その他多くのことを行います..)
4

2 に答える 2

6

私はその特定のチップを知りませんが、多くの場合、一連の書き込みを必要とするコマンドがあります。最初に特定のモードを設定するために1つのアドレスに書き込み、次に別のアドレスを読み取りまたは書き込みます-2番目のアドレスの機能はに基づいて変化しますあなたが最初のものに書いたもの。そのため、ドライバーがこれらの操作のいずれかの途中にあり、それを中断した場合 (またはその逆) は、デバッグが困難な競合状態になります。信頼性の高いソリューションを得るには、チップのドライバーを介してより適切に通信します...

于 2009-12-31T15:48:58.120 に答える