器件型号: TDA4VH-Q1
Thread 中讨论的其他器件: TDA4VH
尊敬的专家:
以下是我们的硬件和软件设置:
硬件:
J784S EVM <--> DS90UB9702 Fusion2 电路板<--> DS90UB971(我们的定制电路板)<-->具有 MCU 的 OX08B40 传感器(8MP @ 30fps、UYVY 格式)
软件:
RTOS SDK 11.00.00.06
我们的摄像头板包含一个 MCU。 我们能够使用 I2C_TRANSACTION () 与此 MCU 正确通信。 我们还验证了传感器流式传输是否正常工作。 MCU 仅用于配置传感器。
然而,当我们试图 将固件刷写到 MCU 中 、我们不断遇到 I2C 故障、这会导致固件刷写失败。
从返回错误状态 I2C_TRANSACTION () 包括等值 –1、–2、 –4、–5。 (每次,故障值可能不同) 。 根据 i2c.h、它们对应于以下错误:
#define I2C_STS_ERR_TIMEOUT (-(int16_t)(1))
#define I2C_STS_ERR_BUS_BUSY (-(int16_t)(2))
#define I2C_STS_ERR_NO_ACK (-(int16_t)(3))
#define I2C_STS_ERR_ARbitration_LOST (-(int16_t)(4))
#define I2C_STS_ERR_ACCESS_ERROR (-(int16_t)(5))
因此、我们观察到以下 I2C 错误:
-
I2C 总线忙错误
-
仲裁丢失错误
-
超时错误
- I2C 总线访问错误
请注意 在给定的时间、我们仅与 MCU 通信 、并且没有发生其他 I2C 设备事务。
在固件刷写期间、我们会以块的形式将固件数据写入 MCU 32 字节+ 2 字节校验和(共 34 个字节) PER 事务。
示例代码片段:
状态= OX08B40_WriteReg (i2cInstId、i2cAddrSensor、0、g_bload_buf、32 + 2 0);
if (status != true)
{
printf(“%s (%d):OX08B40_WriteReg/OX08B40_ReadReg 在 32 字节中失败、状态=%d\n“、
FUNC、LINE、status);
返回–1;
}
对于一些迭代、传输成功、但 事务随机失败 以及状态值 –1、–3 或–4 。
通过测试:
-
固件刷写过程 15 次(尝试之间下电上电) 。
-
系统 1 或 2 次尝试成功 。
-
故障率约为 95% 。
为了进一步研究、我们在中尝试了相同的固件刷写过程 这些工作 和 Linux 中的 IT 每次失败率为 0%时都会成功 。
因此、我们希望了解:
-
是什么原因导致的这些 I2C 故障 RTOS 环境 ?
-
为什么相同的固件刷写过程可以在可靠地运行 但在 RTOS 中不适用 ?
-
是否已知 I2C 驱动程序限制、时序要求或配置更改 RTOS SDK 11.00.00.06 中需要此用例?
- 如何克服这个问题?
请指导我们如何解决此问题。
感谢您帮助调试和解决此问题。
正在等待您的回答。
谢谢&谨致问候
jeyaprakash CK





