我一直在通过 I2C 接口(interface)与设备通信的应用程序上执行时序测量。我发现单个 I2C 读写大约需要 450us 来执行。我已经验证 I2C 接口(interface)运行在 400KHz,因此我预计单个字节的 I2C 操作大约需要 170us。在 android 中使用 I2C 驱动程序是否会产生超过 250us 的开销?有谁知道提高这个速度的方法。
提前致谢。
马克。
最佳答案
我猜你预期的延迟来自时间/位或类似的东西。但是,当您从具有操作系统(Android 或 Linux 或其他)的系统向 I2C 发送数据时,您必须经过所有层才能到达实际的 I2C。最有可能的是,该驱动程序位于内核中。由于它是硬件资源,因此还存在某种形式的门控来防止多段代码同时使用 I2C。另外,有时对于某些设备,系统可能不会立即发送数据,但可能会延迟一点。但这可能不是你的情况。
此外,对于某些硬件设备,当您发送数据时,它不会经过常规的数据写入,而是通过其他方式发送,这些方式对于大数据 block 可能更有效,但对于小数据 block 则效率较低,从而导致您开始花费一些延迟。 I2C 上的音频流就是一个很好的例子。在系统中,通常是一个数据缓冲区和一个 DMA channel 设置,用于以适当的速率将数据传输到 I2C,以获得您想要的音频。它对于音频流的目的非常有效,但仅发送几个字节并不好。
所以,我对你的测量结果并不感到惊讶。
在我看来,如果你想改进它,你就必须经历编写自己的驱动程序的痛苦。然后,你就会变得依赖于平台。如果它是一个自定义系统,那很好,但如果它是一个必须在任何平板电脑上运行的消费者应用程序,那就不可行。
关于Android I2C 读/写速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126774/