Я, кажется, повторяю этот вопрос из здесь и здесь .Когда я перезагружаю свою систему после прошивки прошивки на противоположный флэш-банк, VTOR равен 0 (что означает, что он не загружается с флэш-памяти), и я не могу запустить новую прошивку.
Я использую контроллер EFC для программирования прошивкидвоичный файл во второй флэш-банк.Например, активная прошивка находится на Flash0, расположенном по адресу 0x0008_0000.В руководстве по внедрению сказано, что Flash1 находится по адресу 0x000C_0000.Я вижу, что полная прошивка для прошивки содержится без ошибок, в 0x000C_0000.После загрузки и проверки микропрограммы я переключаю банк загрузки GPNVM:
efc_perform_command(EFC0, EFC_FCMD_SGPB, 1); //set GPNVM bit 1
efc_perform_command(EFC0, EFC_FCMD_SGPB, 2); //set GPNVM bit 2
/* Now check to make sure the bit has flipped) */
efc_perform_command(EFC0, EFC_FCMD_GGPB, 0);
status = efc_get_result(EFC0);
printf("GPNVM is now %d\n", status);
/* Now set the VTOR to the flash1 start address) */
__DSB();
__ISB();
SCB->VTOR = ((uint32_t)FLASH1_ADDRESS & SCB_VTOR_TBLOFF_Msk);
/* Checking the VTOR value here shows a result of 0x000C_0000 */
__DSB();
__ISB();
/* Now reset the device by pulling NRSTB pin low */
reset_pull_NRSTB_low();
while(1);
После выполнения этого кода я снова проверяю регистр VTOR по адресу 0xE000_ED08, и теперь значение равно 0x0000_0000.Микропрограмма не загружается, так как микросхема ищет адрес 0x0000_0000 для запуска микропрограммы.
Может быть, я неправильно установил биты GPNVM и ищет векторы ПЗУ?Если это так, какие надлежащие биты GPNVM нужно установить?В соответствии с таблицей на стр. 33 документа начального загрузчика биты GPNVM должны быть «0b110», так что GPNVM [1] равен 1, а GPNVM [2] равен 1 - это означает, что микропрограмма будет запускаться из Flash Bank 1. Этоправильная интерпретация?