Programowanie Lock Bits w ATMELach AT90S8515

        Aby zaprogramować/ustawić Lock Bit1 i Lock Bit2  w ATMELach AT90S8515 można wykorzystać układ ze strony. Oczywiście istnieją inne metody ustawienia tych dwóch bitów i poniższe opracowanie traktuje jako opis dodatkowego wykorzystania zbudowanego przez nas układu. 

Uwaga !! Jeśli te dwa bity są ustawione (zaprogramowane na "0") to "wyczyszczenie" zawartości układu jest jedyną metodą na ich skasowanie (ustawienie w pozycji "1" - układ odblokowany), nie można ich z takiego stanu przestawić w moim "ręcznym" programatorze. 

Zanim zacznę opisywać szczegóły ustawienia tych bitów wyjaśnię co nieco ...

Ustawienie tych bitów nie wpływa na normalna pracę karty. Ich zadanie jest następujące:

Memory Lock Bits 

Protection Type
Mode   LB1 LB2
1 1 1 No memory lock features enabled.
2 0 1 Further programming of the Flash and EEPROM is disabled. (1)
3 0 0 Same as mode 2, and verify is also disabled.

        Więc jak masz "1" "1" to masz pełny dostęp do Atmela, gdy "0" "1" to masz zablokowane programowanie Flasha i EEPROMa. A gdy "0" "0" to to samo co poprzednio plus uniemożliwiona jest weryfikacja. Stan tych bitów nie wpływa na działajacy program w procesorze (w naszym przypadku). Jak je uaktywnisz (przestawisz na "0" "0") to przy programowaniu karty pewnie napotkasz się na komunikat "Unknown procesor ID".
Przejście ze stanu "0" "0" na "1" "1" możliwe jest tylko poprzez skasowanie układu (opcja Erase w FunProm). Jeśli są ustawione na "0" "0" to także w trybie równoległym nie przestawisz Fuse Bits jak i samych Lock Bits.
Podsumowując:
- stan " 0 " oznacza zaprogramowany.
- stan " 1 " oznacza niezaprogramowany.

Wracamy do ustawienia bitów:

        Układ trzeba tak zbudować aby na piny: PD1, PD2, PD3, PD4, PD5, PD6, PB7-0, XTAL1 można podawać sygnały "0" lub "1". Zresztą zakładam, że zbudowaliśmy pełną wersję układu ze strony.

W poniższym opisie wykorzystałem prawie w całości opis ze strony o ustawieniu bitów SPIEN, FSTRT, zmiany będzie można zauważyć tylko w dwóch miejscach. 

Jak programujemy ?
1. Początkowa konfiguracja. 
 

Zanim włączymy układ (podamy odpowiednie napięcia) proponuję ustawić początkową konfigurację

- na pin ( PD2 ) OE ustawiamy "1", bo inaczej można uszkodzić porty PB7-0 - tak zostawiamy do końca programowania,

- pin ( PD1 ) RDY/BSY zostawiamy "w spokoju" - ja go podłączyłem przez LEDa i opornik 471ohm do masy, podczas programowania pojawia się tu "1" logiczna a na samym końcu na chwile pojawi się "0".

- na pin [nr. 19] XTAL1 dajemy "0" - w czasie programowania będziemy tu podawać impuls "1",

- na pin (PD3) WR dajemy "1" - w czasie programowania będziemy tu podawać impuls "0" ( w zasadzie użyjemy go tylko raz podczas naszej "zabawy" ).

- na pin (PD4) BS ustawiamy "0", tak będzie przez cały czas programowania, nie ruszamy go tak samo jak OE.

W zasadzie przed włączeniem układu można przygotować sobie ustawienia do wydania pierwszej komendy (... po co "grzebać" gdy układ jest pod napięciem :-) ), czyli: 

- na pin (PD5) XA0 = "0",  na pin (PD6) XA1 = "1" - odpowiedzialne za uaktywnienie wprowadzanie komend,

- na piny PB0-7 dajemy odpowiednio:

  • PB0 = "0"
  • PB1 = "0"
  • PB2 = "0"
  • PB3 = "0"
  • PB4 = "0"
  • PB5 = "1"
  • PB6 = "0"
  • PB7 = "0"

   Teraz po włączeniu układu wystarczy podać na pin [nr. 19] XTAL1 impuls "1" - i już wydaliśmy układowi pierwszą  komendę.

2. Włączamy układ  
 

- na początek podajemy +5V (pin [nr. 40] VCC, masa pin [nr. 20] GND).

- następnie na RESET dajemy napięcie z zakresu od +11.5 do +12.5 V. W tym momencie na wyjściu ( PD1 ) RDY/BSY powinien zmienić się stan z "0" na "1" logiczną - oznacza to poprawne wprowadzenie układu w tryb programowania.

      Tu należy się mała uwaga: RESET przed załączeniem 5V według mnie może być w "powietrzu", potem (czyli po podaniu 5V na VCC) według dokumentacji dajemy mu "0" -> masa, następnie czekamy co najmniej 100 ns i w końcu dajemy napięcie z zakresu od +11.5 do +12.5 V. Jednak ja pominąłem podłączenie do masy -> "0" i od razu z "powietrza" przeszedłem na 12V.  I chyba można postąpić też tak, że w konfiguracji początkowej dajemy mu "0", potem przechodzimy na 12V.

W tej chwili układ jest ustawiony w tryb programowania.  (opis powyższych czynności -> dokumentacja str. 71 dół )    

     Jeszcze jedna mała uwaga: u mnie włączenie układu do 5V jest równoznaczne z podaniem sygnałów na wejścia z konfiguracji początkowej ->  wszystko jest sterowane z jednego źródła zasilania bez żadnego pierwszeństwa jednego nad drugim.

3. Podanie komendy 0010 0000 (Write Lock Bits).
 

[Uwaga !!!  Pin OE = "1" - tak zostawiamy do końca programowania ]

Jeśli ustawiliśmy wszystko tak jak w konfiguracji początkowej, to teraz wystarczy podać na pin [nr. 19] XTAL1 impuls "1" - i już wydaliśmy układowi pierwszą  komendę. Jeśli nie to robimy to co poniżej:

- na pin (PD5) XA0 = "0",  na pin (PD6) XA1 = "1" - uaktywniliśmy wprowadzanie komend,

- na piny PB0-7 dajemy odpowiednio:

  • PB0 = "0"
  • PB1 = "0"
  • PB2 = "0"
  • PB3 = "0"
  • PB4 = "0"
  • PB5 = "1"
  • PB6 = "0"
  • PB7 = "0"

- na pin [nr. 19] XTAL1 podajemy impuls "1" - w tej chwili wydaliśmy układowi powyższą komendę.

4. Wprowadzenie danych. (Load Data Low Byte)
 

- na pin (PD5) XA0 = "1",  na pin (PD6) XA1 = "0"- uaktywniliśmy wprowadzanie danych,

Bitem n = "0" programujemy a bitem n = "1" "kasujemy" Lock bit.

Bit 2 = Lock Bit2.

Bit 1 = Lock Bit1.

Bit 7-3, 0 = "1". Te bity są zarezerwowane i powinny być podczas programowania ustawione na "1".

- czyli na odpowiednie piny PB0-7 dajemy odpowiednio:

  • PB0 = "1"
  • PB1 = "0"
  • PB2 = "0"
  • PB3 = "1"
  • PB4 = "1"
  • PB5 = "1"
  • PB6 = "1"
  • PB7 = "1"

Powyższe ustawienie oznacza zaprogramowanie tych bitów -> "0".

- na pin [nr. 19] XTAL1 podajemy impuls "1" - w tej chwili wprowadziliśmy układowi powyższe dane.

5. Kończymy programowanie ( Write Data Low Byte )
 

- na pin (PD3) WR podajemy impuls "0" . Ta operacja rozpoczyna programowanie. W tej chwili na pinie ( PD1 ) RDY/BSY pojawia się "0". Przed przystąpieniem do następnych operacji (odłączenia układu) czekamy aż na RDY/BSY pojawi się "1".

 

 

        I to już koniec .... ten sposób tylko obrazuje dodatkowe możliwości zmontowanego przez nas układu/programatora.

            Jeśli zauważysz jakieś błędy w powyższym rozwiązaniem to napisz mi o tym.

Strona umieszczona na http://www.ksw-funcard.civ.pl/

 Ostatnia aktualizacja: 04.09.2001

Wróć

 wersja. 1.2