Кто любит RISC в жизни, заходим, не стесняемся.
Пт май 05, 2017 13:03:07
Доброго всем дня! Написал свой бутлодырь под 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)
{
}
Пт май 05, 2017 13:42:23
jumpToApplication случайно не из прерывания вызывается ?
Пн май 08, 2017 12:12:43
Уже разобрался, с переносом векторов косяк был. А вот другой вопрос: как передать в МК бинарник с осн прогой? И как его кушать постранично по 2кб или налету писать? Чего посоветуете?
Пн май 08, 2017 12:35:43
Лично я бы советовал передавать по странице, или несколько старниц и обязательно опрашивать загрузчик на предмет "Готов к дальнейшему?".
Конечно, если у Вас на кристалле (RAM > ROM), то можно сразу всё целиком передать и пусть оно там себе занимается самопрограммированием. А в классических случаях (RAM <= ROM) - передают прошивку по частям.
UPD: Поправка. По "странице" не всегда срабатывает. Например, у меня есть чудо-юдо кристалл STM32F745, где 512kiB Flash, но только 6 секторов [32k,32k,32k,32k,128k,256k]. В более старшей модели есть и 8 секторов (+2 * 256k), так что писать лучше по нескольку килобайт. Я бы остановился на размере сегмента в 1kiB, либо даже размере классического сектора - 512B. И передать по сети можно одним пакетом (MTU помним?), и пишется шустро.
Пн май 08, 2017 23:30:44
Я передаю хекс, разбираю его пишу в память.
Ср май 10, 2017 08:11:43
Здравствуйте! Не кому не встречалось примеров загрузки прошивки через виртуальный диск?
Ср май 10, 2017 12:39:07
А пишете через терминалку? или какой то свой софт пишете для загрузки?
Ср май 10, 2017 19:18:51
А пишете через терминалку?
Не знаю кому вопрос? если мне, то даже не представляю как можно через терминалку прошить. Интересен вариант baghear сразу бросать hex файл, я пробовал bin через Mass Storage Device. Только чтобы не разбивать диск на два, надо создать виртуальный и записывать через него. Не имею представления как это делать.
Ср май 10, 2017 21:48:15
Как оказалось этот вариант самый простой, на самом деле в хексе всего три типа пакетов, для каждого пишется обработчик и вуаля.
Сначала пробовал конвертировать хекс в бинарник потом заливать, но это лишние тело движение. В хексе указывается размер пакета, тип пакета и если надо адрес, то есть все что надо.
Чт май 11, 2017 06:57:00
Именно по этой статье и пробовал.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.