STM32 bootloader

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
serb-radio
Родился
Сообщения: 3
Зарегистрирован: Сб мар 19, 2011 18:23:14
Откуда: Taganrog
Контактная информация:

STM32 bootloader

Сообщение serb-radio »

Доброго всем дня! Написал свой бутлодырь под STM32f103. Делал это впервые, так что не пинайте. Вопрос такой: прошиваю сначала основную прогу например с адреса 0x800A000, с корректировкой размера (в options for target в Кейле), затем прошиваю бут с опцией прошивальщика erase sectors. Сначала стартует бут, потом переходи в основную прогу, все норм. Но вот если питание после перепрошивки выключить и включить снова, стартует бут и не переходит в основную прогу. В чем может быть проблема?

Функция перехода к осн приложению

Код: Выделить всё

void jumpToApplication(uint32_t addr)
{
	typedef  void (*pFunction)(void);
	pFunction Jump_To_Application;
	uint32_t JumpAddress;
 
	JumpAddress = *(uint32_t*) (addr + 4);
	Jump_To_Application = (pFunction) JumpAddress;
	
	//	Initialize user application's Stack Pointer
	__set_MSP (*(vu32*) addr);
	Jump_To_Application();
}
Перенос векторов в основном приложении

Код: Выделить всё

  __set_PRIMASK(1);
 // NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0800A000);
	NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0xa000);
  __set_PRIMASK(0);
	
	
	pll_init ();		
	pio_config ();																			
	// ðàçáëîêèðîâàíèå ôëýøà
	FLASH_Unlock();
	// èíèò ôëýøà
	EE_Init(); 
	//__disable_irq();
	
	for(i_tmp=0;i_tmp<12;i_tmp++){set_sns_lines(i_tmp);}

	USART1_Init(2);	//9600
	RTC_conf ();
	
	while(1)
	{
	}
Реклама
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: STM32 bootloader

Сообщение Myp3ik »

jumpToApplication случайно не из прерывания вызывается ? :roll:
Иван Сусанин - первый полупроводник :solder:
Реклама
serb-radio
Родился
Сообщения: 3
Зарегистрирован: Сб мар 19, 2011 18:23:14
Откуда: Taganrog
Контактная информация:

Re: STM32 bootloader

Сообщение serb-radio »

Уже разобрался, с переносом векторов косяк был. А вот другой вопрос: как передать в МК бинарник с осн прогой? И как его кушать постранично по 2кб или налету писать? Чего посоветуете?
Аватара пользователя
AlanDrakes
Прорезались зубы
Сообщения: 236
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

Re: STM32 bootloader

Сообщение AlanDrakes »

Лично я бы советовал передавать по странице, или несколько старниц и обязательно опрашивать загрузчик на предмет "Готов к дальнейшему?".
Конечно, если у Вас на кристалле (RAM > ROM), то можно сразу всё целиком передать и пусть оно там себе занимается самопрограммированием. А в классических случаях (RAM <= ROM) - передают прошивку по частям.

UPD: Поправка. По "странице" не всегда срабатывает. Например, у меня есть чудо-юдо кристалл STM32F745, где 512kiB Flash, но только 6 секторов [32k,32k,32k,32k,128k,256k]. В более старшей модели есть и 8 секторов (+2 * 256k), так что писать лучше по нескольку килобайт. Я бы остановился на размере сегмента в 1kiB, либо даже размере классического сектора - 512B. И передать по сети можно одним пакетом (MTU помним?), и пишется шустро.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 bootloader

Сообщение baghear »

Я передаю хекс, разбираю его пишу в память.
Реклама
Аватара пользователя
amv2000
Опытный кот
Сообщения: 722
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Re: STM32 bootloader

Сообщение amv2000 »

Здравствуйте! Не кому не встречалось примеров загрузки прошивки через виртуальный диск?
Реклама
serb-radio
Родился
Сообщения: 3
Зарегистрирован: Сб мар 19, 2011 18:23:14
Откуда: Taganrog
Контактная информация:

Re: STM32 bootloader

Сообщение serb-radio »

А пишете через терминалку? или какой то свой софт пишете для загрузки?
Аватара пользователя
amv2000
Опытный кот
Сообщения: 722
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Re: STM32 bootloader

Сообщение amv2000 »

[uquote="serb-radio",url="/forum/viewtopic.php?p=3101784#p3101784"]А пишете через терминалку?[/uquote]Не знаю кому вопрос? если мне, то даже не представляю как можно через терминалку прошить. Интересен вариант baghear сразу бросать hex файл, я пробовал bin через Mass Storage Device. Только чтобы не разбивать диск на два, надо создать виртуальный и записывать через него. Не имею представления как это делать.
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 bootloader

Сообщение baghear »

Как оказалось этот вариант самый простой, на самом деле в хексе всего три типа пакетов, для каждого пишется обработчик и вуаля.
Сначала пробовал конвертировать хекс в бинарник потом заливать, но это лишние тело движение. В хексе указывается размер пакета, тип пакета и если надо адрес, то есть все что надо.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32 bootloader

Сообщение Мурик »

Аватара пользователя
amv2000
Опытный кот
Сообщения: 722
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Re: STM32 bootloader

Сообщение amv2000 »

Именно по этой статье и пробовал.
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 bootloader

Сообщение baghear »

Вот еще статейка подоспела
https://hubstub.ru/stm32/159-pishim-svo ... stm32.html
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 bootloader

Сообщение baghear »

Ответить

Вернуться в «ARM»