Бит FUSE на фърмуера
Как да програмирате FUSE - битове.
Има две основни грешки:
1. За "Програмиран", тоест - оказващ влияние, се счита битът, в който е записана нула. Обратно, бит се нулира, когато стойността му е единица.
2. Когато се опитате да промените стойността на един бит в прозореца на програмиста, стойността на този бит се променя, а стойностите на останалите битове остават "чисти". След това командата е "Flash FUSE!" . и "висящ" кристал. Но факт е, че битовата област FUSE се състои от 1.3 байта и не позволява побитов достъп, т.е. чете и "шие" байт по байт. Честно казано, трябва да се отбележи, че производителят осигурява известна защита. Например битът SPIEN, който разрешава или забранява серийното (SPI) програмиране, НЕ Е ДОСТЪПЕН в режим на това, тоест последователно програмиране. Тоест дори и да искате, няма да можете да "окачите" кристала с този бит.
Трябва да се каже, че интерфейсът за програмиране SPI е най-често срещаният. AVR910 програми чрез този интерфейс. и като цяло повечето програмисти работят на SPI. Очевидно това се дължи на факта, че това е основният режим на IN-CHIR (In-System) програмиране. Паралелното програмиране не позволява вътрешносхемно програмиране (може би греша) и не съм виждал "панел" (клип за програмиста) за пакета TQFP. Има още два възможни режима на програмиране - сериен високоволтов и чрез JTAG интерфейс. Но в първия режим са програмирани само някои разновидности на ATtiny, а във втория само започвайки от ATmega16.
Според мен най-"опасно", или трудно за възстановяване, е неправилното програмиране на бит RSTDISBL, когато е активиран (настроен на нула), хардуерното нулиране е "забранено". RST изходзапочва да работи като порт изход. Нека ви напомня, че това се отнася само за кристали, за които щифтът RESET има "алтернативна" функция, това не се отнася за ATmega16, в него изобщо няма такъв FUSE.
Така че, ако нула е записана в този бит FUSE, тогава само паралелното програмиране може да помогне. Поради факта, че кристалът се прехвърля в режим на серийно програмиране чрез "нулиране".
Добрата новина е, че ако направите грешка № 2 (вижте по-горе), тогава 1 ще бъде записано в RSTDISBL, тоест кристалът все още ще бъде достъпен за серийно програмиране.
Най-често кристалът "виси" поради факта, че работи във веригата от вътрешния генератор и с грешка № 2 "превключва" да работи от външен кварц (FUSE-битове CKSEL0. 3 = 1).
Можете да излезете от тази ситуация или като свържете 3,8 MHz кварц (свързах 4 MHz) към терминалите XTAL1 и XTAL2 (не свързах кондензатори - "гол" кварц и всичко вървеше добре) или изпратите часовников сигнал към изхода XTAL1 (очевидно в "немския" AVR910 такъв сигнал може да бъде премахнат от изхода, към който са свързани светодиодите. Ще го разбера, ще кажа вие със сигурност ..).
Ако кристалът "оживее", той все още трябва да бъде върнат към "нормалното" чрез програмиране на битовете FUSE така, както са били "от фабриката". Къде да вземем. :-) Вижте листа с данни, глава "Програмиране на паметта ", раздел "Битове за предпазители" и там "Стойност по подразбиране". :-)
Всичко по-горе (грешка 2) направих сам. Резултатът е положителен. Въпреки че (с уплаха :-) ) запоих ATmega8 (планар), но запояването не повлия по никакъв начин на производителността. Запоеният, "висящ" кристал беше запоен в друга платка и там "съживяван" с помощта на кварц. Анимираният кристал все още работи. :-)