|
|
  |
stm32 embedded SRAM boot mode |
|
|
|
May 8 2013, 22:03
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
На моем учебном борде (stm32f103c8) я умею загружать программу через SWD или через UART. Хочу освоить загрузку из памяти, но не могу найти информацию ни на русском, ни на английском.
Про bootloader (который с boot0=1 boot1=0) много говорят, а про SRAM (который boot0 = boot1 =1) только упоминают, что есть такой. И все.
Работаю с Keilом. Я догадываюсь, что на закладке target в свойствах проекта надо начальный адрес с 0x08000000 на 0x20000000 поменять, и соответственно начало РАМ сдвинуть с 0x20000000 на 0x20002800, но этого не достаточно. Еще в настройках дебагера по умолчанию разрешалось использовать РАМ начиная с 20000000. Я это изменил на 20002800.
Когда я пытаюсь забежать программу - получаю сообщение "Flash Download Filed". Логично, мы же должны грузить в РАМ, а не во флэш. Но где и как сказать - не догоняю.
Кто-нибудь решал такую проблему?
|
|
|
|
|
May 10 2013, 21:51
|

Местный
  
Группа: Свой
Сообщений: 449
Регистрация: 28-10-04
Из: Украина
Пользователь №: 1 002

|
Цитата(igorle @ May 9 2013, 02:03)  Хочу освоить загрузку из памяти, но не могу найти информацию ни на русском, ни на английском.
Когда я пытаюсь забежать программу - получаю сообщение "Flash Download Filed". Логично, мы же должны грузить в РАМ, а не во флэш. Но где и как сказать - не догоняю.
Кто-нибудь решал такую проблему? К чему стартовать из памяти, если ее содержимое - нули или не определено? Вот правильная последовательность: - пишется основная программа и компилируется так, чтобы работала из ОЗУ. - в стартапе (тот модуль, что на АСМе пишется) пишем маленькую процедурку, которая переписывает код из флеши в ОЗУ и затем передает ему управление. Возможно, включает Ремап. А далее действуем так, как БУДТО имеем дело с программой для флеши. То есть программатором она должна записаться во флеш, оттуда вызваться, переписать себя в ОЗУ и передать управление туда. Теперь при рестарте и выборе ОЗУ, она сразу стартанет из ОЗУ. Зачем вам такое надо? В старые времена этим пользовались на АРМах с медленной внешней флеш-памятью, при холодном старте копируя всю программу в быстрое внутреннее ОЗУ.
--------------------
Умею молчать на 37 языках...
|
|
|
|
|
May 10 2013, 23:35
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Gorby @ May 11 2013, 00:51)  Вот правильная последовательность:
- пишется основная программа и компилируется так, чтобы работала из ОЗУ. - в стартапе (тот модуль, что на АСМе пишется) пишем маленькую процедурку, которая переписывает код из флеши в ОЗУ и затем передает ему управление. Возможно, включает Ремап.
А далее действуем так, как БУДТО имеем дело с программой для флеши. То есть программатором она должна записаться во флеш, оттуда вызваться, переписать себя в ОЗУ и передать управление туда. Теперь при рестарте и выборе ОЗУ, она сразу стартанет из ОЗУ. Всё в принципе правильно. Цитата(Gorby @ May 11 2013, 00:51)  Зачем вам такое надо? В старые времена этим пользовались на АРМах с медленной внешней флеш-памятью, при холодном старте копируя всю программу в быстрое внутреннее ОЗУ. Это нужно бывает и в новые времена. Например программе нужно сохранить настройки, но EEPROM есть не во всех АРМах - нужно писать во flash. При этом исполнение из flash во время записи не всегда возможно. Значит нужно перенести часть кода куда-то ещё (например в ram) и там запустить процесс. При этом может быть нужно реагировать на прерывания - обработчики и таблицу векторов тоже в ram. Цитата(Gorby @ May 11 2013, 00:51)  В старые времена этим пользовались на АРМах с медленной внешней флеш-памятью, при холодном старте копируя всю программу в быстрое внутреннее ОЗУ. Тогда и внутреняя flash была медленная, да и сейчас из ОЗУ быстрее работать может.
|
|
|
|
|
May 11 2013, 14:22
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(igorle @ May 11 2013, 13:36)  Как оказалось, в интернетах тема не обсуждается. Или все банально, или никому не нужно.. нет, как раз обсуждалось и на этом форуме. Не уверен, что применительно к STM32, но точно помню, что кто-то грузил программу во внешнюю, кстати, SDRAM То есть еще как-то ухитрялись изначально конфигурить EMC что же касается внутренней SRAM, попробуйте собрать проект в ее адресном пространстве и добавьте INI файл, в котором будет такое: Код $ = 0x20000000 адрес подправьте на начало кода (там, где вектор Reset'а)
|
|
|
|
|
May 11 2013, 20:16
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
Цитата(toweroff @ May 11 2013, 21:43)  хмм.. я даже не подумал, что Вы пытаетесь "прошить" в ОЗУ  А что в этом необычного? Давным давно, когда перепрограммируемого ПЗУ у нас не было, была плата "ОЗУ подмены". Сначала "прожигали" его, а потом забегали. Согласитесь, что перенести данные в ОЗУ, когда оно временно заменяет ПЗУ - это совершенно логичная операция. Тем более, что может быть я и не хочу бежать под отладчиком, а просто хочу нажать кнопку "ресет" и побежать...
|
|
|
|
|
May 11 2013, 21:20
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(igorle @ May 12 2013, 00:16)  А что в этом необычного? Давным давно, когда перепрограммируемого ПЗУ у нас не было, была плата "ОЗУ подмены". Сначала "прожигали" его, а потом забегали. Согласитесь, что перенести данные в ОЗУ, когда оно временно заменяет ПЗУ - это совершенно логичная операция. Тем более, что может быть я и не хочу бежать под отладчиком, а просто хочу нажать кнопку "ресет" и побежать... не в том дело обратите внимание на то, что в настройках Кейла указывается, что для программирования используется часть ОЗУ для прошивки флеша Я, честно говоря, не разбирался никогда, что туда пишется, но не некая ли программа, которая "дергает" IAP? Или это просто место под данные, а все операции IAP'а можно "дрыгать" JTAG'ом...
|
|
|
|
|
Apr 28 2016, 15:04
|
Группа: Новичок
Сообщений: 2
Регистрация: 28-04-16
Пользователь №: 91 533

|
Цитата(igorle @ May 12 2013, 00:59)  Я нашел, почему у меня раньше это не работало. Обязательное условие - в свойствах проекта, на закладке "Utilites" надо убрать чек с параметра "Update Target Before Debugging" Как у вас получилось запрограмировать SRAM , тоже так хочу чтобы прямо в коде отлаживать и не работает . Вроде все также сделал и начальный адрес сместил и нажимаю дебаг . А код не работает когда boot 11 , а из флеша работает .
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|