TI中文支持网
TI专业的中文技术问题搜集分享网站

SBL升级模式回到正常模式

我进入到SBL下载模式,想回到正常模式,就在直接

crc[1] = crc[0];
crc[0] = 0xFFFF;
HalFlashWrite(HAL_SBL_IMG_CRC, (uint8 *)crc, 1);

HAL_SYSTEM_RESET();

然后,复位进来还是在下载模式,为什么呢?

Yue TANG:

1. 如果你已经有可用的img,直接复位就好了,不需要去写。

crc[1] = crc[0];

crc[0] = 0xFFFF;

HalFlashWrite(HAL_SBL_IMG_CRC, (uint8 *)crc, 1);

2. flash 要写是需要擦除再写的,擦过的你可以把1改0,但不能把0改1.要改1,需要先按页先擦除。所以你写0xffff是没用的。

Jiaming Li:

回复 Yue TANG:

现在的问题是:板子原来是正常运行模式的,从串口收到指令后,复位到SBL模式,但是某些情况下,我不要升级了,要回到正常模式,这时是完全没有写过flash的,但是重新复位后,还是在SBL模式,不能回到正常模式,我已经写了CRC的了。

Yue TANG:

回复 Jiaming Li:

你复位到SBL时,做了什么操作?有没有写crc?

Jiaming Li:

回复 Yue TANG:

有,运行模式下,我写了CRC,复位能够进入到SBL模式:

HAL_DISABLE_INTERRUPTS();

crc[0] ^= 0xFFFF; crc[1] = 0xFFFF;  HalFlashWrite(HAL_SBL_IMG_CRC, (uint8 *)crc, 1);

HAL_SYSTEM_RESET();

但是我在SBL模式下,要回到运行模式(我完全没有写过flash的),也写了CRC,复位还是SBL模式:

HalFlashRead(HAL_SBL_IMG_CRC / SBL_PAGE_SIZE, (HAL_SBL_IMG_CRC % SBL_PAGE_SIZE) << 2, (uint8 *)crc, sizeof(crc));

if (crc[1] != crc[0]) { crc[1] = crc[0]; crc[0] = 0xFFFF;

HalFlashWrite(HAL_SBL_IMG_CRC, (uint8 *)crc, 1); HalFlashRead(HAL_SBL_IMG_CRC / SBL_PAGE_SIZE,(HAL_SBL_IMG_CRC % SBL_PAGE_SIZE) << 2, (uint8 *)crc, sizeof(crc)); }

HAL_SYSTEM_RESET();

赞(0)
未经允许不得转载:TI中文支持网 » SBL升级模式回到正常模式
分享到: 更多 (0)