Atmel SAM3X8E теряет VTOR после жесткого сброса - PullRequest
0 голосов
/ 12 декабря 2018

Я, кажется, повторяю этот вопрос из здесь и здесь .Когда я перезагружаю свою систему после прошивки прошивки на противоположный флэш-банк, 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. Этоправильная интерпретация?

1 Ответ

0 голосов
/ 20 декабря 2018

Хорошо, конечно, я знал, что поиск решения заставит меня чувствовать себя глупо.Но вот, пожалуйста ... Я в конечном итоге изменил скрипт компоновщика в папке Device_Startup, предоставленный Atmel, и скомпилировал его дважды;каждый с адресами FLASH0 и FLASH1 соответственно на месте, без каких-либо других изменений в прошивке.И ... двоичные файлы прошивки были идентичны!Но это не должно иметь место согласно Atmel.

Я был сбит с толку, потому что он говорит, что воспоминания зеркально отражены, что заставило меня поверить, что установка GPNVM только указывала на начало флэш-банка по тому же адресу и переназначил последнюю половину на основе GPNVM2.Вместо этого создается впечатление, что он фактически загружает таблицу векторов из второго слова двоичного файла прошивки (SP и затем ПК).

Так что нужно сказать, куда прыгать в непрерывный банк флэш-памяти.Я вошел в свойства решения ASF, чтобы найти настройки компоновщика ARM / GNU и нашел настоящий файл компоновщика в разделе тегов.Это не тот, который упоминается в моем проекте.Я изменил его в соответствии с рекомендациями, которые я упомянул выше, и он успешно переключился для запуска прошивки в противоположном банке.

Простое решение, казалось бы, неясной аппаратной проблемы.Спасибо за вашу помощь!

...