Other Parts Discussed in Thread: UCD90160, UCD90160A
器件型号: UCD90160A
Thread 中讨论的其他器件: UCD90160、
我们对 UCD 进行了编程、以使用系统 WD 复位功能。 (如果微控制器未选通 UCD、UCD 将在微处理器上生成系统复位)
我们使用 UCD90160 已有 10 多年的历史。
UCD90160 和 UCD90160A 存在一个问题、即在我们清除故障日志后、它无法正确报告“新“系统 WD 超时。
请在我们的控制器上考虑以下描述 UCD 问题的顺序。
原始问题:
1.打开插卡
2.微停止在 UCD 上抢 WD。
3.(UCD 重新启动微型计算机)
4、Micro 读取故障日志(读取寄存器 0xEA)并在第 0 页中找到显示发生系统 WD 超时的“热“位(位 1)
5.使用[0 0 0]清除故障日志写入寄存器 0xEA
6.微停止 strobing WD 对 UCD。
7.(UCD 重新启动微型计算机)
8. Micro 读取故障日志(读取寄存器 0xEA)、但故障日志第 0 页错误报告 0x00(即系统 WD 事件不会显示在故障日志中)。
UCD90160 上支持多个 SYS WD 超时
解决上述问题的工作是在多年前交给我们客户组织的某个人的。
解决方法是使用 parm_info/parm_value CMD 对 UCD RAM 空间进行存储器 peek/poke。
此步骤在读取/清除故障日志后完成:
解决方法:
1.在“RAM 空间“中读取 0x0908 处的值
2.如果值@ 0908 的位 1 =1、则清除位 1 并将该值写回 UCD“RAM 空间“
以下是一些执行上述操作的 C 代码片段:
uint8_t WATCHDOG_STATUS_PARAM_reg[5]={0x00、0x08、0x09、0x01、0x01};
UCD_writeReg_v (UCD_I2C_ADDR、parm_info、watchdog_status_param_reg、sizeof (watchdog_status_param_reg));
UCD_readReg (UCD_I2C_ADDR、parm_value、2、dataVec);//必须是长度为 2 的块读取。
WATCHDOG_STAT=dataVec[1]; //寄存器值在 dataVec[1]中返回。
IF (WATCHDOG_STAT&0x02)
{
WATCHDOG_STAT = WATCHDOG_STAT&(0xFD);
writeVecData[0]=watchdog_stat;
UCD_writeReg_v (UCD_I2C_ADDR、parm_value、writeVecData、1);
}
如何在 UCD90160A 上解决?
显然、此存储器 peek/poke 操作在很大程度上取决于 UCD 固件存储器映射。
我们需要检查/调整的值不再是 0x0908。
我们需要知道此新芯片和固件版本上的新内存位置/地址:
以下是 UCD90160A 的器件 ID 结果:
UCD90160A|2.4.3.0809|160916
换句话说、UCD90160A 上的等效存储器位置是什么、我们需要对其进行 peek/poke 和 poke 才能在这个新器件上实现权变措施。
谢谢
Shawn
附件是一个日志文件、显示两次连续的 wd 系统重新引导、其中第二次 wd 重新引导上的故障日志报告 0x00 而不是预期的 0x02
UCDU_A_resetreason_log_cleaned.txt