您好
我们使用 CC2652R7控制器、在这里我们 将传感器连接到 MCU、并在 MCU 和传感器之间使用 I2C 通信。
I2C 驱动器: #包括
//I2C 初始化
I2C_Params i2cParams;
I2C_Params_init (&i2cParams);
i2cParams.bitrate = I2C_400kHz;
handle_i2c = I2C_open (CONFIG_I2C_MS、&i2cParams);
如果(gcam_i2c == NULL)
{
返回 DEVICE_I2C_INIT_FAILED;
}
否则
{
返回 DEVICE_I2C_INIT_SUCCESS;
}
//数据读取
I2C_Transaction i2cTransaction;
i2cTransaction.writeBuf =(void*)_address[0];
i2cTransaction.writeCount = 4;
i2cTransaction.readBuf =(void*)&readBuffer[0];
i2cTransaction.ReadCount = 4;
i2cTransaction。targetAddress = 0x28;
I2C_transferTimeout (handle_i2c、&i2cTransaction、0xFFFF)
我们正在使用上述产品 "I2C_transferTimeout" API 从传感器读取数据。
在这里、我们 将传输大约 根据400kHz I2C 速度、每个事务90位每位应该需要2.25微秒。 因此、整个此事务预计将在238.5微秒内完成。
但总共需要接近485微秒。 我们将在该事务中写入4个字节并读取4个字节。 在 I2C 事务期间、我们在该捕获的信号中捕获了信号、我们在每个 字节事务之间观察到了一些延迟、此外、我们还观察到、在延迟时间内时钟信号为低电平。 请澄清一下、因为该时钟信号变低、每次事务之间都会出现此延迟。
这是否是单个事务中多字节读写的预期行为? 如果是,为什么?
这是什么原因呢?
捕获的信号:
紫色-时钟(SCL)
蓝色-数据线(SDA)
红色标记线-事务之间的延迟、还请观察时钟线处于低电平