igorle 0 8 мая, 2013 Опубликовано 8 мая, 2013 · Жалоба На моем учебном борде (stm32f103c8) я умею загружать программу через SWD или через UART. Хочу освоить загрузку из памяти, но не могу найти информацию ни на русском, ни на английском. Про bootloader (который с boot0=1 boot1=0) много говорят, а про SRAM (который boot0 = boot1 =1) только упоминают, что есть такой. И все. Работаю с Keilом. Я догадываюсь, что на закладке target в свойствах проекта надо начальный адрес с 0x08000000 на 0x20000000 поменять, и соответственно начало РАМ сдвинуть с 0x20000000 на 0x20002800, но этого не достаточно. Еще в настройках дебагера по умолчанию разрешалось использовать РАМ начиная с 20000000. Я это изменил на 20002800. Когда я пытаюсь забежать программу - получаю сообщение "Flash Download Filed". Логично, мы же должны грузить в РАМ, а не во флэш. Но где и как сказать - не догоняю. Кто-нибудь решал такую проблему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gorby 6 10 мая, 2013 Опубликовано 10 мая, 2013 · Жалоба Хочу освоить загрузку из памяти, но не могу найти информацию ни на русском, ни на английском. Когда я пытаюсь забежать программу - получаю сообщение "Flash Download Filed". Логично, мы же должны грузить в РАМ, а не во флэш. Но где и как сказать - не догоняю. Кто-нибудь решал такую проблему? К чему стартовать из памяти, если ее содержимое - нули или не определено? Вот правильная последовательность: - пишется основная программа и компилируется так, чтобы работала из ОЗУ. - в стартапе (тот модуль, что на АСМе пишется) пишем маленькую процедурку, которая переписывает код из флеши в ОЗУ и затем передает ему управление. Возможно, включает Ремап. А далее действуем так, как БУДТО имеем дело с программой для флеши. То есть программатором она должна записаться во флеш, оттуда вызваться, переписать себя в ОЗУ и передать управление туда. Теперь при рестарте и выборе ОЗУ, она сразу стартанет из ОЗУ. Зачем вам такое надо? В старые времена этим пользовались на АРМах с медленной внешней флеш-памятью, при холодном старте копируя всю программу в быстрое внутреннее ОЗУ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 10 мая, 2013 Опубликовано 10 мая, 2013 · Жалоба Вот правильная последовательность: - пишется основная программа и компилируется так, чтобы работала из ОЗУ. - в стартапе (тот модуль, что на АСМе пишется) пишем маленькую процедурку, которая переписывает код из флеши в ОЗУ и затем передает ему управление. Возможно, включает Ремап. А далее действуем так, как БУДТО имеем дело с программой для флеши. То есть программатором она должна записаться во флеш, оттуда вызваться, переписать себя в ОЗУ и передать управление туда. Теперь при рестарте и выборе ОЗУ, она сразу стартанет из ОЗУ. Всё в принципе правильно. Зачем вам такое надо? В старые времена этим пользовались на АРМах с медленной внешней флеш-памятью, при холодном старте копируя всю программу в быстрое внутреннее ОЗУ. Это нужно бывает и в новые времена. Например программе нужно сохранить настройки, но EEPROM есть не во всех АРМах - нужно писать во flash. При этом исполнение из flash во время записи не всегда возможно. Значит нужно перенести часть кода куда-то ещё (например в ram) и там запустить процесс. При этом может быть нужно реагировать на прерывания - обработчики и таблицу векторов тоже в ram. В старые времена этим пользовались на АРМах с медленной внешней флеш-памятью, при холодном старте копируя всю программу в быстрое внутреннее ОЗУ. Тогда и внутреняя flash была медленная, да и сейчас из ОЗУ быстрее работать может. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 11 мая, 2013 Опубликовано 11 мая, 2013 · Жалоба А еще вот такой момент. Чтобы не убивать флеш частыми перезаписями (я понимаю, что 100000 - это "по уши", но тем не менее), переносим код сразу в ОЗУ и запускаем оттуда? То есть чисто для отладки, как будто стартап уже перенес код в ОЗУ Сам таким способом не пользовался, но... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorle 0 11 мая, 2013 Опубликовано 11 мая, 2013 · Жалоба Да, именно чтобы не расходовать ресурс флеша. Я полагаю, что только для отладки такой режим загрузки и предусмотрен. В конечном продукте этот режим ведь невозможно использовать, правда? Я делаю первые шаги в STM32. Спаял первый борд. Вот и экономлю ресурс. В кейле в образцах есть конфигурации для старта из SRAM. Но там нет настроек дебагера (они же не знают какой дебагер у меня будет) И вот тут-то все и застопорилось. Как оказалось, в интернетах тема не обсуждается. Или все банально, или никому не нужно.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 11 мая, 2013 Опубликовано 11 мая, 2013 · Жалоба Как оказалось, в интернетах тема не обсуждается. Или все банально, или никому не нужно.. нет, как раз обсуждалось и на этом форуме. Не уверен, что применительно к STM32, но точно помню, что кто-то грузил программу во внешнюю, кстати, SDRAM То есть еще как-то ухитрялись изначально конфигурить EMC что же касается внутренней SRAM, попробуйте собрать проект в ее адресном пространстве и добавьте INI файл, в котором будет такое: $ = 0x20000000 адрес подправьте на начало кода (там, где вектор Reset'а) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorle 0 11 мая, 2013 Опубликовано 11 мая, 2013 · Жалоба Проблема разрешилась! Как говорится, "дело было не в бобине". Я пытался загрузить код в память, нажимая кнопку "load". И вот этого делать не надо было. Давим кнопку "debug", и все замечательно работает. Программа грузится в ОЗУ и оттуда бежит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 11 мая, 2013 Опубликовано 11 мая, 2013 · Жалоба Проблема разрешилась! хмм.. я даже не подумал, что Вы пытаетесь "прошить" в ОЗУ :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorle 0 11 мая, 2013 Опубликовано 11 мая, 2013 · Жалоба хмм.. я даже не подумал, что Вы пытаетесь "прошить" в ОЗУ :) А что в этом необычного? Давным давно, когда перепрограммируемого ПЗУ у нас не было, была плата "ОЗУ подмены". Сначала "прожигали" его, а потом забегали. Согласитесь, что перенести данные в ОЗУ, когда оно временно заменяет ПЗУ - это совершенно логичная операция. Тем более, что может быть я и не хочу бежать под отладчиком, а просто хочу нажать кнопку "ресет" и побежать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 11 мая, 2013 Опубликовано 11 мая, 2013 · Жалоба А что в этом необычного? Давным давно, когда перепрограммируемого ПЗУ у нас не было, была плата "ОЗУ подмены". Сначала "прожигали" его, а потом забегали. Согласитесь, что перенести данные в ОЗУ, когда оно временно заменяет ПЗУ - это совершенно логичная операция. Тем более, что может быть я и не хочу бежать под отладчиком, а просто хочу нажать кнопку "ресет" и побежать... не в том дело обратите внимание на то, что в настройках Кейла указывается, что для программирования используется часть ОЗУ для прошивки флеша Я, честно говоря, не разбирался никогда, что туда пишется, но не некая ли программа, которая "дергает" IAP? Или это просто место под данные, а все операции IAP'а можно "дрыгать" JTAG'ом... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorle 0 11 мая, 2013 Опубликовано 11 мая, 2013 (изменено) · Жалоба Я нашел, почему у меня раньше это не работало. Обязательное условие - в свойствах проекта, на закладке "Utilites" надо убрать чек с параметра "Update Target Before Debugging" Изменено 12 мая, 2013 пользователем igorle Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Prestigio_ST 0 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба Я нашел, почему у меня раньше это не работало. Обязательное условие - в свойствах проекта, на закладке "Utilites" надо убрать чек с параметра "Update Target Before Debugging" Как у вас получилось запрограмировать SRAM , тоже так хочу чтобы прямо в коде отлаживать и не работает . Вроде все также сделал и начальный адрес сместил и нажимаю дебаг . А код не работает когда boot 11 , а из флеша работает . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться