Podczas projektowania systemów o krytycznym znaczeniu dla bezpieczeństwa kluczowe znaczenie dla doboru odpowiednich procesów i technik wykrywania oraz unikania niebezpiecznych usterek mają międzynarodowe standardy bezpieczeństwa. Normy sprawiają, że nie będziemy wyszukiwali i rozwiązywali problemów, które nasi koledzy – inżynierowie bezpieczeństwa, już namierzyli, a dodatkowo opracowali metody zapobiegawcze. Jednak należy mieć świadomość pewnego niebezpieczeństwa związanego z normami. Polega ono na założeniu, że mamy szczegółową wiedzę na temat zastosowanego sprzętu, na przykład mikrokontrolera, co może spowodować, że mniej doświadczeni inżynierowie wdrożą niebezpieczne projekty.
Norma Międzynarodowej Komisji Elektrotechnicznej IEC 60730 zaleca stosowanie testu szachownicowego do wykrywania usterek stałych w pamięciach o zmiennej zawartości dla oprogramowania klasy B. Zadanie to może okazać się większym wyzwaniem, niż mogłoby się wydawać, ze względu na nieudokumentowaną różnicę między logiczną, a fizyczną strukturą pamięci SRAM. Niezbędne informacje zazwyczaj nie są dostępne w arkuszu danych standardowych mikrokontrolerów. Na szczęście istnieją algorytmy testowania pamięci, na które nie ma wpływu różnica między logicznym, a fizycznym układem pamięci SRAM. W zaprezentowanym artykule opisano, jak prawidłowo wdrożyć testy pamięci, takie jak test szachownicowy.
Dlaczego należy testować pamięć SRAM
Pamięci SRAM są oczywiście testowane na etapie produkcji układu scalonego, a produkty z wadami nie są wysyłane do konsumentów. Mimo to przypadkowe defekty sprzętowe mogą i będą pojawiać się w okresie eksploatacji układu scalonego, co jest jednym z powodów, dla których wymagane jest testowanie sprzętu w mikrokontrolerze w czasie działania, w aplikacjach o krytycznym znaczeniu dla bezpieczeństwa.
Szachownicowy test pamięci
Normy bezpieczeństwa, takie jak IEC 60730 (H.2.19.6.1), sugerują, że algorytm szachownicowy może być używany do identyfikowania pewnych defektów (usterek stałych) w pamięci SRAM w zastosowaniach, które muszą być zgodne z poziomem bezpieczeństwa klasy B. Test szachownicowy jest często wybierany, ponieważ obejmuje najbardziej prawdopodobne błędy i jest stosunkowo szybki, co minimalizuje wpływ na wydajność samej aplikacji. Oprócz usterek stałych, w przypadku których bit jest trwale zablokowany w stanie wysokim lub niskim, algorytm szachownicowy może również wykrywać defekty, w których sąsiednie bity wpływają na siebie nawzajem.
Pamięć SRAM logicznie składa się z pewnej liczby bitów zorganizowanych w słowa. Słowa mają zwykle szerokość 8, 16 lub 32 bitów, ale mogą być również dłuższe. Fizycznie bity są zorganizowane w tablice, w których każdy bit ma zwykle osiem sąsiadujących bitów (rysunek 1). Fizyczna wada danego bitu może być taka, że utknął on w stanie wysokim lub niskim (błąd stały), lub wada może dotyczyć dwóch bitów, gdzie komórka agresor (agressor cell) zaznaczona na fioletowo na rysunku 1, może wpływać na komórkę ofiarę (victim cell) zaznaczoną na żółto na rysunku 1. Scenariusz agresor-ofiara jest powszechnie określany jako błąd sprzężenia. Statystycznie widać, że błąd DC jest bardziej prawdopodobny, ale nadal istotne jest wykrycie najbardziej prawdopodobnych błędów sprzężenia.
Jeśli usterka dotyczy pojedynczego bitu, tak że bit utknął w stanie wysokim lub niskim, można to wykryć, wpisując wartość jeden i zweryfikować przez odczytanie, a następnie wpisując wartość zero i zweryfikować przez ponowny odczyt – tak jak pokazano na rysunku 1. Jednak jeśli defekt jest błędem sprzężenia między dwoma sąsiednimi bitami, na przykład kolumnami bitów 9 i 10 w rzędzie 2, to takie wzorce, jak same jedynki lub same zera, nie ujawnią błędu sprzężenia, ponieważ ogniwa mają tę samą wartość podczas testu. Do wykrycia błędu sprzężenia, potrzebny jest wzorzec, w którym sąsiednie komórki (po bokach, powyżej i poniżej) mają przeciwne wartości binarne. Rysunek 1 (prawy dolny) pokazuje, że komórka w kolumnie 10 wymusiła nieprawidłowy stan komórki w kolumnie 9. Błąd sprzężenia został ujawniony, ponieważ bit 9 nie zawiera oczekiwanej wartości – zero.
Fizyczna a logiczna struktura pamięci SRAM
Aby algorytm szachownicowy działał, wymagana jest wiedza, które bity są sąsiadującymi bitami. Okazuje się, że jest to problem, ponieważ arkusze danych zwykle opisują tylko logiczny układ pamięci SRAM, a nie sposób, w jaki pamięć jest fizycznie zorganizowana.
Aby zrozumieć fizyczną strukturę pamięci SRAM, należy rozróżnić pamięci zorientowane bitowo (BOM), w których można uzyskać dostęp do jednego bitu w danym momencie, oraz pamięci zorientowane na słowa (WOM), w których odczytywane i zapisywane jest n-bitowe słowo. Podczas gdy większość rzeczywistych pamięci jest implementowana jako WOM, klasyczne algorytmy testowania pamięci w literaturze naukowej często zakładają implementacje BOM.
W przypadku pamięci WOM istnieją trzy główne kategorie fizycznej organizacji bitów składających się na słowo: sąsiadująca, przeplatana i organizacja na podtablice. Podczas gdy układ logiczny umieszcza każde słowo pod poprzednim słowem w tej samej kolumnie (podobnie jak w przestrzeni adresowej), organizacja sąsiadująca pamięci umieszcza każde słowo w tym samym rzędzie obok siebie, jak pokazano na rysunku 2. Organizacja z przeplotem oddziela każdy bit słowa do różnych kolumn i wierszy tablicy SRAM. Wreszcie organizacja na podtablice umieszcza każdy bit słowa w różnych fizycznie oddzielnych blokach SRAM. Rzeczywistość jest taka, że nie znamy fizycznego układu, który jest wymagany do poprawnego wdrożenia testu szachownicowego.
Właściwości i wady testu szachownicowego
Przypuszczalnie prostym podejściem do implementacji algorytmu szachownicowego jest naprzemienne zapisywanie wartości 0xAA (zakładając 8-bitowe słowa danych) pod pierwszym adresem i 0x55 w następnym adresie, aż wszystkie testowane adresy zostaną wypełnione wzorem szachownicy składającym się z jedynek i zer. Wzór jest następnie weryfikowany w celu wykrycia wszelkich błędów stałych lub sprzężeń między sąsiednimi komórkami. Proces jest następnie powtarzany przy użyciu odwrotnego wzoru. Jak już wspomniano, istnieje pewien haczyk: wzór szachownicy w logicznym układzie pamięci może nie być wzorem szachownicy w układzie fizycznym, jak pokazano na rysunku 3.
Zrekompensowanie różnicy między układem logicznym a fizycznym może wydawać się oczywiste, ale niezbędne informacje rzadko są dostępne w arkuszu danych układu. Co należy zrobić? Zaakceptować mniejszą skuteczność, w końcu diagnostyka nadal będzie obejmować błędy stałe i niektóre błędy sprzężenia między sąsiednimi bitami? Poprosić o szczegółowe dane układu od producenta układów scalonych i wykonać niestandardową implementację testu szachownicy dla każdego urządzenia? Wybrać inny algorytm?
Teraz, gdy jesteś świadomy potencjalnych wad testu szachownicy, możesz podjąć świadomą decyzję.
Alternatywne algorytmy testowania pamięci SRAM w czasie wykonywania
Techniki testowania pamięci zaproponowane w normie IEC 60730 dla poziomu bezpieczeństwa klasy C mają większy zasięg wykrywania błędów, ale są to algorytmy należące do grupy algorytmów testowania produkcyjnego – ich uruchomienie zajmuje więcej czasu, wykrywają również rzadsze typy błędów, ale zazwyczaj niszczą dane przechowywane w pamięci SRAM, ponieważ działają na całej SRAM, a nie na blokach. Ogólnie rzecz biorąc, jest to kłopotliwe rozwiązanie. Dlatego proponujemy rozważenie hybrydowych algorytmów March zaadaptowanych z produkcyjnego algorytmu testowego March.
Te algorytmy są dostępne w implementacjach zoptymalizowanych pod kątem WOM i zapewniają wysokie pokrycie testów. Co więcej, te hybrydowe algorytmy March można zaimplementować tak, aby działały na mniejszych, nakładających się sekcjach pamięci SRAM, aby uniknąć jednoczesnego wymazania wszystkich danych z pamięci, co oznacza, że można uniknąć ponownego uruchomienia systemu wbudowanego. Wadą algorytmów March jest to, że są one bardziej wymagające obliczeniowo, niż tradycyjne algorytmy szachownicowe. Jednak jest to niedogodność, którą można zaakceptować w systemach o krytycznym znaczeniu dla bezpieczeństwa.
Jeśli rozważamy zamianę tradycyjnego testu szachownicowego na test typu March, to można znaleźć taką implementację u niektórych dostawców mikrokontrolerów. Microchip jest jedną z firm, które oferują zoptymalizowaną pod kątem wydajności implementację algorytmu March C jako część swoich bibliotek diagnostycznych oprogramowania. Implementacja Microchip obsługuje testowanie całej pamięci SRAM, zwykle wykonywane tylko podczas uruchamiania, aby uzyskać maksymalne pokrycie testowe, a także testowanie mniejszych bloków pamięci, co ma na celu zmniejszenie wpływu na aplikację w czasie rzeczywistym. Implementację można pobrać bezpłatnie ze strony internetowej firmy Microchip jako część biblioteki IEC 60730 Class B. Implementacja jest przeznaczona dla mikrokontrolerów PIC i AVR, ale można ją przenieść na inne mikrokontrolery Microchip.
Więcej informacji na temat testów IEC 60730 klasy B można znaleźć na stronie: https://www.microchip.com/PIC-AVR-IEC60730.
Inżynier ds. oprogramowania bezpieczeństwa w grupie aplikacji PIC i AVR, odpowiedzialny za opracowywanie produktów i oprogramowania dla systemów o krytycznym znaczeniu dla bezpieczeństwa zgodnych z normami ISO 26262 i IEC 60730.
LinkedIn: https://tiny.pl/cgglz
Kierownik ds. technicznego rozwoju biznesu w zakresie systemów krytycznych dla bezpieczeństwa, odpowiedzialny za strategię rynkową i projekty ukierunkowane na ISO 26262, IEC 61508 i IEC 60730 z mikrokontrolerami PIC i AVR firmy Microchip.
LinkedIn: https://tiny.pl/cgg4q