2016-01-04 2 views
0

Я хочу разработать плату с STM32F107 (или других STM32F микроконтроллерами) с возможностью IAP от SD карт, USB и последовательной флэш- (как AT45DB161)Как реализовать IAP (в прикладном программировании) для микроконтроллера ARM STM23F107?

  • В в следующем параграфе я попытаюсь описать свое решение. Пожалуйста, исправьте меня, если я ошибаюсь.

Как я знаю (STM32F107 datasheet, раздел 2.3.8), STM32F107 может загружаться с системной памяти, SRAM или вспышек пользователя на основе настроек BOOT сосны (boot0 и boot1 [PB7 ]).

Согласно «режима загрузки STM32 системы микроконтроллера памяти» документа (STM32 Application note AN2606 стр 55, рис. 15), ПЗУ Загрузчик из STM32 проверяет USB, USART и CAN шины для проверки наличия сигнала, и продолжается ... (режим загрузки системной памяти активируется, когда «BOOT1_BOOT0 = 01»).

Поэтому, когда я хочу запрограммировать свой STM32 с помощью USB-порта (а не USB-накопителя), я должен установить бот-контакты на «BOOT1_BOOT0 = 01» и подключить USB-программист к плате и ... (и эта операция своего рода ISP -in системы programming- метода is'nt это?)

Однако, чтобы иметь возможность программировать свой STM32 с палкой USB или карту SD, я думаю, что STM32 должен сначала загрузиться с пользовательский flash (пользовательская программа загрузчика), отметьте флажок (скажем, байт во флэш-памяти), чтобы проверить, следует ли проверять файловую систему диска (USB-накопитель или SD-карту) или серийную вспышку для новой версии прошивки.

  • Если ДА, он будет снова проверить, если новая прошивка будет обновить сам пользовательский загрузчик или приложение: (1) если цель пользовательский загрузчик, он должен первым скопируйте загрузчик в SRAM, а затем запустите его; или (2) если приложение является целью, оно должно начать процесс обновления.

  • Если NO, он должен перейти к приложению.

Я был бы признателен за любые замечания и предложения.

+0

Не было и речи: P Ваша идея звучит разумно. может также использовать несколько областей вспышки, которые обновляются отдельно, поэтому вы предотвращаете проблемы, когда во время обновления отключается питание, а ваш рабочий код находится только в SRAM. – domen

+0

Уважаемый SzybkiSasza, вы совершенно правы. У меня нет прямого вопроса. новичок в загрузчике. Я просто потратил несколько часов на изучение предмета т. И мне было интересно, правильно ли я это понял. Спасибо за ваш комментарий. Это действительно помогает. – Fardo

+0

в прикладном программировании означает, что приложение, работающее на микроконтроллере, может запрограммировать флеш-память на этом чипе ... Так что вы можете написать приложение или загрузчик, которые могут запрограммировать встроенную флеш-память с любого другого ресурса, который вам нужен. Просто напишите эту программу. –

ответ

0

Да, вы должны написать свой собственный загрузчик, вы можете использовать любого из GPIO штифтов (не загрузочные штифтов) как ремень шпильки к вашему загрузчику (в том, как загрузочные штырьках ремешки к ст загрузчику), чтобы сообщить загрузчику, как загружать или где искать вещи. Затем, основываясь на этом решении, ваш загрузчик либо загружает приложение откуда-то в пользовательскую флешку, либо обращается к некоторому подключенному медиа или переходит в режим ожидания на хосте для загрузки через некоторый интерфейс.

Независимо от того, нужно ли вам копировать данные в sram, а затем записывать до вспышки или нет, зависит от дизайна интерфейса вспышки, может быть буфер с размером страницы, который вы просто записываете. Вполне вероятно, что ваша реализация захочет использовать sram в качестве хранилища и пересылки в любом случае, скажем, извлечение данных с внешнего устройства с использованием sram для хранения данных в единицах размера с этого устройства. затем пишут на флэш, используя единицы размера, необходимые для периферийного устройства вспышки.

Бутылки для загрузки определяют, используется ли флеш-память пользователя или используется флэш-память загрузчика ST. ST-загрузчик прослушивает один или несколько интерфейсов (usb, uart, spi, i2c, независимо от того, что они поддерживают), как подчиненный какой-либо ведущий, чем может запрограммировать пользовательскую вспышку. Пока ваш дизайн платы таков, что требуемые загрузочные контакты и интерфейс остаются доступными, эта опция всегда присутствует, но перемещение запрограммированных данных выполняется внешним мастером, фактическое программирование вспышки из этих данных выполняется загрузчиком. Вы также можете реализовать один из них самостоятельно, в своей схеме загрузчика.

Вы можете использовать свои собственные загрузчики, шпионы gpio или убедиться, что у вас могут быть данные во флеше, которые управляют процессом загрузки, это похоже на то, как работает компьютер или работает uboot, где говорят, что на вашем компьютере работает linux у вас есть grub с конфигурацией в энергонезависимой памяти (например, на жестком диске), которая управляет загрузкой по умолчанию, после того как вы загрузили эту энергонезависимую память. u-boot есть где-то флеш-память, в которой есть переменные системной среды, некоторые из которых являются параметрами загрузки, после загрузки или если вы остановились в u-boot, находящемся на консоли, вы можете изменить эти параметры загрузки для следующей загрузки. gpio-ремни похожи на загрузочные штифты для загрузчика st, вы определяете столько контактов, сколько требуется для разных опций, привязывайте их/сокращайте их высоко или низко, чтобы выбрать комбинацию, соответствующую требуемой загрузке, чтобы изменить параметр загрузки вместо того, чтобы мигать что-то вы меняете ремни. Например, вы можете обнаружить какое-то присутствие на слоте SD-карты, если оно есть, а затем загрузиться из загруженной в другом месте из другого места. В этом случае вам не нужно на самом деле записывать программу с SD-карты на флеш-память, чтобы запустить ее, если у вас достаточно ресурсов, которые вы можете скопировать в ram и запустить из ram. Что верно для любой из выбранных вами параметров загрузки, вы можете записать их на флэш, а затем запустить оттуда или просто скопировать в ram, зависит от того, насколько велики программы и если вы хотите использовать их другой силовой цикл и не нужно читать с носителя.

Короче говоря, вы можете делать все, что захотите, если у вас достаточно ресурсов (интерфейсы и хранилище (энергозависимые и энергонезависимые). Нет, это не значит, что вы можете напрямую выполнить с SD-карты, но это означает вы можете вытащить программу с SD-карты, затем выполнить или вытащить ее часть с SD-карты, выполнить ее, натягивая еще немного наложения.

Смежные вопросы