为什么这个来自FTDI的I2C示例代码中有一个字地址?

为什么这个来自FTDI的I2C示例代码中有一个字地址?,c,i2c,polling,ftdi,eeprom,C,I2c,Polling,Ftdi,Eeprom,我一直致力于FTDI FT2232H芯片与I2C设备的接口。我已经开始学习应用说明pdf。我没有EEPROM来做实验,也没有示波器来观察波形。我的目标是理解代码本身,并为我未来的项目做笔记。以下是我不完全理解的代码片段: FT_STATUS write_byte(uint8 slaveAddress, uint8 registerAddress, uint8 data) { uint32 bytesToTransfer = 0; uint32 bytesTransfered;

我一直致力于FTDI FT2232H芯片与I2C设备的接口。我已经开始学习应用说明pdf。我没有EEPROM来做实验,也没有示波器来观察波形。我的目标是理解代码本身,并为我未来的项目做笔记。以下是我不完全理解的代码片段:

FT_STATUS write_byte(uint8 slaveAddress, uint8 registerAddress, uint8 data)
{
    uint32 bytesToTransfer = 0;
    uint32 bytesTransfered;
    bool writeComplete=0;
    uint32 retry=0;
    bytesToTransfer=0;
    bytesTransfered=0;
    buffer[bytesToTransfer++]=registerAddress; /* Byte addressed inside EEPROM */
    buffer[bytesToTransfer++]=data;
    status = I2C_DeviceWrite(ftHandle, slaveAddress, bytesToTransfer, buffer, &bytesTransfered, I2C_TRANSFER_OPTIONS_START_BIT|I2C_TRANSFER_OPTIONS_STOP_BIT);

    /* poll to check completition */
    while((writeComplete==0)&& (retry<I2C_WRITE_COMPLETION_RETRY))
    {
        bytesToTransfer=0;
        bytesTransfered=0;
        buffer[bytesToTransfer++]=registerAddress; /* Addressed inside EEPROM  */
        status = I2C_DeviceWrite(ftHandle, slaveAddress, bytesToTransfer,buffer, &bytesTransfered, I2C_TRANSFER_OPTIONS_START_BIT|I2C_TRANSFER_OPTIONS_BREAK_ON_NACK);

        if((FT_OK == status) && (bytesToTransfer == bytesTransfered))
        {
            writeComplete=1;
            printf("  ... Write done\n");
        }
        retry++;
    }
    return status;
}
在与确认轮询相关的24LC024H数据表中,他们说轮询部分由开始+控制字节(或从机地址)+R/W位组成,不包括EEPROM内的地址(I2C协议中的字地址)。那么为什么FTDI的人会包含这行代码呢?我错过什么了吗


致以最诚挚的问候……

它不会伤害任何东西,也不需要。也许API至少需要一个字节的数据,没有它就无法工作(我遇到过类似I2C的实现),但根据规范,它是不需要的,而且不会影响传输,即使这样,因为没有提供在地址写入的数据。你是对的,它不会影响任何东西。“也许API至少需要一个字节的数据”->我想是的,但为什么他们不使用0xFF之类的伪寄存器地址呢?代码来自FTDI,ı已经就这个问题向他们发送了邮件。顺便说一句,“我遇到过这样的I2C实现”->你能找到一个实现吗?I2C实现的私有实现。此外,如果只发送地址而不发送数据,地址也无关紧要。它不会损害任何东西,也不需要。也许API至少需要一个字节的数据,没有它就无法工作(我遇到过类似I2C的实现),但根据规范,它是不需要的,而且不会影响传输,即使这样,因为没有提供在地址写入的数据。你是对的,它不会影响任何东西。“也许API至少需要一个字节的数据”->我想是的,但为什么他们不使用0xFF之类的伪寄存器地址呢?代码来自FTDI,ı已经就这个问题向他们发送了邮件。顺便说一句,“我遇到过这样的I2C实现”->你能找到一个实现吗?I2C实现的私有实现。此外,如果只发送没有数据的地址,则地址并不重要
buffer[bytesToTransfer++]=registerAddress; /* Addressed inside EEPROM  */