Pytanie:
MicroSD z ECC
Muis
2012-07-10 13:34:12 UTC
view on stackexchange narkive permalink

Niektóre karty MicroSD (głównie Transcend) twierdzą, że mają kontroler ECC na chipie. Zastanawiałem się, jak to działa? Czy weryfikują wszystkie zapisane w nim dane i automatycznie przenoszą sektory na inne pozycje w przypadku wykrycia niezgodności?

Jeśli tak, to dlaczego mogą mieć tak wysoką prędkość (klasa 10), kiedy muszą odczytać wszystkie zapisane dane, a czasem nawet muszą je dwukrotnie zapisać?

Oddzieliłem „jak [mogą] mieć tak dużą prędkość” na osobne pytanie: [Co daje niektórym pamięciom flash wyższą prędkość niż inne pamięci flash?] (Http://electronics.stackexchange.com/questions/35446 / co-daje-jaką-pamięć-flash-a-wyższą-szybkość-ocena-niż-inna-pamięć-flash) - Mam nadzieję, że nie masz nic przeciwko.
Trzy odpowiedzi:
davidcary
2012-07-10 23:50:09 UTC
view on stackexchange narkive permalink

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.

Wierzę, że ecc karty SD zależy od producenta. Mogli użyć prostego Hamminga, Reed-Solomona lub BCH (przydatne w miarę wzrostu pojemności).
tuxfool
2012-07-10 16:01:01 UTC
view on stackexchange narkive permalink

Kontroler ECC jest zwykle wbudowany w MCU na karcie SD. Kontroler ECC służy do tworzenia kodów ECC, które są przechowywane w wolnym obszarze pamięci flash (każda strona w pamięci flash zawiera wolne miejsce, które może być wykorzystane przez MCU).

Służy również do porównywania kodów z odczytywanymi danymi (w celu korekcji i wykrywania błędów). Tak więc za każdym razem, gdy czytana jest strona, kod jest używany do poprawiania danych z tej strony (poprawione dane nie są przepisywane). Stanowi narzut, ale jeśli spojrzeć na to strona po stronie, porównanie w locie nie jest szczególnie trudne.

więc...

Napisz: HOST (dane) -> MCU (zapisuje ecc) -> FLASH (dane + ecc)

Przeczytaj: FLASH ( data + ecc) -> MCU (reads ecc) -> HOST (poprawione dane)

suha
2012-07-10 13:58:06 UTC
view on stackexchange narkive permalink

Kody kasowania pobierają zestaw symboli (\ $ k \ $) i przekształcają go w większy zestaw (\ $ n \ $ symboli) z redundantnym kodowaniem, więc \ $ n \ gt k \ $. Przechowałeś (znacznie) więcej informacji, niż byś potrzebował. W tym miejscu pojawia się redundancja. Pomyśl o tym jak o zabraniu książki, wyrywaniu stron, rób ich kopie i rozdawaj (losowe) zestawy swoim znajomym. Wszystkie fragmenty, które wychodzą z procesu, zwykle mają pewnego rodzaju kontrolę integralności (np. Kontrolę parzystości). Jeśli to przeczytasz, wybierzesz wystarczającą liczbę fragmentów, aby odzyskać symbole \ $ k \ $ i wykonać obliczenia. Jeśli sprawdzenie integralności zakończy się niepowodzeniem, zastępujesz ten zły fragment nowym / podobnym lub rekonstruujesz brakujące informacje (w zależności od użytego kodu). Dość popularnym kodem jest Kod Reeda-Solomona ( pdf), więc może to pomoże ci jako konkretny przykład.

Odpowiadając na powiązane pytania: Dane są (z natury) weryfikowane podczas czytania (a nie podczas pisania), ponieważ są tańsze. Pisanie odbywa się w różnych miejscach równolegle, więc nie ma dodatkowego opóźnienia z zewnętrznej perspektywy.

Jestem znany z Reed-Solomona, jest również używany na przykład w formacie PAR2. Jednak jedną z jego właściwości jest to, że odzyskiwanie błędów zajmuje dużo czasu, gdy masz tylko 10% bloków odzyskiwania, ponieważ konieczne jest przetworzenie oryginalnych danych jako całości, aby móc odzyskać tylko niewielką część. Czy to również oznacza, że ​​nie możesz wykorzystać 10% dostępnego miejsca na karcie?
Z pewnością będzie lepsze wprowadzenie do RS niż ten 144-stronicowy zeskanowany dokument.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...