Pytanie jak w tytule.
Nie da rady odczytać wsadu bo jest zabezpieczony za pomocą Lock1 i Lock2.
Przy odczycie fusów podaje konfigurację fusów - czy jest ona poprawna czy nie?
Kolejna sprawa jest taka czy da się zablokować procesor zmieniając fusy ale nie ruszając SPIEN?
Wydaje mi się że tak jeżeli procesor ma ustawiony wewnętrzny oscylator a zmieni się w fusach na zewnętrzny którego nie będzie.
Wtedy chyba ratunkiem jest podanie sygnału na XTAL1.
Ostatnie pytanie - czy w fusach oprócz zewnętrznego kwarcu, wewnętrznego oscylatora można też wybrać coś innego - na przykład sygnał taktujący z innego procesora - czy jest to to samo co zewnętrzny kwarc.
Znalazłem coś takiego w jakimś programie jak Ext. Clock lub PLL Clock
Co to takiego?
Odczytanie fusebit z zabezpieczonego procesora
** Pisząc uC, mam na myśli procki AVR, nie inne rodziny.
1. Nie ma szans by procesor zwrócił nieprawidłową konfigurację fusów (w praktyce błędy powstają na styku uC-programator, nie w uC).
Z tego co pamiętam (mogę się mylić, akurat nie mam żadnego uC pod ręką by sprawdzić) założenie blokady całkowicie blokuje komunikację po ISP, nie zczytsz nawet fusów, jedynie nr identyfikacyjny urządzenia. Przy programowaniu równoległym i JTAG może być inaczej z fusami, może nawet da się odczytać pamięć flash (oczywiście uC zablokowany przed odczytem, odczytasz same zera lub jedynki).
Żeby ponownie cokolwiek odczytać/zapisać, musisz wyczyścić pamięć flash i eeprom przy pomocy komendy 'chip erase' lub podobnej. Jeśli dobrze pamiętam, ta komenda nie czyści fusów od ustawień taktowania więc w ten sposób możesz je odczytać.
2. Procesor da się zablokować na kilka sposobów.
- LockBity blokują zapis/odczyt, ale dowolnym programatorem da się wyzerować uC i od nowa zaprogramować.
- Interfejsu ISP nie wyłączysz przy programowaniu przez ISP, podobnie interfejsu JTAG nie wyłączysz przy programowaniu przez JTAG, ale korzystając z jednego możesz wyłączyć drugi. Korzystając z programatora równoległego, możesz wyłączyć ISP i JTAG, interfejsu równoległego niskonapięciowego nie da się wyłączyć ale można wyłączyć reset...
- Część uC ma możliwość użycia pinu reset jako pinu we/wy. W tym celu należy zmienić fusebity. Wyłączenie resetu blokuje możliwość programowania niskonapięciowego, zarówno ISP i JTAG, jak i równoległego i na to nie ma zabezpieczenia, po prostu najpierw programujesz fusy i flesz, na koniec ten jeden bit i sprzedajesz gotowe urządzenie. Na szczęście istnieje programowanie wysokonapięciowe, zależnie od uC masz do dyspozycji HVSP - szeregowe lub HVPP - równoległe. Tym sposobem skomunikujesz się z 'zablokowanym' uC, dalej masz takie same prawa dostępu jak dla programowania niskonapięciowego (np. zablokowany interfejs szeregowy).
3. Procesor możesz taktować na dwa sposoby, wewnętrznym generatorem RC albo sygnałem z zewnątrz (nie pamiętam na który pin XTAL należy podać sygnał, ale na pewno jeden z nich). Zależnie od ustawionych fusów, uC włącza odpowiedni obwód generatora. Zawsze jest opcja olania wybranego sposobu taktowania i podania na siłę przebiegu taktującego z zewnątrz, uC musi ruszyć i dać się przeprogramować. To samo robią programatory, zawsze załączany jest zewnętrzny sygnał taktujący dalej i jakoś to leci.
4. Nie przerabiałem uC z PLL i fusami (w prockach xMega jest PLL ale nie ma fusów). Każdy uC ma możliwość skonfigurowania go do pracy z zewnętrznym źródłem zegara, zerknij w dataszit, sekcja System Clock and Clock Options -> External Clock.
Wyjątkiem są tylko stare uC np. 90s2313 i wszystkie z rodziny '51/'52 gdzie zmiany dokonuje się sprzętowo, podłączając kwarc albo generator do wybranego pinu.
By skorzystać z zewnętrznego źródła taktowania, należy sygnał zegarowy podłączyć pod odpowiedni pin XTAL (parz punkt 3) i przestawić fusy tak by było taktowanie zewnętrzne, nie wbudowany RC. Formalnie należy ustawić taktowanie na sygnał zewnętrzny (External Clock), pozwoli to ograniczyć pobór prądu i generowane zakłócenia. W praktyce podanie sygnału zewnętrznego zadziała nawet przy wyborze kwarcu, rezonatora ceramicznego lub zewnętrznego obwodu RC, ale nie jest to zalecana opcja.
1. Nie ma szans by procesor zwrócił nieprawidłową konfigurację fusów (w praktyce błędy powstają na styku uC-programator, nie w uC).
Z tego co pamiętam (mogę się mylić, akurat nie mam żadnego uC pod ręką by sprawdzić) założenie blokady całkowicie blokuje komunikację po ISP, nie zczytsz nawet fusów, jedynie nr identyfikacyjny urządzenia. Przy programowaniu równoległym i JTAG może być inaczej z fusami, może nawet da się odczytać pamięć flash (oczywiście uC zablokowany przed odczytem, odczytasz same zera lub jedynki).
Żeby ponownie cokolwiek odczytać/zapisać, musisz wyczyścić pamięć flash i eeprom przy pomocy komendy 'chip erase' lub podobnej. Jeśli dobrze pamiętam, ta komenda nie czyści fusów od ustawień taktowania więc w ten sposób możesz je odczytać.
2. Procesor da się zablokować na kilka sposobów.
- LockBity blokują zapis/odczyt, ale dowolnym programatorem da się wyzerować uC i od nowa zaprogramować.
- Interfejsu ISP nie wyłączysz przy programowaniu przez ISP, podobnie interfejsu JTAG nie wyłączysz przy programowaniu przez JTAG, ale korzystając z jednego możesz wyłączyć drugi. Korzystając z programatora równoległego, możesz wyłączyć ISP i JTAG, interfejsu równoległego niskonapięciowego nie da się wyłączyć ale można wyłączyć reset...
- Część uC ma możliwość użycia pinu reset jako pinu we/wy. W tym celu należy zmienić fusebity. Wyłączenie resetu blokuje możliwość programowania niskonapięciowego, zarówno ISP i JTAG, jak i równoległego i na to nie ma zabezpieczenia, po prostu najpierw programujesz fusy i flesz, na koniec ten jeden bit i sprzedajesz gotowe urządzenie. Na szczęście istnieje programowanie wysokonapięciowe, zależnie od uC masz do dyspozycji HVSP - szeregowe lub HVPP - równoległe. Tym sposobem skomunikujesz się z 'zablokowanym' uC, dalej masz takie same prawa dostępu jak dla programowania niskonapięciowego (np. zablokowany interfejs szeregowy).
3. Procesor możesz taktować na dwa sposoby, wewnętrznym generatorem RC albo sygnałem z zewnątrz (nie pamiętam na który pin XTAL należy podać sygnał, ale na pewno jeden z nich). Zależnie od ustawionych fusów, uC włącza odpowiedni obwód generatora. Zawsze jest opcja olania wybranego sposobu taktowania i podania na siłę przebiegu taktującego z zewnątrz, uC musi ruszyć i dać się przeprogramować. To samo robią programatory, zawsze załączany jest zewnętrzny sygnał taktujący dalej i jakoś to leci.
4. Nie przerabiałem uC z PLL i fusami (w prockach xMega jest PLL ale nie ma fusów). Każdy uC ma możliwość skonfigurowania go do pracy z zewnętrznym źródłem zegara, zerknij w dataszit, sekcja System Clock and Clock Options -> External Clock.
Wyjątkiem są tylko stare uC np. 90s2313 i wszystkie z rodziny '51/'52 gdzie zmiany dokonuje się sprzętowo, podłączając kwarc albo generator do wybranego pinu.
By skorzystać z zewnętrznego źródła taktowania, należy sygnał zegarowy podłączyć pod odpowiedni pin XTAL (parz punkt 3) i przestawić fusy tak by było taktowanie zewnętrzne, nie wbudowany RC. Formalnie należy ustawić taktowanie na sygnał zewnętrzny (External Clock), pozwoli to ograniczyć pobór prądu i generowane zakłócenia. W praktyce podanie sygnału zewnętrznego zadziała nawet przy wyborze kwarcu, rezonatora ceramicznego lub zewnętrznego obwodu RC, ale nie jest to zalecana opcja.