czy [ECC] oznacza, że nie możesz wykorzystać 10% dostępnego miejsca na karcie?
Nie. ECC nie wykorzystuje żadnej dostępnej przestrzeni danych użytkownika na karcie. Zamiast tego ECC jest przechowywany w oddzielnych „obszarach zapasowych” obok danych użytkownika.
obszar zapasowy
Wiele układów pamięci flash jest zaprojektowanych w taki sposób, że dla każdego 512-bajtowego sektora przeznaczonego na dane użytkownika istnieje dodatkowy 16-bajtowy „wolny obszar”. ( Jim Cook. „Pamięć flash 101: wprowadzenie do pamięci flash NAND”.)
Te wolne obszary, zwane także „obszarami poza pasmem” (obszary OOB), są przeznaczone do użycia z kodami ECC. (Technologia Eureka. „NAND Flash FAQ”. „Co to jest zapasowa kolumna w pamięci flash NAND?”). ( Czy pojemność chipa flash jest naprawdę ograniczona do potęgi 2?)
Teoretycznie można zaprogramować kontroler pamięci flash bezpośrednio podłączony do tych układów pamięci flash, aby używał tych bitów „wolnego obszaru” na cokolwiek zechce.
Kilka systemów plików flash bezpośrednio podłączonych do tych układów pamięci flash wykorzystuje ten „wolny obszar” w wyrafinowany sposób do przechowywania danych systemu plików i bardziej złożonych kodów korekcji błędów, zamiast danych Hamminga ECC - - identyfikatory obiektów, dane dotyczące zużycia itp. ( Wikipedia: YAFFS). (W porównaniu z prostym systemem „Hamming” opisanym poniżej, takie systemy plików mają inne podejście do wykrywania i radzenia sobie z błędami bitowymi - Kody Reeda-Solomona, systemy wieloukładowe typu RAID itp.).
S. Karty D / MMC mają wewnątrz mały kontroler pamięci flash, pomiędzy pinami interfejsu SD / MMC a rzeczywistymi układami pamięci flash. (Patrz a b c dla zdjęć wewnętrznych kart SD, pokazujących mały układ kontrolera i znacznie większy układ pamięci flash.).
Zapis ECC
jak to się stało, że mogą mieć tak wysoką prędkość
Kiedy twój komputer lub mikrokontroler wysyła polecenie „zapisz 512-bajtowy sektor” do karty SD / MMC, sektor jest kasowany, a następnie pisemny.
Nie ma tu miejsca na omawianie rzeczy, które producenci robią, aby przyspieszyć flashowanie, więc będę się trzymać wyjaśniania, dlaczego karty ECC nie są zauważalnie wolniejsze niż (hipotetyczna) karta bez ECC.
Rozumiem, że wszystko Sterowniki SD / MMC powinny przynajmniej zapisywać kody Hamminga ECC w wolnym obszarze dla każdego bloku, chyba że używają bardziej wyrafinowanego systemu korekcji błędów. ( "ST AN1823: Error Correction Code in Pamięci NAND Flash ") (Czy jest jakiś sposób, aby stwierdzić, czy karta naprawdę to robiła, czy nie?)
Układ pamięci flash jest tak zaprojektowany, aby cała strona (dane użytkownika + wolny obszar ) jest kasowane od razu, co zajęłoby tyle samo czasu na chipie flash bez ECC, więc ECC nie spowalnia kasowania.
Sterownik oblicza dane ECC i ślepo (* ) zapisuje dane użytkownika i dane ECC do pamięci flash. Kody Hamminga mogą być obliczane „z prędkością okablowania”, gdy dane użytkownika przechodzą przez interfejs SD / MMC lub gdy dane użytkownika są przesyłane na kartę pamięci flash, więc obliczenia ECC nie spowalniają zapisu.
Sterownik musi zapisać „dodatkowe” 16 bajtów danych dla każdego sektora 512-bajtowego, ale nie jest to zauważalnie wolniejsze niż hipotetyczny układ flash bez ECC: 1/32 ~ = 3% wolniej.
(*) Kontrolery kart SD nie zawracają sobie głowy odczytywaniem danych podczas zapisu, aby sprawdzić, czy zadziałało. Problemy wykrywają dopiero znacznie później, podczas obsługi polecenia „odczytu”. wzięcie idealnie dobrych kart 1 GB i przeprogramowanie kontrolera tak, aby sądził, że faktycznie jest do niego podłączone 4 GB pamięci flash. Wynikowa fałszywa / podrobiona / sfałszowana karta wydaje się działać dobrze do odczytu i zapisu, dopóki pierwszy 1 GB nie zostanie zapełniony; nawet wydaje się działać dobrze podczas (ślepego) zapisu do reszty „4 GB”, ale potem rzeczy idą strasznie źle, próbując odczytać dane z powrotem z karty.
Czytanie ESK
znaczna ilość czasu na odzyskanie błędów ... ponieważ musi przetworzyć oryginalne dane jako całość
Tak, kody Hamminga muszą przetworzyć „cały blok ", ale w przypadku kart SD" cały blok "to tylko 512 + 16 bajtów.
Kiedy twój komputer lub mikrokontroler wysyła" odczyt 512-bajtowego bloku "do karty SD / MMC, SD / MMC kontroler karty odczytuje pełne 512 bajtów użytkownika + 16 bajtów ECC, koryguje błędy (jeśli takie były) i wysyła poprawione 512 bajtów danych użytkownika do komputera lub mikrokontrolera (lub wysyła kod błędu, jeśli było tak dużo błędów dane użytkownika lub dane ECC lub oba te dane, których nie można naprawić).
Ponieważ kontroler na karcie może odczytać 512 + 16 bajtów z pamięci flash i wykonać korektę Hamminga znacznie szybciej niż przesącza kody odpowiedzi i danych przez interfejs karty, nie jest to zauważalnie wolniejsze niż (hipotetyczna) karta bez ECC.
O ile wiem, karty SD / MMC nie używają korekcji błędów Reeda-Solomona - ale japrzypuśćmy, że mogliby to zrobić wewnętrznie i nie ma sposobu, aby to stwierdzić z zewnątrz.