Forum: Projekte & Code H-JTAG treiber für NAND flash mit OOB unterstüzung


von Thomas R. (tinman) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

vorgeschichte:

da ich für ein projekt die Samsung S3C2410 und/oder S3C2440 einsetzen 
werde, musste ich ein paar dev boards besorgen.

Irgendwan haben festgestellt das eine NAND flash kopie nicht einfach 
ohne weiteres wieder restored werden kann. Der grund dafür sind die OOB 
blocks (spare area) die z.b von dem YAFFS/YAFFS2 filesystem mitbenutzt 
werden. Solange es nur ein bootloader oder irgendwelche bin codes sind 
in dem Flash ist ein backup/restore mit den üblichen tools (h-jtag, 
sjf2410, sjf2440, sjf2440_rs232, Ulink) möglich und funktionsfähig, 
sobald aber informationen in dem OOB stehen wird schon der flash fs 
driver die blocks als "bad markieren" da der inhalt nicht zum OOB passt.

Man kann natürlich auch u-boot benutzen oder supervivi und einen 
backup/restore über USB machen. Leider in meinem projekt muss ich einen 
custom bootloader benutzen, so wäre für mich eine programmierung von 
mehrere geräten sehr umständlich. Auch für private zwecke wird man nicht 
immer supervivi benutzen dürfen (da es closed source ist und nicht alle 
boards damit lauffähig sind) oder können (da z.zt nur S3C2440 supported)


die treiber:

Am ende habe ich mich entscheiden den H-Jtag USB zu kaufen und die 
driver so zu modifizieren das auch die OOB blocks mitgelesen werden und 
mitbeschrieben beim restore. Natürlich funktionieren diese treiber auch 
mit LPT wiggler, 64MB backup dauert zwar 3 stunden (mit h-jtag usb 
6min), ist aber unter umständen schneller als mkyaffsimage falls man 
z.b. root fs angepasst hat (je nach dem wie fit man ist mit linux 
tools).

In dem anhang befinden sich fertig compilierten treiber :

Driver10020 - für S3C2410 und K9F1208
Driver11020 - für S3C2440 und K9F1208

( die müssen ins C:\H-JTAG\FDevice\NAND-FLASH\Drivers\)

und die jeweiligen config dateien :

S3C2410+K9F1208+OOB
S3C2440+K9F1208+OOB

(die müssen ins C:\H-JTAG\FDevice\NAND-FLASH\)

Nach dem H-jtag/h-flasher neu gestartet wird erscheinen die in dem 
NAND-FLASH menu (dabei bleiben die evt. originalen immer noch vorhanden)

Die treiber sind für H-Jtag/H-Flasher 1.0, sollten aber mit v09.2 
funktionieren. Bei der version preview_v1.0 ist zwar die LPT 
unterstüzung abgeschaltet, ich habe eine internal version 
freundlicherweise von dem developer bekommen - die kann LPT und USB 
(falls jemand sucht bitte um PN).


Für andere flash groessen müssen entsprechend die configs und flash.c / 
flash.h angepasst werden (grossere NANDs haben OOB von64byte statt 
16byte wie der K9F1208). Ich der zip file befinden sich die original und 
modifizierte sources, so kann jeder schnell verstehen wie 
h-jtag/h-flasher arbeitet und wo die änderungen vorgenommen werden 
müsen. Ich benutze nur die K9F1208 daher habe keine anderen compiliert.


Übrigens, für besitzer von OpenJTAG (von 100ask.net) - entsprechende 
änderungen um OOB zu supporten werden die tage eingepflegt in den 
oflasher (weiterentwicklung von sjf24x0_rs232 - für linux und windows).

Und natürlich, ein NAND flash dump erstellt mit den modifizierten 
treibern kann auch über supervivi restored werden.


gruss

Thomas

EDIT: da S3C2410 oder S3C2440 weniger aussagekräftig ist, habe den 
Beitrag umbennant auf etwas mehr generic name.

So kann ich auch weitere triebr, die inzwischen fertig und geetestet 
sind im selben Beitrag anhängen.

von Thomas R. (tinman) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ein weiterer treiber, diesmal für HY27UF082G2B (256MB flash)

Den habe von hier ausgebaut

[Beitrag "Re: Übersicht über preisgünstige elektronische Geräte für reverse-engineering"]

um den inhalt zu dumpen/bearbeiten.

Es war schneller auszubauen und in dem FriendlyArm mini2440 einzubauen 
(habe da ein TSSOP48/56 sockel drin) als sich mit dem seltsamen debug 
port des Tchibo-bilderrahmen zu beschäftigen.

Treiber 11040 ist für mit OOB
Treiber 11041 ohne OOB blocks

von Joachim K. (Gast)


Lesenswert?

Moin moin Thomas,
ich stehe vor einem ganz ähnlichen Problem: ich habe bei einen mini2440 
(64MB NAND) einen neuen Kernel aufgespielt und auch das root-Dateisystem 
deutlich geändert und an die Bedürfnisse meiner Software angepasst.
Nun muss ich das Image sichern und mit möglichst wenig Arbeit und 
Zeitaufwand auf mehrere minis verteilen.
Ich habe zunächst mit den von FriendlyArm mitgelieferten Tools versucht, 
das gesamte NAND, also Kernel und Dateisystem in einem Zug zu ersetzten:
Backup über USB von vivi (Option u)  auf dnw.exe in Windows. Das sah 
auch zunächst ganz gut aus. Das Restore auch über dnw.exe und vivi 
(Option r) hat dann aber nicht geklappt. Kann das überhaupt gehen?
Nun schreibst Du, dass Du das NAND mit H-JTAG und den modifizierten 
Treibern gesichert und zurückgeladen bekommst. Wie sind da die 
Einstellung bei H-JTAG zu machen?
Noch 'ne Frage: ich habe nun ein Board, das sich nach so einer 
missglückten Restore-Aktion vom vivi nicht mehr formatieren lässt und 
jede menge "bad blocks" anzeigt. Könnte der von Dir beschriebene Effekt 
der überschriebenen OOBs sein. Wie bekommt man das wieder hin? Würde es 
reichen, ein sauberes Image mit dem J-Tag draufzuspielen?

Gruß
Joachim

von Thomas R. (tinman) Benutzerseite


Lesenswert?

Joachim K. schrieb:
> Moin moin Thomas,
> ich stehe vor einem ganz ähnlichen Problem: ich habe bei einen mini2440
> (64MB NAND) einen neuen Kernel aufgespielt und auch das root-Dateisystem
> deutlich geändert und an die Bedürfnisse meiner Software angepasst.
> Nun muss ich das Image sichern und mit möglichst wenig Arbeit und
> Zeitaufwand auf mehrere minis verteilen.

genau, dafür habe letztendlich den h-jtag usb gekauft und die treiber 
angepasst (muss sagen der h-jtag developer war auch sehr hilfreich).


> Ich habe zunächst mit den von FriendlyArm mitgelieferten Tools versucht,
> das gesamte NAND, also Kernel und Dateisystem in einem Zug zu ersetzten:
> Backup über USB von vivi (Option u)  auf dnw.exe in Windows. Das sah
> auch zunächst ganz gut aus. Das Restore auch über dnw.exe und vivi
> (Option r) hat dann aber nicht geklappt. Kann das überhaupt gehen?

per software - backup/restore gehen nur mit supervivi, restore angeblich 
auch mit spezielen u-boot version. Problematisch ist beim 
unterschiedlichen boards und verschiedenen supervivi versionen. Mir war 
persönlich zu unsicher, daher mache ich full backups/restore nur über 
h-jtag - da der keine probleme hat mit partition einstellungen, kaputten 
oob's oder unterscheidlichen NANDs.


> Nun schreibst Du, dass Du das NAND mit H-JTAG und den modifizierten
> Treibern gesichert und zurückgeladen bekommst. Wie sind da die
> Einstellung bei H-JTAG zu machen?

Im prinzip h-jtga/h-flasher starten, im h-flasher eine config laden, 
z.b. "S3C2440+K9F1208.hfc" - damit die init scripts vorhanden sind.

Dann im flash selection "S3C2440+K9F1208+OOB" wählen und das war schon.

Jetzt zum backup im "4. Programming" auf den ic symbol neben Read 
clicken "also read all" - dann bekommst du eine file mit OOB blocks.

Zum restoren im selben dialog die selbe file als src wählen und ab 
block-0000/page-0000 programmieren.


> Noch 'ne Frage: ich habe nun ein Board, das sich nach so einer
> missglückten Restore-Aktion vom vivi nicht mehr formatieren lässt und
> jede menge "bad blocks" anzeigt. Könnte der von Dir beschriebene Effekt
> der überschriebenen OOBs sein. Wie bekommt man das wieder hin? Würde es
> reichen, ein sauberes Image mit dem J-Tag draufzuspielen?

ja, dann sind die OOBs mit was auch immer beschrieben, im j-flash im 
"4. Programming" auf Erase - Entire chip" klicken.

Evt, falls irgendwelche blocks wirklich kaputt sind, in "5. PGM Options 
- NAND Flash" die funktion relocate benutzen. Wenn die blocks wirklich 
kaputt sind wird j-flasher beim formatieren es melden, die muss man sich 
dann merken und verschieben.

Übrigens, wenn man mehrere NANDs auf die art programmiert, kann schon 
vorkommen das manche kaputte blocks haben, allerdigns erkennt es 
h-flasher und bricht dann ab - also braucht man sich keine sorgen machen 
das ein restore in kaputten blocks landet und nichit funktionsfähig 
wird.

von Joachim K. (Gast)


Lesenswert?

Moin moin Thomas.
Erst mal besten Dank für Deine ausführliche Antwort. Ich habe bis zum 
6.3. kaum Zeit, an dem Projekt weiter zu machen, daher die späte 
Antwort.
Immerhin habe ich die aktuelle Version von h-jtag gezogen, Deine Treiber 
eingespielt und den Download des aktuellen Flash gestartet. Das klappt 
auch alles prinzipiell, nur die von Dir gemessene Downloadzeit von 3 
Stunden mit dem LPT-Dongle kommt bei mir gar nicht hin. Ich musste nach 
etwa 6 Stunden abbrechen, da war gerade mal 1/3 der 64MB gesichert. 
Vermutlich liegt es daran, dass ich ein Linux-System habe und h-jtag in 
einer VMWare-Maschine mit Windows starte.
Es geht aber auch nur darum, festzustellen, ob der Weg grundsätzlich für 
mich funktioniert. Wenn das klar ist, ist es auch kein Problem, den 
USB-Adapter zu kaufen, mit dem es ja wohl erheblich schneller geht.

>per software - backup/restore gehen nur mit supervivi, restore angeblich
>auch mit spezielen u-boot version. Problematisch ist beim
>unterschiedlichen boards und verschiedenen supervivi versionen. Mir war
>persönlich zu unsicher, daher mache ich full backups/restore nur über
>h-jtag - da der keine probleme hat mit partition einstellungen, kaputten
>oob's oder unterscheidlichen NANDs.
Ich habe es mit supervivi probiert. Keines meiner Boards hat noch 
funktioniert, nachdem ich ein zuvor gesichertes Image zurückgespielt 
habe. Entweder mache ich was falsch, oder es geht grundsätzlich nicht.
Ich werde das nicht weiter verfolgen. Die J-Tag - Methode scheint mir 
auch aus den von Dir genannten Gründen sicherer und problemloser.
Besten Dank noch mal.

Gruß

Joachim

von Thomas R. (tinman) Benutzerseite


Lesenswert?

Joachim K. schrieb:
> Vermutlich liegt es daran, dass ich ein Linux-System habe und h-jtag in
> einer VMWare-Maschine mit Windows starte.

ja so ist das, native zugriff auf H-JTAG->LPT eht mit max 6KB/s, in der 
vmware natürlich viel langsamer.

> Methode scheint mir auch aus den von Dir genannten Gründen
> sicherer und problemloser.
> Besten Dank noch mal.
>

eigentlich die einzige methode wenn für klein-serien / viel benutzer 
bereich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.