ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
30 декабря
1484450 Топик полностью
LightElf (17.12.2024 17:48, просмотров: 50) ответил LightElf на Столкнулся со странной ситуацией, честно говоря идей нету. Ничего подобного никогда не видел. Приволокли кучку сдохших плат на CH579M, платы изрядно поработали и сдохли во время обновления фирмвари (не шьются). При глубоком исследовании нескольких образцов обнаружил, что у всех одна проблема: у страницы флеша по адресу 0x8400 не пишется первая половина. То есть сектор (512байт) 0x8400...0x85FF стирается, но область 0x8400..0x84FF после этого не пишется, остается в FF.
Обнаружил, что с некоторого момента WCH внесли изменения в код инициализации CH579, в частности - шаманят с недокументированными регистрами флеша (R8_CFG_FLASH и R32_MISC_CTRL). Может оно как-то связано. 
void SystemInit(void) 
{
uint8_t flash_cfg;
flash_cfg = R8_CFG_FLASH & RB_CFG_FLASH_X;
if(flash_cfg >= 8 && flash_cfg <= 13)
{
flash_cfg = 2 + (flash_cfg - 8);
if(flash_cfg >= 6)
{
flash_cfg = 6;
}
flash_cfg = (R8_CFG_FLASH & (~ RB_CFG_FLASH_X)) | flash_cfg;
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
R8_CFG_FLASH = flash_cfg;
R8_SAFE_ACCESS_SIG = 0;
}
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
R16_CLK_SYS_CFG = (2<<6)|0x08;// 32M -> Fsys
*((PUINT16V)0x40001048) |= 4;
R8_SAFE_ACCESS_SIG = 0;
mDelayuS(10);
/* 开启电压监控 */
PowerMonitor( ENABLE );
}



https://github.com/SoCXin/CH579/blob/master/src/EVT/EXAM/SRC/StdPeriphDriver/CH57x_clk.c

Не надо делать мне как лучше, оставьте мне как хорошо