SD-Karte Sektorweise beschreiben

Gast #2579285
Lesenswert?

Hallo ,
Ich habe Daten Zeilenweise in einer normalen .txt Datei nun möchte ich 
jede Zeile dieser .txt Datei in einen eigenen Sektor der SD-Karte 
schreiben (ein Sektor 512 Byte) .
Gibt es dafür ein Tool ? Denn jede zeile von Hand mittels Hex-Editor in 
einen eigene Sktor zu kopieren ist sehr umständlich.
Liebe Grüße
Hermann
Gast #2579628
Lesenswert?

Ich nehme mal an hier kommt keine Antwort, weil die Fragestellung bei 
jedem der sie liest und nicht Gedanken lesen kann erst mal 1000 
Gegenfragen aufwirft!

Auf welchem System wurde die Textdatei erstellt? PC oder uC? Befinded 
sich die Text-Datei auch schon auf der SD-Karte?
Auf welchem System willst Du die Sektoren erstellen? PC? Win? Linux? uC?
Wie bestimmst Du die Sektoren? Sollen die innerhalb einer Datei liegen? 
Muss FAT heile gelassen werden - sprich soll die SD-Karte anschließend 
noch von einem PC lesbar sein?

In Linux dürfte das ganze am einfachsten gehen. Ein wenig XARGS, AWK, DD 
und schon ist die Text-Datei auf Sektoren verteilt aber FAT kaputt ;o)

PC - Einfach ein Programm schreiben, das dir aus der Txt-Datei eine 
*.DAT oder *.RAW oder wie Du sie auch nennen willst erzeugt. Lese Zeile, 
schreibe Zeile + (512-Zeilenlänge). Dateien fangen immer bündig mit 
einem Sektor an. Das heißt durch das auffüllen landet jede Zeile in 
einem eigenen Sektor wenn man die Datei dann auf die SD kopiert. Wenn 
die SD-Karte leer ist (frisch formatiert), dann sind die Sektoren auch 
aufsteigend. Vorteil: die FAT bleibt ganz.

uC - jegliche Lib zum Zugriff auf eine SD-Karte sollte auch einen 
low-level-Part haben, der auf Sektoren zugreift.
Gast #2585770
Lesenswert?

auf dem PC(Win7) wird die textdatei erstellt .
Nein die Textdatei befindet sich nicht auf der sd karte .
Die Sektoren sind auf dem PC erstellt und FAT muss nicht heil bleiben da 
die Sektoren nurmehr vom µC ausgelesen werden müssen .
Ich will nur vom PC(Win7) direkt auf die SD Karte (ohne FAT) zeile für 
zeile dieser Textdatei in einen eigenen Sektor kopieren ,ohne es von 
hand zB mit einem hexeditor machen zu müssen.
Das ganze dient dazu das ich mit dem µC dann diese daten Sektorweise 
auslesen kann.
Gast #2585810
Lesenswert?

Hermann schrieb:
> ohne es von
> hand zB mit einem hexeditor machen zu müssen.
Warum nicht von Hand? Wie viele tausend SD-Karten möchtest du denn 
beschreiben?

Ich würde es so machen:
1. Zeilen auffüllen (mit einem Script in der Sprache deiner Wahl)
2. mit HxD auf die SD Karte kopieren
Gast #2585818
Lesenswert?

asdf schrieb:
> Warum nicht von Hand? Wie viele tausend SD-Karten möchtest du denn
> beschreiben?

Meine 2 GB Sd karte hat tausende 512 Byte Sektoren und das Textfile auch 
bis zu zweitausend von dem her ist das etwas mühselig ^^

aber ich werds mal mit Python probieren,ein Script zu schreiben, auch 
wenn ich bis jetzt noch 0 ahnung davon habe .
Ich hatte nur gehofft das soetwas in der Art schon wer gemacht hat somit 
würde ich mir einen beträchtlich Aufwand ersparen um eine Script Sprache 
zu lernen .
Aber trotzdem danke das mit den Zeilen auffüllen ist garkeine so 
schlechte Idee .
Gast #2589748
Lesenswert?

Der Grund ist das auf der SD karte genug Sektoren sind und ich mir mit 
dem µC leicht beim auslesen/filtern der zeilen tue .
Etwa 50 Zeichen pro Zeile sind sie lang.

Einen dd Befehl einfach in eine cmd befehlszeile? Funktioniert das?

Danke für die Antworten (:
Lg
#2589802
Lesenswert?

Das funktioniert sogar einwandfrei. Schreibe Deine Daten in eine Datei 
und kopiere die dann mit "dd" auf die Karte. Ich habe mal für einen 
Sound-Geocache ein Programm geschrieben, welches auf diese Art und Weise 
ein primitives Dateisystem für einen einfachen MC auf der SD-Karte 
anlegt.
Für FAT war der MC viel zu schwach, mit meinem ollen Dateisystem hat es 
trotzdem gut geklappt.
Du solltest darauf achten immer "dd --filter=removable ..." zu 
verwenden, um Dir nicht Deine Platten zu schrotten ;-)

Gruß,

Oliver
Gast #2589847
Lesenswert?

Okay ich habs gerade probiert ich schreibe :

dd if=C:\Python27/test12.txt of=F

wenn ich mir dan aber mit einem hexeditor(HxD) die SD karte ,die bei mir 
das Laufwerk F: ist ansehe, sehe ich das File nicht.

Mfg Hermann
#2589899
Lesenswert?

Nun ja, die Syntax zu "dd" solltest Du schon kennen, bevor Du das 
Kommando benutzt. "dd --list" zeigt Dir die Partitionsnamen an, die Du 
dann verwenden musst. Bei meinem USB-Stick lautet das z.B.
"of=\\?\Device\Harddisk2\Partition0". An Deiner Stelle würde ich ja das 
"--filter=removable" nie weglassen!

Gruß, Oliver
Gast #2589921
Lesenswert?

Weil oben Python erwähnt wurde und mir gerade langweilig war hab ich mir 
mal einen Python crash-Kurs gegönnt. Hier das Ergebnis:
1
import linecache
2
lineend = 0
3
lineno = 1
4

5
empty_sector = ""
6
char_no = 0
7
while char_no < 512:
8
        empty_sector = empty_sector + " "
9
        char_no = char_no + 1
10

11

12
out_file = open( "c:/opt/Temp/Sec_out.txt", "w" )
13
while not lineend:
14
  aline = linecache.getline( "c:/opt/Temp/SplitDemoText.txt", lineno )
15
  lineno = lineno + 1
16
  if len( aline ) == 0:
17
    lineend = 1
18
        if len( aline ) > 0:
19
          out_line = aline[ 0:len( aline )-2 ] + empty_sector[ len( aline )-2:512 ]
20
                out_file.write( out_line )
21
out_file.close()

Sicher würde ein Python-Profi das anders/besser machen, aber für die 
allererste Stunde Python geht's und Liefert das, was gebraucht wird.

Einfach die Filenamen entsprechend anpassen und schon hast Du ein File, 
welches 512 byte pro Zeile hat.

Das dann einfach auf eine frisch formatierte SD-Karte kopieren und FAT 
bleibt erhalten. Musst halt in Deinem Programm herausfinden oder 
hardcoden wo der erste Sektor der Datei liegt.

Oder du nimmst dd und schreibst das File Sektorweise auf die SD-Karte.
Gast #2589929
Lesenswert?

PS: das "if len( aline ) > 0:"
liegt eigentlich auf der gleichauf mit dem "if len( aline ) == 0:"

Ebenso "out_line = aline[ 0:len( aline )-2 ] + empty_sector[ len( aline 
)-2:512 ]"
und "out_file.write( out_line )"

Hat das Forum-System scheinbar was dagegen! Vermutlich ist es durch den 
Mix von Tabs/Spaces durcheinander gekommen.
Gast #2589930
Lesenswert?

Oliver R. schrieb:
> "dd --list" zeigt Dir die Partitionsnamen an, die Du
> dann verwenden musst. Bei meinem USB-Stick lautet das z.B.
> "of=\\?\Device\Harddisk2\Partition0". An Deiner Stelle würde ich ja das
> "--filter=removable" nie weglassen!

Wenn ich bei cmd "dd --list" eingebe kommt
"unrecognized option Try ´dd --help´"

und im help stehen dan die üblichen funktionen wie if,of,bs usw ..
--filter=removable schmeist er mir genau das selbe raus .

komm ich sonst irgendwie zu dem Pfad? oder mache ich was falsch?
Gast #2590492
Lesenswert?

Ich wusste doch, dass es besser geht!

Wäre ich nicht über den linecache gestolpert ... wer weiß wie es dann 
aussehen würde. Auf .strip() und *"\0" kommt man auch nicht so einfach 
in nem ultra-schnellen Selbststudium ohne Tuts - also ausschließlich 
anhand der Hilfe.

Danke @asdf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren