| Автор |
Съобщение |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
 Как се заключва флаша на AVR oт сорс кода?
Използвам WinAVR през АVR Studio, JTAGMkII и ATmega168.
В юзер гайда на WINAVR е показано примерно така:
но поставяйки горните два реда в сорс файла след компилацията му AVR Studio-то казва че получения файл е по-голям отколкото паметта на записвания процесор?
Правилен ли е гореописания начин за заключване на флаша и има ли друг, който да се задава през софтуера за да се укаже в .hex файла за програмиране?
|
| Вто Фев 17, 2009 9:00 pm |
|
 |
|
Топ
Ранг: Минаващ
Регистриран на: Пет Окт 28, 2005 3:24 pm Мнения: 30
|
С една дума: Никак.
От кода могат само да се четът конфигурационните и заключващи битове, но не и да се пишат. Това става през регистъра SPMCSR, виж описанието му в документацията на контролера. И нормално... представям си как софтуера сменя източника на тактов сигнал примерно... Затова си напиши твой си boot-loader, и с програматора си заключи контролера. После той може сам да се препрограмира през boot-loader-а.
|
| Сря Фев 18, 2009 2:40 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Да при AVR не може да се пишат от софтуера фусовете.
Иначе в някои процесори заключването става чрез запис на нещо в определени клетки на флаша и там може да се заключи процесора от софтуера.
Топ. Много процесори могат да си сменят източника на тактови сигнал от софтуера. Това е малко крива особенност на AVR че не го може. Май в новите AVR Xmega вече има такъв вариант.
|
| Сря Фев 18, 2009 3:08 pm |
|
 |
|
Топ
Ранг: Минаващ
Регистриран на: Пет Окт 28, 2005 3:24 pm Мнения: 30
|
Да-а. Но и това с boot-loader-а работи. В интерес на истината точно заключващите битове пише че могат да се програмират от кода, ето така:
ldi R0, 0xFC
Ldi R16, (1<<BLBSET)|(1<<SPMEN)
sts SPMCSR, R16
spm
Сега е въпроса на С как се пише в регистър... Това трябва да се рови в компилатора.
Горния код на асемблер според документациятана на контролерите трябва да работи, но аз лично още с програмирането на boot-loader-а веднага (автоматично) програмирам и закючващите битове. А това се конфигурира на програматора.
Ники, сънувам ги вече тия Хмеги, откога има цени в Digikey, ама бройки още няма...
|
| Сря Фев 18, 2009 5:52 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Къде видя че могат да се пишат? Аз пак погледнах един pdf ама пак не виждам нещо такова  . Или са го замаскирали някак 
|
| Сря Фев 18, 2009 6:49 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
надявах се на чудо пускайки темата, че съм пропуснал нещо невидяно/непрочетено, и че наистина може да се задават както примерно при PIC-oвете в софтуера.
Но уви няма чудеса
Друго, което ме разочарова АВР е ужким 'калиброваната' честота на вътрешния осцилатор. От 5 бройки процесори, ако наедин съм уцелил че е точно другите са с такива толеранси че УАРТ изобщо не се разбира с PC-то.
А това ми загуби два дни докато го вдяна. И настройките с OSCCAL регистъра въобще не са в синхрон с графиката на вътрешния осцилатор, посочена в деташита...Имам усещането че не ми върви с тези процесори и така ще бъде докато не ги сменя. Ще пробвам и на фрискейл, дано понастоящем не правят 8-битови дървета.
|
| Сря Фев 18, 2009 10:56 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Те и не обещават токова точно калибрована честота. Иначе съм пускал UART на 9600 и си държи стабилна връзка с FTDI чип. И то в целия температурен диапазон 0-75. Това Мега324. Не че няма бъгове и там де но са в други неща. Вече всички нови процесори са си с прилично количество бъгове.
|
| Чет Фев 19, 2009 2:04 am |
|
 |
|
Топ
Ранг: Минаващ
Регистриран на: Пет Окт 28, 2005 3:24 pm Мнения: 30
|
1. Къде се намира описанието на софтуерното самозаключване на чипа
В ПДФ-а на всеки Атмега контролер има раздел за "самопрограмиране, bootloader, read while write". Аз лично като отворя документа отивам на описанието на регистрите, и търся регистър с име започяащо с SPM.... (Store program memory). Там се вижда, в последната колона от таблицата, на коя страница в ПДФ-а е описан този регистър. Един от битовете е BLBSET (Boot Lock Bit Set). Това е.
2. Калибровка на осцилатора
Натъкнах се и аз преди години на този проблем. Но и според ПДФ-а на съответния контролер се вижда че с промяна на температурата за да се поддържа постоянна честота стойността на калибрационниа регистър варира с до 16 единици (4 бита). Това е над 6% грешка. А за УАРТ трябва половин бит точност от 10 бита трансфер (8 данни + старт + стоп), което е 5% точност. Затова се налага при Старт процедурата да се направи калибрация на осцилатора (само последните 4 бита на калибрационния регистър). Та по работния интерфейс, асинхронно се следи за 4 поредни еталонни периода (генерирани от от устройство с точен генератор). Обикновено устройствата без кварцов резонатор са "slave" тип и така се калибрират, всеки според неговата си температура. И по време на работа периодично се изпращат калибрационни (еталонни) периоди, и така "slave"- овете се поддържат калибрирани в случай че на някой от тях по време на работа температурате се променя. По този начин имам перфектно работещи устройсва в мрежа на 500кбит с 32-битови трансфери.
|
| Чет Фев 19, 2009 12:20 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Този BLBSET го знам. Има 5 думи на кръст като обяснение. И не се разбира от там каква е процедурата. И тъй като няма част в пдф-а която да се отнася за програмиране на фусовете от софтуера стигнах преди до заключението че явно не може. Може би в някой Aplication Note са написали нещо повече по въпроса но не съм се сблъсквал с него.
Ако беше нещо належащо щях да изровя нещо де.
По вероятно е да не съм прав относно записа на фусовете.
|
| Чет Фев 19, 2009 1:56 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
Нямам бутлоадер, и не мисля да слагам.
Ако има опция да се заключва от софтуера без бутлоадер, сподели редовете код с които го правиш.
А честотата ще стане с калибрация , но както и да е, това е друга тема...има си чупя главата с поредните незначителни дреболии на своенравния аВР 
|
| Чет Фев 19, 2009 2:03 pm |
|
 |
|
Топ
Ранг: Минаващ
Регистриран на: Пет Окт 28, 2005 3:24 pm Мнения: 30
|
Една от хубостите на AVR-ите е че модула за серийно програмиране е еднакъв на всичките контролери, само е различна организацията на паметта, като размер на страниците и брой страници. Затова си написах преди години мой си boot-loader и сега го ползвам наред, е слеки модификации. На картинката (атачната) е показано какво пише в документацията по темата. А конкретно по-горе дадох кода на Асемблер. Целия Lock Bit Byte е достъпен по този начин. Това е и алгоритъма:
1. Зарежда се в R0 желаната стойност (в случая FC, т.е. забрана за четене и запис);
2. Записва се в регистър SPMCSR стойността (1<<BLBSET)|(1<<SPMEN) ;
3. Веднага след това се изпълнява инструкцията "SPM".
Това е. В реалния ми код преди това има проверка и евентуално изчакване да приключи започнала по-рано процедура за запис във FLASH или EEPROM паметта. След записа на SPMCSR пак изчаквам да приключи операцията.
Много сте прави, че информацията на тази тема е оскъдна, без примери. Наскоро брах ядове с едни ATtiny контролерчета. Не ще и не ще bootloader-а. А то - един от конфигурационните битове трябвало да се програмира, иначе самопрограмирането е забранено. И така, забранено, пристига от завода. А в описанието, как софтуера да чете конфигурационните битове, точно този гегистър е "пропуснат". Какво съвпадение, а? Набарах го обаче, и сега точно те работят на 500кб и се самопрограмират и т.н. Та така - хубави контролери, обаче нямат Aplication документация. Но по-добре така, отколкото обратното (като PIC-четата примерно), но това е друга тема...
|
| Чет Фев 19, 2009 5:00 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Мерси за инфото.
И аз си бях правил 2 бутлоудъра но не бях правил в тях писане по фусовете.
Така или иначе първоначално зареждам бутлоудъра с програматор и тогава си пиша фусовете.
|
| Чет Фев 19, 2009 5:17 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
Toп благодаря за отговора ти!
В някой момент от време ще стигна до бутлоадера и ще се сетя че вече имам готови отговори на проблемите с него.
Но няколко пъти си прочитах въпроса в първия пост на темата и отговорите в нея.
Все нещо ми убягваше да свържа написаните отговори с това в което имам проблем.
Та най-накрая се светнах че не съм задал правилно въпроса си.
Сега се коригирам и питам отново
Под заключване на флаша исках да знам има ли дефиниция, променлива на компилатор или някакъв начин, с който след записване на програмата да не може да се чете от флаша и епрома на процесора.
Не ползвам бутлоадер и не ме касаят битовете за маниппулиране на флаша от бутлоадера. Нещо като Code & Data memory protection.
В пдф файла в секцията за запис в програмната памет е описан регистър съдържащ битовете за заключване на бутлоадер секциите от паметта и отделно заключването на целия процесор:
От битовете в този регистър мен ме интересуват конкретно LB1 и LB2.
Т.е. има ли начин с който във сорс файла ми да задам комбинацията за забрана записа и четенето от процесора.
В АВРстудиото си има панел от който се задават битовете за каквото си поискаш, но аз не искам всеки път за всеки процесор да сетвам конкретни битове, и за по лесно искам да ги задам някак във файловете на програмата и така следващия път програмирам с един файл процесора и не обикалям различните панели в IDE средата за програмиране. С едно щракване на мишката пишеш и забравяш.
|
| Чет Фев 19, 2009 8:41 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Нормалните компилатори за AVR нямат такива неща.
Но ако толкоз ти е проблем в началото на програмата си четеш фусовете и ако трябва си сетваш който ти трябва и ресетваш чрез кучето.
Програматора на студиото си поддържа специален формат файл в който се записват едновременно bin за флаша,bin за EEPROM-а и фусовете. Правиш си такъв и с едно програмиране си записваш в процесора всичко което ти трябва.
|
| Чет Фев 19, 2009 9:38 pm |
|
 |
|
ka2009
Ранг: Новодошъл
Регистриран на: Съб Яну 03, 2009 1:15 pm Мнения: 107 Местоположение: Пловдив
|
Момчета
Писането на код не ми е ежедневие
и много от нещата с които вие се занимавате са далеч от моята дейност.
Попаднах случайно на този пост и тъй като сме във този форум за да си помагаме кой с каквото може предположих че мога да ви бъда от полза ;
конкретно за питането на "НИКИ".
Преди години сега вече "покойници" мобилните телефони "Siemens" бяха решили този проблем със защитата на кода от четене запис по този начин .
С така наречения Skey.
_________________ Истинските неща са простички но пътят до тях е дълъг.
|
| Пет Фев 20, 2009 12:18 pm |
|
|