我目前正在ArchLinuxARM中使用I2C,不太清楚如何计算写入和读取之间所需的绝对最小延迟。如果我没有这样的延迟,阅读自然就无法完成。我刚刚在这两个命令之间应用了usleep(1000),这是有效的,但它只是根据经验完成的,必须优化到实际值(不知何故)。但是怎么做呢?.
下面是我使用的write_and_read函数的代码示例:

int write_and_read(int handler, char *buffer, const int bytesToWrite, const int bytesToRead) {
    write(handler, buffer, bytesToWrite);
    usleep(1000);
    int r = read(handler, buffer, bytesToRead);
    if(r != bytesToRead) {
        return -1;
    }
    return 0;
}

最佳答案

通常不需要等待。如果你的写作和阅读功能是以某种方式在后台运行的(你为什么要这样做???) 然后必须同步它们。
I2C是一种非常简单的线性通信,所有使用我的me的设备都能够在microsecs中产生输出数据。
您使用的是100kHz、400kHz还是1MHz I2C?
编辑:
经过一些讨论,我建议您尝试:

void dataRequest() {
    Wire.write(0x76);
    x = 0;
}

void dataReceive(int numBytes)
{
    x = numBytes;
    for (int i = 0; i < numBytes; i++) {
        Wire.read();
    }
}

其中x是在头中定义的全局变量,然后在setup()中指定0。您可以尝试在主循环中添加一个简单的if条件,例如,如果x>0,然后以serial.print()格式发送一些调试消息,然后将x重置为0。
这样你就不会用串行通信阻塞I2C操作。

关于c - 计算Linux中I2C读写之间的延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28098147/

10-15 16:54