Portal jeszcze nie istnieje, zostanie włączony wkrótce.

Pozdrawiam
pcdeb.pl

Programator pamięci Flash NAND Lite! TSOP48

Opisy i schematy programatorów.

pxdc2
czasem tu zaglądam
Posty: 14
Rejestracja: 7 paź 2016, o 08:58

Re: Programator pamięci Flash NAND Lite! TSOP48

Post autor: pxdc2 » 15 cze 2017, o 20:14

Całe cztery dni spędziłem nad tym, aby w końcu rozpracować BCH. Ale udało się.
Problem wynikał z prawidłowego wyliczenia funkcji Galois Field.

GF(2^m)

gdzie:
m = 13 dla bloku 512 bajtów
m = 14 dla bloku 1024 bajty.

Zaś w dokumentacji Linux'a znajdziemy takie primitive polynomials dla m= 5 .. 15:

Kod:

/* default primitive polynomials */
static const unsigned int prim_poly_tab[] = {
0x25, 0x43, 0x83, 0x11d, 0x211, 0x409, 0x805, 0x1053, 0x201b, 0x402b, 0x8003}


Gdzie algorytm dla m=13 działał prawidłowo, natomiast dla m=14 "się wysypywał". Okazało się, że bardzo istotne jest jaki primitive polynomials się zastosuje i jeśli nie będzie prawidłowy to całość liczenia jest bezowocna.

Z ciekawości powiem jeszcze, że np. Atmel (Link) w procesorach SAM9G15/G25/G35/X25/X35 posiada sprzętową obsługę BCH z funkcją GF(2^13) oraz GF(2^14) jednakże przy m=14 stosuje odmienny primimitive polynomials 0x4443.

Wyznaczanie bitów BCH jest konieczne by wprowadzić zmiany w obrazie pamięci NAND. Na chwilę obecną już wiem gdzie jest bitmapa z uszkodzonymi blokami pamieci, gdzie są partycje, jak są ułożone oraz co najważniejsze gdzie wpisać wartości, aby uwzględnić uszkodzone bloki w nowej pamięci.
Zostaje tylko zebrać to w jedną całość i dołożyć jako funkcję do programatora NANDLite.

Oraz oczywiście przetestować finalnie, czy wgrany wsad będzie działał na telewizorze, gdyż w sumie o to nam chodzi.

Dla ciekawości jeszcze napiszę:

Obliczenie funkcji GF(2^14) trwa u mnie ok. 88 sekund.

Całe szczęście że tą funkcję liczy się tylko jeden raz.


pxdc2
czasem tu zaglądam
Posty: 14
Rejestracja: 7 paź 2016, o 08:58

Re: Programator pamięci Flash NAND Lite! TSOP48

Post autor: pxdc2 » 15 cze 2017, o 20:15

Witam

Dziś wykonałem algorytm sprawdzający poprawność bloków danych we wsadzie pobranym z pamięci K9GAG08U0E.

Na odczytane 65 bloków pamięci, przypomnę każdy składa się z 128 stron, zaś każda strona dzieli się na 8 fragmentów, statystyki są następujące:


STAT: OK=42220 COR=32 FF=23704 00=0 ERR=0 ERR24=604

gdzie:

OK - stwierdzono prawidłowy fragment, wyliczone BCH się zgadza z tą która jest zawarta w pamięci
COR - suma była błędna, ale bity zostały skorygowane, czyli odtworzone
FF - wszystkie bajty zawierają 0xFF
00 - wszystkie bajty zawierają 0x00
ERR - próba odtworzenia bitów nie powiodła się
ERR24 - liczba bitów błędnych jest większa niż 24

Dodano po 10 [godziny] 55 [minuty]:

Witam

Dziś jest aktualizacja statystyk:
STAT: OK=123574 COR=1038 FF=506936 00=2048 ERR=0 ERR24=35076

00 - mamy 2048, co oznacza dwa pełne bloki uszkodzone.

Proszę spojrzeć na dużą liczbę ERR24, o to przykład:

Kod:

BCH: T:1 L:0 B:653 P:30 Offset:0 Count bit:166 ERR BIT>24
BCH: T:1 L:0 B:653 P:30 Offset:1 Count bit:162 ERR BIT>24
BCH: T:1 L:0 B:653 P:30 Offset:2 Count bit:158 ERR BIT>24
BCH: T:1 L:0 B:653 P:30 Offset:3 Count bit:175 ERR BIT>24
BCH: T:1 L:0 B:653 P:30 Offset:4 Count bit:169 ERR BIT>24
BCH: T:1 L:0 B:653 P:30 Offset:5 Count bit:159 ERR BIT>24
BCH: T:1 L:0 B:653 P:30 Offset:6 Count bit:176 ERR BIT>24
BCH: T:1 L:0 B:653 P:30 Offset:7 Count bit:160 ERR BIT>24
BCH: T:1 L:0 B:653 P:32 Offset:0 Count bit:182 ERR BIT>24
BCH: T:1 L:0 B:653 P:32 Offset:1 Count bit:150 ERR BIT>24
BCH: T:1 L:0 B:653 P:32 Offset:2 Count bit:174 ERR BIT>24
BCH: T:1 L:0 B:653 P:32 Offset:3 Count bit:165 ERR BIT>24
BCH: T:1 L:0 B:653 P:32 Offset:4 Count bit:162 ERR BIT>24
BCH: T:1 L:0 B:653 P:32 Offset:5 Count bit:172 ERR BIT>24
BCH: T:1 L:0 B:653 P:32 Offset:6 Count bit:175 ERR BIT>24
BCH: T:1 L:0 B:653 P:32 Offset:7 Count bit:159 ERR BIT>24
BCH: T:1 L:0 B:653 P:33 Offset:7 Count bit:1 OK
BCH: T:1 L:0 B:653 P:34 Offset:0 Count bit:163 ERR BIT>24
BCH: T:1 L:0 B:653 P:34 Offset:1 Count bit:151 ERR BIT>24
BCH: T:1 L:0 B:653 P:34 Offset:2 Count bit:182 ERR BIT>24
BCH: T:1 L:0 B:653 P:34 Offset:3 Count bit:166 ERR BIT>24
BCH: T:1 L:0 B:653 P:34 Offset:4 Count bit:158 ERR BIT>24
BCH: T:1 L:0 B:653 P:34 Offset:5 Count bit:166 ERR BIT>24
BCH: T:1 L:0 B:653 P:34 Offset:6 Count bit:172 ERR BIT>24
BCH: T:1 L:0 B:653 P:34 Offset:7 Count bit:169 ERR BIT>24
BCH: T:1 L:0 B:653 P:35 Offset:5 Count bit:177 ERR BIT>24
BCH: T:1 L:0 B:653 P:36 Offset:0 Count bit:153 ERR BIT>24
BCH: T:1 L:0 B:653 P:36 Offset:1 Count bit:167 ERR BIT>24
BCH: T:1 L:0 B:653 P:36 Offset:2 Count bit:188 ERR BIT>24
BCH: T:1 L:0 B:653 P:36 Offset:3 Count bit:179 ERR BIT>24
BCH: T:1 L:0 B:653 P:36 Offset:4 Count bit:172 ERR BIT>24
BCH: T:1 L:0 B:653 P:36 Offset:5 Count bit:178 ERR BIT>24
BCH: T:1 L:0 B:653 P:36 Offset:6 Count bit:165 ERR BIT>24
BCH: T:1 L:0 B:653 P:36 Offset:7 Count bit:172 ERR BIT>24



Bity mocno się różniące wskazują, że dane znajdujące się w tym fragmencie zostały porzucone i zapisane gdzie indziej. Zgodnie ze specyfiką Wear Leveling.

Nie znajduję jeszcze pozycji gdzie zapisana jest informacja nt. które aktualnie fragmenty są używane - czyli są istotne.

Dodano po 9 [godziny] 15 [minuty]:

W dniu dzisiejszym wykonałem statystykę pewnego wsadu do K9GAG08U0E oznaczonego jako OK o nazwie: GQ5X_K9GAG08U0E_D5500_OK.bin.
Przez drobny błąd w programie zostało wyliczonych tylko 2064 bloki, zamiast 2074, niemniej jednak można wysnuć następujące wnioski:


STAT Block:2064 OK=768953 COR=13780 FF=1104967 00=24576 ERR=0 ERR24=201260

A poniżej statystyka ilości fragmentów z różniącymi się bitami (0- oznacza, że bity się nie różniły):
STAT: 0=768953
STAT: 1=13125
STAT: 2=632
STAT: 3=22
STAT: 4=1

Wniosek jest taki, że teoretycznie sprawna pamięć, posiadała w sobie 13780 fragmentów z nieprawidłowymi bitami, ale dało się je skorygować. Najwięcej było 4 bity nieprawidłowe w pojedynczym fragmencie.

Ale bardziej dziwne jest to, że są fragmenty które nie posiadają prawidłowości bitów parzystości i jest ich sporo, bo aż 9,5% całej pojemności. Jeśli biorąc statystycznie, to ilość błędnych bitów parzystości utrzymuje się w zakresie ok. 150-180 bitów.

Na chwilę obecną nie jestem wstanie wytłumaczyć dlaczego tak się dzieje i gdzie tu logika. Nawet jakbym uznał te dane jako nieistotne, tzn. zapisane wcześniej, ale już nieaktualne, bo pojawiła się nowa wersja danych zapisanych w innym obszarze pamięci uwzględniając Wear Leveling, to nadal nie mogę zrozumieć, czemu bity parzystości się nie zgadzają. Tymbardziej, że pamięć ta ma parametr NOP (Number of programming) wynosi 1.

W załączeniu cały plik z procesu analizy wsadu.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.


pxdc2
czasem tu zaglądam
Posty: 14
Rejestracja: 7 paź 2016, o 08:58

Re: Programator pamięci Flash NAND Lite! TSOP48

Post autor: pxdc2 » 20 sie 2017, o 15:07

Jest nowa wersja aplikacji: 1.0.1014.79.

http://software.progelo.pl/NANDLite/publish.htm

A w nowej wersji długo oczekiwana funkcjonalność programowania pamięci K9GAG08U0E stosowanych w telewizorach SAMSUNG model D5500.
Ponoć D5700 również.

Aby to wykonać należy:

1. Uruchomić aplikację NAND Lite!
2. Połączyć z programatorem
3. Wykryć układ, wskazać właściwy z listy -> K9GAG08U0E
4. Przejść do zakładki Transfer
5. Skasować pamięć
6. Nacisnąć przycisk Prepare file D5500
7. Wskazać plik źródłowy z "dobrym" wsadem do telewizora
8. Wskazać plik do którego ma zostać zapisany "nowy" wsad
9. Zaczekać na zakończenie pracy przycisku funkcyjnego (ok. 2-5 minut)
10. Kliknąć Zapisz do pamięci i wskazać wsad do zapisu
11. Zaprogramować
12. Opcjonalnie zweryfikować, aczkolwiek jest to pamięć MLC zatem przekłamania bitów to rzecz normalna
12. Sprawdzić czy działa pamięć w telewizorze

Zrzut ekranu z kasowania pamięci:
Obrazek

Zrzut ekranu z przygotowywania nowego wsadu uwzględniającego uszkodzone bloki nowej pamięci:
Widać w nim jeden blok uszkodzony zaznaczony w tablicy BBT.
Obrazek

Oraz LOG aplikacji:

Kod: Zaznacz cały

Rozpoczęto przytowanie pliku do zapisu
Ustawiam parametry kodera BCH
Generuję tablicę BCH
Obliczam GF
Postęp GF:530
Postęp GF:659
Postęp GF:752
Postęp GF:822
Postęp GF:875
Postęp GF:921
Postęp GF:960
Postęp GF:995
Postęp GF:1026
Postęp GF:1054
Postęp GF:1081
Postęp GF:1105
Postęp GF:1125
Postęp GF:1140
Postęp GF:1154
Postęp GF:1167
Postęp GF:1178
Zakończono obliczanie GF
Wykonuję kopię pliku
Szukam tablicy partycji
Znaleziono tablicę partycji. Blok:2046
Liczba partycji:5
1. Start block:0 Length:214
2. Start block:214 Length:256
3. Start block:470 Length:214
4. Start block:684 Length:1040
5. Start block:1724 Length:200
Zakończono szukanie tablicy partycji
Szukam tablicy uszkodzonych bloków
Znaleziono tablicę uszkodzonych bloków. Blok:2045
Liczba uszkodzonych bloków w tablicy:1
1. Block:1131 Replace to:2043
Zakończono szukanie tablicy uszkodzonych bloków
Koryguję bloki danych
Move block. From: 2043 To: 1131
Zakończono korygowanie bloków danych
Aktualizuję tablicę uszkodzonych bloków
Zakończono aktualizację tablicy uszkodzonych bloków
Tworze tablice uszkodzonych blokow
Uszkodzony blok: 411
Uszkodzony blok: 1172
Uszkodzony blok: 2040
Uszkodzony blok: 2073
Move block. From: 411 To: 2043
Move block. From: 1172 To: 2042
Move block. From: 2040 To: 2041
Zakończono tworzenie tablicy uszkodzonych blokow
Aktualizuję tablicę uszkodzonych bloków
Zakończono aktualizację tablicy uszkodzonych bloków
Plik gotowy do zaprogramowania pamięci:
M:\tmp\15_K9GAG08U0E-SCB0_20170818_170742.bin 
Na podstawie weryfikacji(do wglądu w pliku weryfikacja.txt) można stwierdzić, że pamięć została prawidłowo zaprogramowana i zweryfikowana. Występujące różnice max. 2 bity mieszczą się w granicach normy, gdzie norma tutaj to conajmniej 24 bity.

Jest to pierwsza wersja tej funkcjonalności, zatem przepraszam z góry na natłok informacji. W miarę upływu czasu uporządkuję chaos.

Tymczasem zapraszam do testowania i sprawdzania, czy to rzeczywiście działa.

Proszę również o wysyłanie do mnie wsadów, ponieważ krążą w sieci generalnie dwie wersje, pierwsza z jedną tablicą BBT, oraz druga z dwiema tablicami BBT.
Wersję z dwiema tablicami BBT miałem tylko jedną i to w dodatku w mojej ocenie chyba błędną, ponieważ nie zgadzał mi się logiczno-strukturalnie.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.


pxdc2
czasem tu zaglądam
Posty: 14
Rejestracja: 7 paź 2016, o 08:58

Re: Programator pamięci Flash NAND Lite! TSOP48

Post autor: pxdc2 » 26 sie 2017, o 15:59

Nowa wersja aplikacji: 1.0b1014.84

W nowej wersji:
- dodano dużą ilość sygnatur nowych układów
- poprawiono algorytm programowania K9GAG08U0E(D5500) do przetestowania
- dodano anonimową wysyłkę danych statystycznych o użytkowaniu aplikacji, przedewszystkim wysyłanie LOGu z przeprowadzanych funkcji Odczyt/Zapis/Kasowanie

Dołączam również wersję offline
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.


pxdc2
czasem tu zaglądam
Posty: 14
Rejestracja: 7 paź 2016, o 08:58

Re: Programator pamięci Flash NAND Lite! TSOP48

Post autor: pxdc2 » 5 wrz 2017, o 09:16

Witam

Jest pierwszy sukces!

Dzięki serdecznej uprzejmości serwisanta który wykonał dla mnie szereg testów najnowszego oprogramowania w wersji 1.0b1014.84 udało się uruchomić pierwszy telewizor na innej pamięci używając oprogramowania NANDLite.

Zaprogramował pamięć K9GAG08U0E uprzednio zmodyfikowanym wsadem przez NANDLite. Po zalutowaniu, telewizor ożył, wymagał jedynie resetu Smart'a, aby wszystko wróciło do normy.
Jako dawca został wykorzystany wsad odczytany z innej zaprogramowanej pamięci K9GAG08U0E zakupionej na Allegro - co ciekawe zawierała tylko jedną tablicę BBT.

Po przejrzeniu LOGów które napływają do mnie, wnioskuję, że jeszcze kilka drobnych modyfikacji będzie trzeba wykonać. Zwłaszcza gdy wsad - dawca posiada dwie tablice BBT.
Zatem zapraszam do dalszego testowania i zgłaszania mi problemów, ja zaś dokonam zmian w algorytmie na podstawie przesłanych informacji.


pxdc2
czasem tu zaglądam
Posty: 14
Rejestracja: 7 paź 2016, o 08:58

Re: Programator pamięci Flash NAND Lite! TSOP48

Post autor: pxdc2 » 6 wrz 2017, o 08:21

Witam.

W dniu wczorajszym pojawiła się nowa wersja aplikacji [85] a w niej nowy adres serwera obsługujący wysyłkę wsadów.

Również musiałem wygenerować nowy podpis cyfrowy do aplikacji z powodu upływającej ważności. W przypadku problemów z uruchomieniem NANDLite proszę odinstalować z poziomu Dodaj/Usuń Programy a następnie ponownie zainstalować.

Dziękuję wszystkim za przesłane wsady. Jako że temat z pamięciami D5500 jest prawie rozwiązany (obecnie wymaga dalszych testów oraz drobnych korekt) toteż zachęcam do składania propozycji jakim następnym wsadem mam się zająć.

W tym tygodniu dołożę graficzną mapę bloków która będzie pokazywać puste bloki, uszkodzone, dobre, zajęte. Oraz jednocześnie generowanie pliku MAP do odczytanego wsadu.

Zachęcam również mocno do wsparcia inicjatywy związanej z pamięciami NAND. Temat mocno mnie zainspirował, jest ciekawy i nie tylko związany z telewizorami. Dziękuję za kontakt telefoniczny, emailowy. Dziękuję również za użytkowanie NANDLite. Wsady można również wysyłać nie mając fizycznego programatora NANDLite korzystając z samej aplikacji w zakładce wsady.
Mam już długą listę propozycji co zrobić aby programator był jeszcze lepszy, użyteczny i pomocny.

Za każde wsparcie będę ogromnie wdzięczny.


pxdc2
czasem tu zaglądam
Posty: 14
Rejestracja: 7 paź 2016, o 08:58

Re: Programator pamięci Flash NAND Lite! TSOP48

Post autor: pxdc2 » 4 paź 2017, o 11:45

Witam

Przy kasowaniu pamięci K9GAG08U0E proszę zwrócić uwagę na konkretne numery bloków uszkodzonych.

Blok 2073 w każdej pamięci jest uszkodzony i tym blokiem nie należy się przejmować.

Zaś jeśli chociaż jeden blok z zakresu 2044-2046 jest uszkodzony, wówczas algorytm Prepare file D5500 obecnie nie radzi sobie z omijaniem uszkodzonych bloków, dlatego też nie ma sensu zapisywać tej pamięci.

W przypadku zaś weryfikacji zapisu pojawiające się błędy weryfikacji typu Count bit 1 oznaczają, że pamięć jest prawidłowo zapisana i zweryfikowana. Ilość błędnych bitów może wynosić dla tej pamięci nawet 24 a nadal będzie wszystko w porządku za sprawą dodatkowych bitów korekcyjnych które znajdują się w obszarze SpareArea każdej strony pamięci.

ODPOWIEDZ

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości