2

我一直在对通过 I2C 接口与设备通信的应用程序执行时序测量。我发现单个 I2C 读取和写入需要大约 450us 才能执行。我已验证 I2C 接口以 400KHz 运行,因此我预计单个字节上的 I2C 操作大约需要 170us。在 android 中使用 I2C 驱动程序是否会产生超过 250us 的开销?有谁知道提高这个速度的方法。

提前致谢。

马克。

4

1 回答 1

2

我猜你预期的延迟来自时间/位或类似的东西。但是,当您从具有操作系统(Android 或 Linux 或其他)的系统向 I2C 发送数据时,您必须经过所有层才能到达实际的 I2C。最有可能的是,这个驱动程序在内核中。由于它是一种硬件资源,因此还有某种形式的门控来防止几段代码同时使用 I2C。此外,有时对于某些设备,系统可能不会立即发送数据,但可能会推迟一点。不过,这可能不是你的情况。

此外,对于某些硬件设备,当您发送数据时,它不会通过常规的数据写入,而是通过其他方式发送,这对于大块可能更有效,但对于小块则更少,这会花费您开始时的一些延迟。I2C 上的音频流就是一个很好的例子。在系统中,它通常是一个数据缓冲区和一个 DMA 通道设置,以适当的速率将数据传输到 I2C 以获得您想要的音频。它对于音频流的目的非常有效,但只发送几个字节并不是很好。

所以,我对你的测量并不感到惊讶。

在我看来,如果你想改进它,你将不得不经历编写自己的驱动程序的痛苦。然后,您变得依赖于平台。如果它是一个定制系统,那很好,但如果它是一个必须在任何平板电脑上运行的消费者应用程序,那就不可行了。

于 2012-11-01T17:35:13.720 回答