Other Parts Discussed in Thread: SYSCONFIG
器件型号: AM2434
主题: SysConfig 中讨论的其他器件
您好、
我们在 AM243x 上使用 TI 的 LLD 作为 I2C、以读取定制电路板上一组 IC 的数据。 其中一些 IC 由可由用户关闭的单独电源供电。 当然、在这种情况下、器件在 I2C 上不可用。 有时、这会导致驱动程序代码卡住。 我们使用的是 mcu_plus_sdk_am243x_11_01_00_19。
为了缩小范围、我可以使用修改后的 TI 示例和 AM243x LaunchPad 重现设计。
示例:I2C_TEMPERATURE_INTERRUPT_LLD_am243x-evm_r5fss0-0_nortos_ti-arm-clang
我随函附上了更改的文件 i2c_temperature_interrupt_lld.c 和逻辑分析仪的图片:

在没有温度传感器的 LaunchPad 上运行代码。 我获得以下输出:
[I2C]在中断模式下启动了 I2C 温度读取测试...!!
错误:I2C_TEMPERATURE_MAIN:105:未在器件地址 0x48 处找到[I2C]温度传感器
[I2C]样本 0:0.000000(°C)
[I2C]示例 1:0.000000(°C)
[I2C]示例 2:0.000000(°C)
[I2C]示例 3:0.000000(°C)
[I2C]示例 4:0.000000(°C)
[I2C]示例 5:0.000000(°C)
[I2C]示例 6:0.000000(°C)
[I2C]示例 7:0.000000(°C)
[I2C]示例 8:0.000000(°C)
[I2C]示例 9:0.000000(°C)
[I2C]示例 10:0.000000(°C)
从这里、代码被卡住。
我在代码中所做的更改将执行以下操作:
由于我上述原因、它会跳过器件地址检查。
它在传输第一个字节(器件地址)结束时、模拟具有更高优先级的 ISR 或具有禁用中断 8us 的代码区域。
该时间段如所附图片中的信号 J1_8_PIN 所示。
此后、不会调用传输完成回调、互斥量周围的循环也不会离开。
我的问题:
这是故意的行为吗?
如何避免或打破这种情况?
如何了解失败的交易?
提前感谢。