Mit SD-Card "RAW" kommunizieren

  • Hallo Zusammen,
    ich habe folgendes Problem. Ich möchte gerne eine SD-Card "RAW" ansprechen. Es bsteht kein Filesystem (FAT, FAT32 usw...) auf der Karte.
    Ich habe leider überhaupt keine Ahnung wie ich das mit AutoIt bewerkstelligen soll. Die SD-Card bekommt allerdings einen Laufwerk-Buchstaben bei Windows 7.

    Hintergrund ist es, eine SD-Card über einen Mikrocontroller zu lesen/schreiben (RAW) und dies wieder über ein eigenes Tool als Datensatz/Datei aufzubereiten.

    Ich würde mich über jede Hilfe freuen :D

    Vielen Dank schon mal!

    Gruß
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

    Einmal editiert, zuletzt von Homer J. S. (9. Januar 2012 um 23:01)

  • Hallo James1337,
    das kann man bestimmt umstricken, aber das ist eine Nummer zu Hoch für mich. ?(

    Trotzdem Danke!

    Gruß
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • @progandy,
    habe eben einfach mal probiert und einen ersten Teilerfolg gehabt. Werde wahrscheinlich heute Abend wieder Zeit finden um weiter zu testen.
    Über den Fortschritt/Niederlage halte ich euch am laufen.

    Vielen Dank!

    Gruß
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Hallo Zusammen,
    ich hatte heute Abend nochmal Zeit ein wenig mich mit dem Thema "SD-Card "RAW" kommunizieren" zu beschäftigen.

    Dieser Code liest vom Datendräger "F" (SD-Card) die Daten "RAW" und schreibt diese in die Datei "sd_card.txt".
    Aber Achtung: Die Datei "sd_card.txt" wird so groß wie die SD-Card selber (in meinem Fall 2GB).

    Spoiler anzeigen
    [autoit]


    #include <Constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $sd_card = FileOpen("\\.\F:", 16)
    If $sd_card = -1 Then
    MsgBox(0, "Error", "Unable to open SD-Card")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $file = FileOpen("sd_card.txt", 18)
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open SD_Card.txt")
    FileClose($sd_card)
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $counter = 0
    While 1
    FileSetPos($sd_card, $counter, $FILE_BEGIN)
    $file_read = FileRead($sd_card, 16)
    If $file_read = '' Then
    ExitLoop
    EndIf
    FileSetPos($file, $counter, $FILE_BEGIN)
    FileWrite($file, $file_read)
    $counter = $counter + 16
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    FileClose($sd_card)
    FileClose($file)

    [/autoit]

    Zu dem Benutze ich die Version "3.3.8.0" von AutoIt. In der alten Version "3.3.0.0" die ich vorher im Einsatz hatte, existiert der Befehl "FileSetPos" nicht.
    Was allerdings nicht auf der SD-Card geht, ist die Positionsabfrage "FileGetPos"!

    Wenn ich es benötige, werde ich das "RAW" schreiben auch noch testen.

    Mein Dank geht nochmals an "James1337" und besonders an "progandy"!!

    MfG
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

    Einmal editiert, zuletzt von Homer J. S. (10. Januar 2012 um 00:08)

  • Hallo Zusammen,
    ich möchte mich entschuldigen, das ich einen so alten Thread auspacke, aber ich habe ein Problem.

    Ich wollte jetzt Daten "RAW" wieder zurück auf eine SD-Card schreiben, mit dem Ergebnis, das ich die SD-Card mit folgendem Code nicht öffnen kann.

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $file=FileOpen("sd_card.txt", 16)
    If $file=-1 Then
    MsgBox(0, "Error", "Unable to open sd_card.txt")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $sd_card=FileOpen("\\.\F:", 18)
    If $sd_card=-1 Then
    MsgBox(0, "Error", "Unable to open SD-Card")
    FileClose($file)
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $counter=0
    While 1
    FileSetPos($file, $counter, $FILE_BEGIN)
    $file_read=FileRead($file, 16)
    If $file_read='' Then
    ExitLoop
    EndIf
    FileSetPos($sd_card, $counter, $FILE_BEGIN)
    FileWrite($sd_card, $file_read)
    $counter=$counter+16
    WEnd
    FileClose($file)
    FileClose($sd_card)

    [/autoit]


    Die Fehlermeldung von meinem Code ist folgende:

    [autoit]

    MsgBox(0, "Error", "Unable to open SD-Card")

    [/autoit]

    Hat einer von euch eine Idee, wie ich Daten "RAW" wieder auf eine SD-Card bzw. Datenträger schreiben kann?

    Vielen Dank für eure Hilfe!

    Gruß
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Hast du vielleicht den kleinen "Schreibschutz" Schalter umgelegt? Ist das einzige was mir so spontan einfällt. Hab sonst leider auch keine Ahnung davon. Vielleicht hilft dir ja @error auch noch weiter.

    Gruss Shadowigor

  • hast du es hinbekommen raw wieder auf die karte zu schreiben?
    irgendwie klappt das nicht, es sieht so aus als ob er schreib aber die karte bleibt leer.

    [autoit]

    #RequireAdmin
    #include <Constants.au3>

    [/autoit][autoit][/autoit][autoit]

    $file = FileOpen("C:\sd_card.txt", 16)
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open sd_card.txt")
    Exit
    EndIf
    $size = FileGetSize("C:\sd_card.txt")

    [/autoit][autoit][/autoit][autoit]

    $sd_card = FileOpen("\\.\N:", 17);("\\.\PhysicalDrive7", 17)
    If $sd_card = -1 Then
    MsgBox(0, "Error", "Unable to open SD-Card")
    FileClose($file)
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    $counter = 0
    While 1
    FileSetPos($file, $counter, $FILE_BEGIN)
    $file_read = FileRead($file, 512)
    If $file_read = '' Then
    ExitLoop
    EndIf
    FileSetPos($sd_card, $counter, $FILE_BEGIN)
    FileWrite($sd_card, $file_read)
    $counter = $counter + 512
    ConsoleWrite($size & " " & $counter & @CRLF)
    WEnd
    FileClose($file)
    FileClose($sd_card)

    [/autoit]