„Przetaktowywanie” AVR

12

W arkuszach danych AVR w sekcji Charakterystyka elektryczna zwykle znajduje się taki wykres (ten pochodzi z ATMega328):

wprowadź opis zdjęcia tutaj

Widziałem projekty, które wydają się „działać”, ale działają poza zacienioną kopertą. W szczególności widziałem konstrukcje 3,3 V (Arduino), które działają na zegarze z zewnętrznego kryształu 16 MHz. Oczywiście jest to niezgodne ze specyfikacją. Jakie są praktyczne negatywne konsekwencje wyjścia poza tę kopertę?

vicatcu
źródło
13
Jeśli uruchomisz go tylko w spec, to tylko sortof będzie działać.
Olin Lathrop,
Może wydawać się głupi, ale czy nie możesz wymienić XTal?
Hossein
Nie jest to dobry pomysł, większość szans na to, że to nie zadziała, a mimo to zyskasz bardzo niewiele, dodając poniżej 1 MIPS do procesora 20 MIPS, powyżej tego jestem w 100%, że AVR się zawiesi. Musisz zachować czasy konfiguracji i wstrzymania dla sygnałów wewnętrznych, maks. Częstotliwość. przyjmuje najgorszy scenariusz na najbardziej krytycznej ścieżce sygnału w AVR, różnice produkcyjne mogą uczynić jeden układ nieco bardziej odpornym na podkręcanie, ale bardzo mało i pamiętaj, że nawet jeśli sam rdzeń działa dobrze, nie oznacza to, że urządzenia peryferyjne będą lub że ty może powielić go na innym układzie z innej partii.
user34920
1
Aby zmienić przeznaczenie żartu: „Jeśli będą udawać, że mierzą nas w ramach specyfikacji, będziemy udawać, że pracujemy”.
nitro2k01
To może być głupie pytanie, ale myślałem, że wszystkie AVR Arduinos działały na 5v, z wyjątkiem Mini Pro-3.3v, który działa tylko na 8MHz ... czy jest szybszy model 3.3v, którego nie widziałem?
Jules

Odpowiedzi:

42

Jak uczynić życie bardziej interesującym 101:

  • Jeśli cię to nie obchodzi

    że twoje wyniki mogą czasami być błędne,
    twój system może czasami ulec awarii,
    twoje życie może być bardziej interesujące,
    że twój klon Segway tylko czasami robi twarze roślin bez wyraźnego powodu,
    że ...

    następnie z całą pewnością uruchomić część poza specyfikacją producenta

Dostajesz to, za co nie płacisz.
Jeśli masz głowę za 10 USD, kup hełm za 10 USD.

Często może działać.
Czasami może nie działać.
Może nie być oczywiste, że czasami nie działa.

  • Podział może zwykle działać
  • Zwykle może dojść do skoku.
  • Tabela może zostać poprawnie sprawdzona.
  • Wartość ADC może być poprawna.

    Albo nie

    wprowadź opis zdjęcia tutaj

Russell McMahon
źródło
4
uwielbiam tę odpowiedź lol
vicatcu
2
To jest cudowne.
Andrey Vihrov
6
W rzeczywistości, jeśli masz głowę za 10 USD, powinieneś kupić hełm o wartości 10 $ * probability_of_catastrophic_failure.
Nick Johnson,
4
Znalazłem nową tapetę
Rick_2047
4
To genialne: „Jeśli nie obchodzi cię (...), że twój klon Segwaya okazjonalnie robi rośliny na twarzy bez wyraźnego powodu”
Kamil
14

Przy tego rodzaju prędkościach większość procesorów pracuje, obliczając wszystkie sygnały, które będą potrzebne w określonym cyklu zegara, czekając na następną krawędź zegara podczas stabilizacji, blokując wszystkie te sygnały i obliczając sygnały potrzebne w następnym cyklu zegara , czekając na tę krawędź, gdy te sygnały się ustabilizują itp. Jeśli krawędź zegara nadejdzie, zanim niezbędne sygnały ustabilizują się, efekt będzie taki, że którykolwiek sygnał, który nie został ustabilizowany, może nie zostać prawidłowo zablokowany. Jeśli wystąpi to w mikrokontrolerze, efekty mogą być nieprzewidywalne - z co najmniej dwóch powodów:

  1. W wielu przypadkach szybkość wykonywania jest ograniczona czasem odpowiedzi macierzy flash, z której procesor odczytuje kod. Jeśli zbyt szybkie uruchomienie procesora powoduje, że czasami błąd jest odczytywany tu i tam, może to łatwo spowodować, że procesor wykona zupełnie inny kod niż zamierzony. W wielu programach nawet jednorazowy, jednobitowy błąd może radykalnie zmienić zachowanie; rzadko praktyczne jest przewidywanie, co może się zdarzyć w takich przypadkach. W niektórych przypadkach najlepszym rozwiązaniem jest „zbroja” niektórych części programu, aby błędne wykonanie było mało prawdopodobne. Na przykład można zostawić chronioną pamięć EEPROM, dopóki nie chce się jej napisać, a następnie użyć kodu w rodzaju:
    uint32_t eep_checksum, eep_addr, eep_data;
    
    # zdefiniować EEPROM_WRITE (adres, dane, predykat) \
      eep_checksum = 0xC0DEFACE, eep_addr = (adres), eep_data = (dane), \ 
      eep_checksum + = eep_addr + eep_data, ((predicate) || HARD_CRASH ()), \
      eep_checksum + = (0xCAFEBABE - C0DEFACE), eep_do_write ()
    
    void eep_do_write (void)
    {
      ENABLE_EEPROM_WRITE_HARDWARE ();
      if (eep_checksum! = eep_addr + eep_data + 0xCAFEBABE)
      {
        DISABLE_EEPROM_WRITE_HARDWARE ();
        HARD_CRASH ();
      }
      DO_EEPROM_WRITE ();
      DISABLE_EEPROM_WRITE_HARDWARE ();
    }  
    
    Jest bardzo mało prawdopodobne, aby procedura eeprom_write spróbowała zapisać dane, chyba że „eep_checksum = 0xC0DEFACE” zostanie wykonane przed załadowaniem adresu i danych. Po wykonaniu tego predykat zostanie sprawdzony pod kątem ważności przed dostosowaniem sumy kontrolnej do właściwej wartości i wywołaniem procedury eeprom_store.
  2. Oprócz wyraźnego ryzyka związanego z wykonywaniem niepoprawnego kodu, innym źródłem potencjalnego losowego zachowania jest metastabilność. Zwykle w każdym cyklu każdy flip-flop zatrzaskuje wysokie lub niskie. Jeśli jednak sygnał wejściowy do przerzutnika zmienia się w chwili nadejścia zegara, może on przez pewien czas generować dziwne rzeczy, które mogą dowolnie przerzucać pomiędzy wysokim i niskim, w dowolnym układzie, aż do następnego cyklu zegara; jest całkiem możliwe, że niektóre urządzenia poniżej flip-flop będą widzieć to jako „wysokie”, podczas gdy inne będą postrzegane jako „niskie”. Zasadniczo procesory polegają na wielu urządzeniach, które uzgadniają, co zamierzają zrobić. Jeśli podczas wykonywania instrukcji „zmniejszenie i rozgałęzienie, jeśli nie jest równe”, a niektóre obwody uważają, że gałąź powinna zostać przejęta, a inne nie,

Producenci określają parametry operacyjne procesorów, tak aby w ramach tych parametrów procesory działały bezproblemowo. Wypychanie rzeczy poza tę obwiednię może obniżyć niezawodność procesora do 99,9999999. To może nie brzmieć zbyt źle, ale próba zdiagnozowania procesora, który raz na minutę robi coś arbitralnie złego (liczenie 16 MHz), nie jest zabawna.

supercat
źródło
2
Warto zauważyć, że zbrojenie zapisywane w pamięci EEPROM sprawia, że ​​całkowite blokowanie urządzenia jest statystycznie mniej prawdopodobne, nie robi to wiele, aby mniej prawdopodobne było popełnienie błędnego wykonania. Niemniej jednak wydaje się, że to dobra polityka. Jestem zaskoczony, że 9 dziewiątek niezawodności ma tak wysokie prawdopodobieństwo awarii w ciągu jednej minuty przy zaledwie 16 MHz.
Kevin Vermeer
@Kevin Vermeer: ​​Często trudno jest zapewnić, aby urządzenie nigdy nie działało poza bezpiecznym regionem, biorąc pod uwagę możliwości zwisów zasilania, zdarzeń elektrostatycznych itp. Pancerz EEPROM nie jest zaprojektowany, aby zwiększyć prawdopodobieństwo błędnego wykonania - - ilustruje to, jak zminimalizować konsekwencje. Podobne techniki są często przydatne w kodzie, który obsługuje zewnętrzny sprzęt. Nie należy polegać na kodzie dla systemów krytycznych dla bezpieczeństwa, ale np. W drukarce etykiet można użyć logiki podobnej do powyższej do ochrony kontroli podawania etykiet, więc losowe wykonanie nie zniszczy 5 dolarów w magazynie etykiet.
supercat
Mówiąc
wprost
2
@vicatcu: Czy jest jakiś szczególny sposób, w jaki myślisz, że różnią się od PIC, 8x51, 68HC05, ARM itp.? A może starsze procesory, takie jak 6502 lub Z80? W nowoczesnych procesorach podkręcanie może powodować samozniszczalne przegrzanie, ale w mniejszych lub wolniejszych procesorach nie stanowi to problemu przy dowolnej prędkości, przy której urządzenie miałoby jakiekolwiek szanse na działanie.
supercat
3

Jedną z kwestii, o których jeszcze nie wspomniano, która jest mniej związana z działaniem przy prawidłowych częstotliwościach w nieprawidłowych zakresach napięcia (16 MHz przy 3,3 V), ale bardziej dotyczy pracy z nieprawidłowymi częstotliwościami przy prawidłowych zakresach napięcia (24 MHz przy 5 V), dotyczy rozpraszania ciepła.

Za każdym razem, gdy brama w chipie włącza się lub wyłącza, rozprasza ciepło. Bramka zbudowana z MOSFET-ów działa jak rezystor zmienny w okresie od włączenia do wyłączenia lub wyłączenia i włączenia. Ten rezystor oczywiście rozprasza ciepło. Im częściej się przełącza, tym krótszy jest czas pomiędzy przełączeniami, aby ciepło rozproszyło się z układu, co grozi nagromadzeniem ciepła.

Ergo, im szybciej biegniesz, tym więcej ciepła może się gromadzić. Właśnie dlatego procesory komputerowe mają na sobie duże wentylatory - przełączają się tak szybko, że nie są w stanie wystarczająco szybko wydobyć ciepła z układu, więc potrzebują pomocy.

Wybrano najwyższą prędkość znamionową chipa, aby umożliwić chipowi niezawodne rozproszenie nagromadzonego ciepła w odpowiednich warunkach pracy (tj. W temperaturze otoczenia, zwykle maksymalnie 85 ° C lub 105 ° C). Przekroczenie tej częstotliwości może spowodować przegrzanie układu.

Tak, może być możliwe uruchomienie układu szybciej niż zamierzono, jeśli zapewnisz jakąś pomoc - tj. Radiator i być może wentylator i upewnisz się, że wokół niego jest dobry przepływ powietrza. Ale oczywiście w ciepły letni dzień możesz znaleźć to, co było doskonale działającym urządzeniem, przez całą zimę nagle zaczyna robić dziwne rzeczy.

Inną rzeczą, którą należy wziąć pod uwagę, jest obniżka stawek. Sygnały zegara (i także inne sygnały) potrzebują czasu, aby wzrosnąć lub spaść do pożądanego poziomu. Jeśli wewnętrzne układy oznaczają, że sygnał zegara potrzebuje powiedzmy 15ns, aby wzrósł z LOW do HIGH, a ty próbujesz go taktować z częstotliwością, na której okres HIGH wynosi, powiedzmy 42ns (24 MHz), co pozostawia tylko 27ns ważnego zegara pozostały okres. To tylko 64% zegara to tak naprawdę sygnał zegarowy - reszta to śmieci. To samo dotyczy pinów IO. Rzeczy takie jak wyjścia zegarowe SPI będą ograniczone przez szybkość narastania pinów IO, więc jeśli przetaktujesz swój układ, aby uzyskać szybszy SPI, zauważysz, że rzeczy nie zawsze idą zgodnie z planem, ponieważ ładna fala prostokątna, której oczekujesz od wyjścia zegarowego nie jest już kwadratem.

Majenko
źródło
1

Urządzenie może nie działać przy niektórych kombinacjach napięcia / temperatury.

Leon Heller
źródło
zważywszy, że czyni pracę w pewnym napięcia / temperatury (3.3V i 25C), czy zegar po prostu działać razem zamiast granicy częstotliwości znamionowej kryształu? „może nie działać” jest strasznie niejasne ...
vicatcu
@vicatcu - „Okropnie niejasne jest DOKŁADNIE * specyfikacja, którą otrzymujesz.„ Może nie działać ”to ** DOKŁADNIE specyfikacja na granicach zadziała. Więc możesz być pewien, że istnieje pewien margines bezpieczeństwa. Jak duży? Zrób dzień ...
Russell McMahon
haha tak, nigdy nie projektowałem ze specyfikacji, prosiłem o to, by było trochę prowokujące
vicatcu
@vicatcu: Czasami wydaje się prawie niemożliwe, aby uniknąć projektowania przynajmniej nominalnie poza specyfikacją. Na przykład, jeśli dwa urządzenia określają VOut (Max) i VIn (Max) zarówno jako VDD, a jedno łączy wyjście każdego z wejść drugiego, nawet jeśli są podłączone do tej samej szyny, ja nie zobacz, jak można zagwarantować, że chwilowe chwilowe natężenie prądu w jednym urządzeniu nie może spowodować, że jego VDD spadnie nawet mikrowolt poniżej napięcia wyjściowego z drugiego urządzenia. Jeśli tak, może to przekroczyć określony warunek działania, że ​​wejście nie może przekroczyć VDD.
supercat
1
@vicatcu: Oczywiście myślę, że większość inżynierów uznałaby, że sposób, w jaki urządzenia są zbudowane fizycznie, prawie gwarantowałby istnienie tolerancji co najmniej kilku miliwoltów na takie rzeczy, ale w wielu arkuszach danych nie podano żadnej. Nie pewny dlaczego. Rozumiem, że producent nie chce określać niczego zbliżonego do tego, co dzisiejsze części zaakceptują bez problemu, ale określenie czegoś wydawałoby się ładniejsze niż nieokreślenie niczego.
supercat