Ustawianie bitów: SPIEN, FSTRT w ATMELach AT90S8515

  Poniższy sposób opracowałem zgodnie ze wskazówkami zawartymi 

         na SDTV BulletinBoard: 8515 -> 8515A

Wstęp

Standardowa konfiguracja Atmel-a gdy opuszcza fabrykę to: 
SPIEN = Acivated
FSTRT = NOT Activated
A gdy pisze na nim "A":
SPIEN = Acivated
FSTRT = Activated

        A więc normalny układ AT90S8515 będzie się programował bez problemu bo SPIEN = Acivated, ale nic się nie "uruchomi" ponieważ bit FSTRT odpowiedzialny za krótki start nie jest aktywny. Więcej szczegółów zamieściłem na tej stronie.

Aby zaprogramować  dwa  bity: SPIEN, FSTRT w ATMELach AT90S8515 bez literki "A" zbudowałem prosty aparacik opisany na stronie poświęconej jego budowie. 

Można układ z tej strony dość mocno uprościć jeśli przyjmiemy, że interesuje nas tylko ustawienie tych dwóch bitów. A mianowicie kilka wejść można podłączyć na stałe do "0" lub "1". Są to:

A więc na tych wejściach można zrezygnować ze zworek. Po tych uproszczeniach w układzie przewidujemy sterowanie "0/1" tylko na następujących wejściach: PD3, PD5, PD6, PB1, PB2, PB3, PB4, PB7, XTAL1 a więc tylko dziewięć przełączników ! 

        Jeszcze tak patrząc na ten schemat z http://come.to/piccards widać że tam autor na wejścia: PB1, PB2, PB3, PB4, PB7 przez cały czas podaje "0" masa.
Nie wiem czy tak można .... może to niedługo sprawdzę, w dokumentacji pisze, że bity 7-6, 4-1 są zarezerwowane i powinny być podczas programowania ustawione na "1". Autor tu steruje tylko sygnałami na wejściach: PB0, PB5, PB6 - może dlatego u niektórych osób to nie działa (Piszę tu oczywiście tylko o wej. PB). Jeśli przyjmiemy, że takie rozwiązanie się sprawdza to liczba przełączników zmniejsza się do siedmiu !

W poniższym opisie przyjmuję, że jednak mamy możliwość sterowania wszystkimi wejściami i jak ktoś zbuduje uproszczony układ to musi sobie odpowiednie fragmenty opisu opuścić :-)

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.

- 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 = "0"
  • PB6 = "1"
  • 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 0100 0000 (Write Fuse 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 = "0"
  • PB6 = "1"
  • 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 Fuse bit.

Bit 5 = SPIEN Fuse bit.

Bit 0 = FSTRT Fuse bit.

Bit 7-6,4-1 = "1".

- czyli na odpowiednie piny PB0-7 dajemy odpowiednio:

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

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

5. Kończymy programowanie.
 

- na pin (PD3) WR podajemy impuls "0" .

       Uwaga !! Po przeprowadzeniu kilku prób doszedłem do wniosku, że ten impuls musi być bardzo krótki, gdy jest dłuższy to nie udaje się zaprogramować tych bitów. W dokumentacji pisze, że powinien on mieć Min 1.0 a Max 1.8 ms.  

     Na koniec przedstawię przebieg sygnałów który najlepiej obrazuje wykonywane przez nas operacje. 

 

 

( więcej szczegółów dokumentacja str. 74 dół i str. 72, na str. 73 jest umieszczony przebieg sygnałów na wejściach  - z niego wszystko lepiej widać)

 

 

        I to już koniec .... u mnie ten sposób zadziałał, jednak nie biorę odpowiedzialności za ewentualne uszkodzenie Atmel-a. Powyższa metoda ustawiania tych dwóch bitów nie jest może najszybsza i przyjemna ale dla jednego układu chyba nie opłaca się budować specjalnych programatorów jak np. ze strony: http://come.to/piccards lub innych opisanych na mojej stronie.

        Jeśli zauważysz jakieś błędy, masz jakieś propozycje w związku z powyższym rozwiązaniem to napisz mi o tym.

Jeśli chcesz się zapoznać z wcześniejszą wersją powyższego opracowania kliknij tu.

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

Wróć

 wersja. 1.2