Отговори на тема  [ 33 мнения ]  Отиди на страница 1, 2, 3  Следваща
Как се заключва флаша на AVR oт сорс кода? 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение Как се заключва флаша на AVR oт сорс кода?
Използвам WinAVR през АVR Studio, JTAGMkII и ATmega168.

В юзер гайда на WINAVR е показано примерно така:

Код:
#define LB_MODE_3 (0xFC)
LOCKBITS = LB_MODE_3


но поставяйки горните два реда в сорс файла след компилацията му AVR Studio-то казва че получения файл е по-голям отколкото паметта на записвания процесор?
Правилен ли е гореописания начин за заключване на флаша и има ли друг, който да се задава през софтуера за да се укаже в .hex файла за програмиране?


Вто Фев 17, 2009 9:00 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Окт 28, 2005 3:24 pm
Мнения: 30
Мнение 
С една дума: Никак.
От кода могат само да се четът конфигурационните и заключващи битове, но не и да се пишат. Това става през регистъра SPMCSR, виж описанието му в документацията на контролера. И нормално... представям си как софтуера сменя източника на тактов сигнал примерно... Затова си напиши твой си boot-loader, и с програматора си заключи контролера. После той може сам да се препрограмира през boot-loader-а.


Сря Фев 18, 2009 2:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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-четата примерно), но това е друга тема...


Прикачени файлове:
Pic1.JPG
Pic1.JPG [ 47.69 KiB | Прегледано 1644 пъти ]
Чет Фев 19, 2009 5:00 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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.

В пдф файла в секцията за запис в програмната памет е описан регистър съдържащ битовете за заключване на бутлоадер секциите от паметта и отделно заключването на целия процесор:
Код:
Program And Data Memory Lock Bits:
BLB12 - Boot Lock bit
BLB11 - Boot Lock bit
BLB02 - Boot Lock bit
BLB01 - Boot Lock bit
LB2  - Lock bit
LB1  - Lock bit

От битовете в този регистър мен ме интересуват конкретно LB1 и LB2.
Т.е. има ли начин с който във сорс файла ми да задам комбинацията за забрана записа и четенето от процесора.
В АВРстудиото си има панел от който се задават битовете за каквото си поискаш, но аз не искам всеки път за всеки процесор да сетвам конкретни битове, и за по лесно искам да ги задам някак във файловете на програмата и така следващия път програмирам с един файл процесора и не обикалям различните панели в IDE средата за програмиране. С едно щракване на мишката пишеш и забравяш.


Чет Фев 19, 2009 8:41 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Нормалните компилатори за AVR нямат такива неща.
Но ако толкоз ти е проблем в началото на програмата си четеш фусовете и ако трябва си сетваш който ти трябва и ресетваш чрез кучето.

Програматора на студиото си поддържа специален формат файл в който се записват едновременно bin за флаша,bin за EEPROM-а и фусовете. Правиш си такъв и с едно програмиране си записваш в процесора всичко което ти трябва.


Чет Фев 19, 2009 9:38 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Съб Яну 03, 2009 1:15 pm
Мнения: 107
Местоположение: Пловдив
Мнение 
Момчета
Писането на код не ми е ежедневие
и много от нещата с които вие се занимавате са далеч от моята дейност.
Попаднах случайно на този пост и тъй като сме във този форум за да си помагаме кой с каквото може предположих че мога да ви бъда от полза ;
конкретно за питането на "НИКИ".
Преди години сега вече "покойници" мобилните телефони "Siemens" бяха решили този проблем със защитата на кода от четене запис по този начин .
С така наречения Skey.


Прикачени файлове:
Коментар на файл: Източника е руски естествено
teoria_Skey.txt [6.06 KiB]
223 пъти

_________________
Истинските неща са простички но пътят до тях е дълъг.
Пет Фев 20, 2009 12:18 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 33 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

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


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

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