微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > SBL升级模式回到正常模式

SBL升级模式回到正常模式

时间:10-02 整理:3721RD 点击:

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

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

HAL_SYSTEM_RESET();

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

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是没用的。

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

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

有,运行模式下,我写了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();

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top