), который описывает поведение при загрузке SAM3X на стр. 33. При запуске бит GPNVM (2) выбирает, какой флэш-банк отражается в загрузочной памяти. На SAM3X нет никакого реального перераспределения (но на других контроллерах, как описано на стр. 34). Я сейчас написал небольшой загрузчик, который мигает с bank1 до bank0, если требуется.

тоящее время я работаю с платой Arduino Due, в которую встроен процессор Atmel SAM3X8E. Я программирую его с помощью Atmel Studio (версия 7.0.1645) и предоставленной Atmel Software Framework (версия 3.28.1). Цель программы, работающей на SAM, - получить функциональность перепрограммирования. Поэтому программа получает изображение с хост-компьютера, мигает его блок за блоком в неиспользованном банке флэш-памяти и проверяет изображение. Все это работает нормально, но я сталкиваюсь с той же проблемой, что и этот пост (Коммутатор Atmel SAM3X с двумя банками не работает).

Atmel SAM3X8E имеет два флэш-банка по 256 КБ, Flash0 и Flash1. Мое приложение легко помещается во Flash0 и программирует полученное изображение на Flash1. Моя идея заключается в использовании функций SAM3X для загрузки из другого флэш-банка (по умолчанию Flash0). На странице 35 таблицы данных SAM3X указано, что биты GPNVM можно использовать не только для выбора загрузочной памяти (ROM или Flash), но и для выбора банка для загрузки (Flash0 или Flash1). Если GPNVM2 установлен, микроконтроллер будет загружаться с Flash1. Это достигается путем переназначения макета памяти. Поэтому, если GPNVM2 установлен, Flash1 отображается по адресу 0x0008_0000 (в то время как Flash1 и Flash0 непрерывны). Если GPNVM2 очищен, Flash0 отображается по адресу 0x0008_0000 (теперь Flash0 и Flash1 непрерывны).

То, что я сделал, это манипулировал битом GPNVM2 перед перезагрузкой процессора, но он не работал (память не была перераспределена должным образом). Я также играл с вариантами Atmel Studio. Atmel Studio может запрограммировать приложение для Bank0 или Bank1, используя «Параметры проекта» -> «Инструмент» -> «Настройки программы». Я пытался запрограммировать свое приложение с этими настройками на Bank1. Это возможно только в том случае, если установлен флажок «Переопределить регистр смещения таблицы векторов (таблица исключений)» и если устройство запрограммировано с помощью «Начать отладку». Если устройство запрограммировано с помощью «Пуск без отладки», оно вообще не загружается, чтобы загрузить его (помните, что приложение было перепрошено на Bank1, если переназначение прошло успешно, Bank1 должен быть расположен по адресу 0x0008_0000, где изначально Bank0 сопоставлен с ) Мне пришлось вручную изменить биты GPNVM (используя «Инструменты» -> «Программирование устройства»), чтобы «загрузить из банка0». Тогда это сработало.

Описанное поведение научило меня, что я, должно быть, упустил возможность манипулировать некоторыми регистрами. Очевидно, что «Регистр смещения таблицы векторов переопределения (exception_table)» важен, поэтому я также установил «Регистр таблицы смещения векторов (VTOR)» в качестве начального адреса Flash1, который тоже не помог. У меня такое ощущение, что я пропускаю некоторые функции или регистрирую, что мне нужно вызывать / манипулировать.

Чтобы перепрограммировать процессор, обычно необходимо запустить какой-то загрузчик, которого я надеялся избежать, используя механизм переключения банков. У кого-нибудь есть опыт переключения банков с использованием функций ASF или вообще о переключении банков на SAM3X?

Заранее спасибо!

Ответы на вопрос(0)

Ваш ответ на вопрос