2

I2C インターフェイスを介してデバイスと通信するアプリケーションでタイミング測定を実行しています。単一の I2C 読み取りと書き込みの実行に約 450us かかっていることを発見しました。I2C インターフェイスが 400KHz で動作していることを確認したので、1 バイトの I2C 操作には約 170us かかると予想されます。Android 内で I2C ドライバーを使用すると、250us を超えるオーバーヘッドが発生する可能性がありますか? この速度を改善する方法を知っている人はいますか。

前もって感謝します。

マーク。

4

1 に答える 1

2

あなたの予想される遅延は、時間/ビットまたはそのようなものから来ていると思います。しかし、OS (Android や Linux など) を搭載したシステムから I2C にデータを送信する場合、実際の I2C に到達するにはすべてのレイヤーを通過する必要があります。そしておそらく、このドライバーはカーネルにあります。これはハードウェアリソースであるため、いくつかのコードが同時に I2C を使用するのを防ぐための何らかの形式のゲーティングもあります。また、一部のデバイスでは、システムがデータをすぐに送信しない場合がありますが、少し延期される可能性があります。しかし、それはあなたの場合ではないかもしれません。

また、一部のハードウェア デバイスでは、データを送信するときに、通常のデータ書き込みは行われず、別の方法で送信されます。これは、大きなチャンクの場合は効率的ですが、小さなチャンクの場合は効率が悪く、最初から遅延が発生する可能性があります。I2C のオーディオ ストリームはその良い例です。システムでは、多くの場合、必要なオーディオを取得するために適切なレートでデータを I2C に転送するためのデータ バッファーと DMA チャネルのセットアップです。オーディオ ストリーミングの目的では非常に効率的ですが、ほんの数バイトを送信するのは適切ではありません。

だから、私はあなたの測定に驚かない.

私の考えでは、それを改善したい場合は、独自のドライバーを作成するという苦痛を経験する必要があります。次に、プラットフォームに依存します。カスタム システムの場合は問題ありませんが、任意のタブレットで実行する必要がある消費者向けアプリケーションの場合は実行できません。

于 2012-11-01T17:35:13.720 に答える