工具与软件:
我目前正在使用传感器控制器单元(SCU)通过 I2C 读取温度传感器。 不过、我遇到了一个我一直难以解决的问题。
当我使用命令手动触发 SCU 执行时"scifSwTriggerExecutionCodeNbl(1 << SCIF_TEMP_TASK_ID);"、传感器控制器单元的输出返回0。 但是、当我使用逻辑分析仪检查 I2C 信号时、我可以看到0正在读取的值(请参阅随附的图)。

这是它的特殊之处:当我再次执行代码时、SCU 会将上次执行期间读取的值输出至主 MCU。 本质上、我始终从先前的执行中获取读取(n-1读取)。
我的代码
scifSwTriggerExecutionCodeNbl(1 << SCIF_TEMP_TASK_ID); uint16_t readingFromSCU = scifTaskData.Temp.output.temperature;
Sensor Controller Studio 中的代码
i2cStart();
i2cTx((0x48 << 1) | I2C_OP_WRITE);
i2cTx(0x00);
if (state.i2cStatus == 0x0000) {
U16 MSB;
U16 LSB;
i2cRepeatedStart();
i2cTx((0x48 << 1) | I2C_OP_READ);
i2cRxAck(MSB);
i2cRxNack(LSB);
output.temperature = ((MSB << 8) | LSB);
}
i2cStop();
根据我到目前为止的理解、SCU 似乎正在启动非阻塞 I2C 操作。 在第一次执行时、该值不可用(因此0)、而在后续执行时、我收到在先前执行期间读取的值。
我正在尝试确定是否有方法在同一执行周期中检索当前值。 这种行为是否是 SCU 如何处理 I2C 操作的固有行为?如果是、是否有实现我的目标的权变措施?
如果有任何帮助、将不胜感激