Android I2C 读/写速度

标签 android i2c

我一直在通过 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/

相关文章:

linux - 如何在设备树中将 PEcflags设置为 SM 总线?

c# - 在 Window 10 IoT Core 的多线程应用程序中访问 I2C 设备的正确方法是什么?

microcontroller - i2c 协议(protocol) NACK 歧义

arduino - I2C onReceive-handler 只调用一次

Android监听器序列化

android - 安卓游戏服务器

c++ - arduino 低 i2c 读取速度;

android - AndroidManifest 引用的类未验证

java - 接收图像并使用 TCP 套接字显示它? (安卓)

android - 使用 Eclipse 和 Mat 寻找内存泄漏,卡住转换 hprof 文件