Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 04.01.2013, 20:32  
Contemplator1971
Прохожий
 
Регистрация: 11.02.2010
Сообщений: 5
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
Contemplator1971 на пути к лучшему
По умолчанию STM32F407 Bootloader. Запуск программы из Flash.

Постараюсь без излишеств.
После долгих поисков в интернете, сбора информации, решил написать свой бутлоадер, который загружает программу из карты памяти во внутреннюю флэш МК и запускает ее.
Карта памяти подключена по SDIO (FatFs). Работу с картой памяти я уже реализовал. Разобрался с программной записью во флеш МК. Собрал всё вместе и сделал загрузку двоичных файлов во внутреннюю Flash память.
Адрес бутлоадера во Flash - 0x08000000 (начало нулевого сектора);
Адрес загружаемой программы - 0x08008000 (начало второго сектора);
Заливаю бутлоадер, тот сперва очищает сектора в которых будет располагаться программа, переписывает программу с карты памяти по нужному адресу во Flash. Всё работает.

Следующим шагом было "перепрыгивание" на загруженную программу.
Собрал вот такую функцию. Что бы не переносить таблицу векторов в запускаемых приложениях, делаю это перед переходом (или "перепрыгиванием").
Код:
if (((*(__IO uint32_t*)FLASH_USER_START_ADDR) & 0x2FFE0000 ) == 0x20000000)
{
	int i;
	typedef  void (*pFunction)(void);
	uint32_t JumpAddress;
	pFunction Jump_To_Application;
	//__disable_interrupt();  (пишет что команда не найдена, не знаю что инклюднуть)
	//__disable_irq ();
	//SysTick-›CTRL &= 0;
	NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);
	/* Jump to user application */
	JumpAddress = *(__IO uint32_t*) (0x08008000 + 4);
	Jump_To_Application = (pFunction) JumpAddress;
	for(i=0; i‹8; i++)
   	NVIC-›ICER[i] = NVIC-›IABR[i];

	/* Initialise user application's Stack Pointer */
	__set_MSP(*(__IO uint32_t*) 0x08008000);
	Jump_To_Application();
}
После выполнения в отладчике, программа переходит в startup_stm32f4xx.s и снова заходит в программу бутлодера. Я как только не пробовал, всё равно после "перепрыгивания" начинает выполнять программа бутлодера. В последствии, что бы исключить вариант неправильной загрузки во flash, я убрал в начале программы чтение с карты памяти. И вручную в ST_LINK Utility открываю файл программы (мигание светодиода, стандартный ST пример), после сохраняю его как .bin (File -› Save file as), открываю этот файл в формате .bin и перед загрузкой указываю стартовый адрес в памяти 0x08008000 (.hex он заливает железно с 0x08000000). Проверяю, всё нормально. Запускаю, и снова ничего. Если лить программу со светодиодом в начало (0x08000000) - светодиод мигает. Возможно, это из-за того что всё, что я нашёл было под STM32F1xx (хотя мне кажется, что это большой роли не играет).

Может кто что подскажет? Если не конкретно, то хотя бы направление куда копать.

Спасибо.
Реклама:
Contemplator1971 вне форума  
Сказали "Спасибо" Contemplator1971
Durin (19.02.2013)
Непрочитано 04.01.2013, 21:25  
Contemplator1971
Прохожий
 
Регистрация: 11.02.2010
Сообщений: 5
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
Contemplator1971 на пути к лучшему
По умолчанию Re: STM32F407 Bootloader. Запуск программы из Flash.

Очень помогло сообщение пользователя, ник которого я даже не успел запомнить (так быстро сообщение было удалено). В сообщение было не много букв, но весьма поучительно... Изменил настройки Кейла в запускаемой программе и все завелось. Откликнитесь, хотя бы кнопку "СПАСИБО" нажму
Contemplator1971 вне форума  
Непрочитано 04.01.2013, 22:01  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: STM32F407 Bootloader. Запуск программы из Flash.

Сообщение от Contemplator1971 Посмотреть сообщение
Очень помогло сообщение пользователя, ник которого я даже не успел запомнить (так быстро сообщение было удалено).
Его звали Wiza_
_Артём_ вне форума  
Непрочитано 19.02.2013, 13:26  
Durin
Прохожий
 
Регистрация: 19.02.2013
Сообщений: 3
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Durin на пути к лучшему
По умолчанию Re: STM32F407 Bootloader. Запуск программы из Flash.

Сообщение от Contemplator1971 Посмотреть сообщение
Очень помогло сообщение пользователя, ник которого я даже не успел запомнить (так быстро сообщение было удалено). В сообщение было не много букв, но весьма поучительно... Изменил настройки Кейла в запускаемой программе и все завелось. Откликнитесь, хотя бы кнопку "СПАСИБО" нажму
Здравствуйте!

А нельзя ли написать, что именно было в этом ответе? Сейчас встретился с похожей проблемой, пока её не решил.

Заранее большое спасибо!
Durin вне форума  
Непрочитано 19.02.2013, 14:24  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: STM32F407 Bootloader. Запуск программы из Flash.

Предполагаю, что там было указано, что в опциях проекта надо указать адрес линковки. Иначе линкер компилятора разместит прогу не там, где вы планировали, и первый же прямой переход, будет выполнен неправильно.
SasaVitebsk вне форума  
Сказали "Спасибо" SasaVitebsk
Durin (19.02.2013)
Непрочитано 19.02.2013, 14:28  
Durin
Прохожий
 
Регистрация: 19.02.2013
Сообщений: 3
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Durin на пути к лучшему
По умолчанию Re: STM32F407 Bootloader. Запуск программы из Flash.

Да вроде все указано. Попробовал оба варианта - задавать адреса на вкладке Target в опциях и подключать sct-файл:

LR_IROM1 0x08008000 0x000F8000 { ; load region size_region
ER_IROM1 0x08008000 0x000F8000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI)
}
}

Не работает

И сайт ST лежит, как назло.
Durin вне форума  
Непрочитано 19.02.2013, 15:11  
Durin
Прохожий
 
Регистрация: 19.02.2013
Сообщений: 3
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Durin на пути к лучшему
По умолчанию Re: STM32F407 Bootloader. Запуск программы из Flash.

О, все заработало, надо использовать функцию NVIC_SetVectorTable, прямая установка SCB-›VTOR, которую я делал на F207, тут не работает.
Durin вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TMS320C6722. Прожиг программы во FLASH SashaAVP Цифровые сигнальные процессоры 1 01.08.2012 22:35
bootloader в WinAVR MaxiMuz79 Микроконтроллеры, АЦП, память и т.д 6 26.06.2011 11:21
Bootloader По Can FSymkin Микроконтроллеры, АЦП, память и т.д 2 28.12.2010 12:31
Bootloader Atmega LSergM Микроконтроллеры, АЦП, память и т.д 0 23.12.2007 02:32


Часовой пояс GMT +4, время: 15:33.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot