Отговори на тема  [ 15 мнения ] 
ARM CortexM3 STM32 софтуерно викане на вградения боотлоадер? 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение ARM CortexM3 STM32 софтуерно викане на вградения боотлоадер?
Става дума за процесор ARM ST32 High...
Чудя се дали е възможно да извикам вградения bootloader софтуерно. Той по принцип се активира според състоянието на определен пин по време на ресет, обаче на мене ми се иска да мога да го активирам направо от програмата която се изпълнява в момента. Обратното - скачане от боотлоадера към user програмата явно е възможно - и състоянието на пина явно се пренебрегва...

Някой има ли представа дали това е възможно?

От четенето из нета не успях да стигна до конкретен извод... :(


Съб Окт 31, 2009 9:45 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение 
Здравей, нищо не ти пречи да си извикаш и по време на работа боотлоадера! Неговия начален адрес се знае(можеш и собствен bootloader вместо него да ползваш). Чети и тествай повечко! Успех!


Нед Ное 01, 2009 1:43 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение 
Сега - и аз имах съмнение че ще мога да го извикам - ама нещо ми убягва момента с указател към функцията за целта...

Тоест предполагам че ще трябва да си направя указател към функция /предполагам без параметри/, която да извикам от кода. Нещо обаче не ми стана ясен синтаксиса за целта. Ползвам IAR. Освен това нещо не ми стана ясно с тая таблица на прекъсванията - какво трябва да направя... А и никакъв пример из нета не намерих. Дайте едно рамо :roll:


Нед Ное 01, 2009 3:00 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение 
Един оператор за безусловен преход към адреса на боотлоадера ще ти свърши работа(след като си затвориш приложенията и пр.). :wink: :)


Нед Ное 01, 2009 3:49 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение 
Правя го така:

typedef void (*pFunction)(void);
#define BootloaderAddress ((u32)0x1FFFF000)
pFunction Jump_To_SysBootloader;
vu32 JumpAddress;


И после в кода:

JumpAddress = *(vu32*) (BootloaderAddress + 0);
Jump_To_SysBootloader = (pFunction) JumpAddress;
__MSR_MSP(*(vu32*) BootloaderAddress); // Initialize bootloader Stack Pointer
Jump_To_SysBootloader(); // Real Jump

За сега все още не става! :(
Явно скачам някъде - ама не е там дето трябва...
А и малко не разбрах какво имаш в предвид "да си затворя приложенията"?
Опитвах да забраня прекъсванията преди това - пак не става. Явно не е от това. Не разбрах, трябва ли и цялата периферия да върна в първоначално състояние за да сработи боотлоадера или ...

За сега няма дебъгер още - и карам малко на сляпо. :cry:


Нед Ное 01, 2009 5:07 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение 
Добре де, как я караш и се учиш без дебъгер? В китчето, което си взел няма ли вграден такъв и с какво го програмираш? В Thumb2 инструкциите има няколко такива за преход виж кой е за този случай и с помоща на кои от регистрите в регистровия файл става прехода...(по изпоти се малко де :) ) В IAR-a няма ли някакво GOTO, да те улесни? :)


Нед Ное 01, 2009 6:46 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
Непознавам STM32, но ми се струва, че наистина скачаш не там където трябва...
Разгледах парчето сорс код който си постнал от чисто любопитство и виждам нещо което не се вързва.
Първо подаваш като аргумент на __MSR_MSP съдържанието на адрес 0x1FFFF000. След това използваш съдържанието на същия този адрес като указател към функция и скачаш към него?!? Двете неща се взаимно изключват. Съдържанието на този адрес или е адрес с който се инициализира указателя на стека или е входния адрес на буутлоадъра. Но не ми се вярва да е и двете едновременно. Всичко това идва от този ред:
Код:
JumpAddress = *(vu32*) (BootloaderAddress + 0);

Дали офсета на който се намира JumpAddress е нула?

_________________
Най-опасният враг на истината и свободата е мнозинството.


Пон Ное 02, 2009 12:54 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
typedef void (*pBoot_t)(void);

const pBoot_t Bootloader = (pBoot_t)0x1FFFF000;

после в кода си викаш бутлоудъра
Bootloader();

Така ми се вижда по добре,пробвай. Виж пак дали 0x1FFFF000 е верния адрес на бутлоудъра. Без дебъгер е умряла работа. Особенно такива неща. При АТ91SAM7 софтуерното извикване на бутлоудъра /SAM-BA/ ми беше цяла епопея доде го измисля как да стане. Хем си имах дебъгер.


Пон Ное 02, 2009 1:27 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение 
Да, това е верния адрес на бутлоадера и това е верния код (на Киров) за директен преход към него! Само че така, както я караме без пот в учението... :D Успех за напред!


Пон Ное 02, 2009 2:41 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение 
То пот винаги има за какво друго да тече :D .
Те нещата ще отидат в края на собствен боотлоадер - ясно е, че няма да се размине. Също така ясно е и че ще стане. До сега не е имало нещо да не стане. :D
Случая сега обаче е друг...
Поради недостатъчно леене на пот при дизайна на платките - а те са на 3 пласта - копчето за хардуерен ресет се е получило на такова място - че всеки път му споменавам роднините като ми се наложи да го барам. А на тоя етап все още се налага доста често... В следващите ревизии ще го оправя, ама за сега това ще е някакво улеснение в процеса за развой.
Довечера ще пробвам кода да видим - и ще пиша какво се е получило.

Иначе семплера свири та се носи :D
Кой да му се надява...


Пон Ное 02, 2009 8:29 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
juzisound написа:
Иначе семплера свири та се носи :D
Кой да му се надява...


Я сподели какво правиш, твоите проекти са ми били винаги интересни :)

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Пон Ное 02, 2009 3:50 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение 
Никола Киров е прав - отново :D
Това което е написал е част от верния код. Явно има още нещо, което ми убягва, ама и сега малко не мога да се съсредоточа върху точно тая задача, щото има и по-спешни неща за писане по устройството - а за в края на седмицата има и важна промоцийка и трябва да го сглася...
Иначе наистина скачам на някъде - ама без дебъгер - кой знае къде. :cry:

Сега - какво правя...
Ами нали направихме с колегата един електронен кавал. Хубаво - ама това е реално MIDI контролер - демек дава MIDI сигнал а не аудио. Това MIDI трябва да влезне в някакъв синтезатор или семплер - който вече да свири аудиото, за да може да се ползва директно на сцена. За музиканти, които имат вече някакъв подобен синтезатор - не е проблем да си го ползват, ама повечето гайдари и кавалджии за които е предназначен инструмента нямат такива. А и от друга страна ако контролера ни се включи в нещо калпаво като звук - разбирай по евтин модел синтезатор - малко се опорочава идеята, щото не може да звучи така готино като в големите модели. Те обаче са пък доста скъпи - обикновенно по 5-6 бона, че и нагоре.
Та от там дойде идеята и да си направим собствен звук за нашия си контролер. Хем да е хубав, хем да е евтин. И така, почнахме да правим музикален семплер.

Устройството е подобно на звуковите модули на разните купешки синтезатори /реално семплери/ като Roland, Korg, Yamaha и др. Реализацията е обаче малко по различна. При стандартните семплери има RAM памет. Семплите се зареждат обикновенно от хард диск първо в RAM паметта, а после се плейват от там, че е по-бързо. Обикновено тая RAM памет все не стига. В големите модели е около 128MB, което е горе долу достатъчно, обаче те както казах са пък по 5,6 бона, а и по 20 - 30 кила...

Нашето устройство работи на друг принцип. Семплите стоят на SD карта и се плейват директно от там. Скоростта ни на четене от картата е доста висока и с хитро буфериране можем да свирим до 8 гласа едновременно, което е напълно достатъчно за нашия инструмент. Вярно проектчето малко сложничко стана - ама на практика вече е на 99% готово. остава да дойдат само панелите. То кода ще се развива и след това естествено - но и сега вече е на етап да си върши това за което е предназначено устройството. Големи разправии имахме и с аналоговата част - ама то нали в общи линии аз почти само го правя и основно през свободното време - та затова бавно върви. То не бяха схеми, то не бяха платки, то кутии, то дизайн на панели, че и софтуер да правим че и на нов процесор - човек кое по на пред да прави. Цялото устройство е 12х12 см и тежи около кило - а вътре е и захранването за контролера. Както и да е - вече е почти готово - и скоро ще пуснем и малко видео с него... После ще му мислим и боотлоадер някакъв - по MIDI най вероятно, въпреки че имаме изведени и сериен и USB порт.

Поздрави на всички!

:)


Пон Ное 02, 2009 8:50 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение 
Чудно, при мен скача където трябва - проверено с дебъгер!


Пон Ное 02, 2009 9:03 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение 
И при мене се вижда че отива някъде - ама не е ясно дали там. Изглежда като забил! Ако предположим че отива на боотлоадера, трябва ли да направя и нещо друго преди това, че да не забива. Примерно да забраня прекъсванията, някаква инициализация, пренасочване на векторите на прекъсванията и т.н? Аз пробвах само да забраня всички прекъсвания - но нищо не се промени.


Пон Ное 02, 2009 9:18 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение 
Бутлоадера си има процедури за работа, трябва да провериш в документацията за него в ST. A щом го виждам през дебъгера къде отива, то значи е там - къде другаде?
PM0042
Programming manual:"The read protection can be disabled using the boot loader (in this case only a System Reset
is necessary to reload the option bytes). For more details refer to AN2606."


Пон Ное 02, 2009 9:23 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 15 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни