Hallo Zusammen ich versuche derzeit eine SD/MMC Karte mit meinem eZ80 Development Kit anzusteuern. Hartware, Karte, Software funktionieren gut. Nur beim lesen der Karte ist mir aufgefallen das sich bei bestimmten Adressen die Karte falsche Daten ausgibt. Beim lesen im (READ SINGLE BLOCK) 512Byte: CMD17: 51.00.00.0E.00.01 und 51.00.00.10.00.01 wie 51.00.00.1E.00.01 und 51.00.00.20.00.01.. usw. sind die Daten gleich werden doppelt ausgelesen. Die folgenden Daten sind dann immer um 512Byte verschoben. Hat das jemand eine Idee wo der Denkfehler liegt? Gruß Hansjörg.
:
Verschoben durch User
Unter Windoof hat man oft das Problem dass man die Karte nur als Admin komplett auslesen kann - und selbst dann geht das nicht über den Laufwerksbuchstaben (der steht nur für die FAT Partition). Das kann einen stark verwirren. Ach ja: SD und SDHC haben unterschiedliche Blockaddressen. Ist das eine <2GB Karte?
Jim M. schrieb: > Unter Windoof hat man oft das Problem dass man die Karte nur als Admin > komplett auslesen kann - und selbst dann geht das nicht über den > Laufwerksbuchstaben (der steht nur für die FAT Partition). Das kann > einen stark verwirren. Kannst du nicht Windows schreiben? Musst du wie ein zurückgebliebener Windoof schreiben? Was hat Windows überhaupt mit dem obigen Problem zu tun? Der TO hat eine "eZ80 Development Kit".
Was du genau mit "sind die Daten gleich werden doppelt ausgelesen." meinst kann ich nicht nachvollziehen. Wichtig waere aber mal zu wissen was fuer eine Karte verwendest, handelt es sich um eine SDSC (Standard capacity) wird eine Byte Adressierung verwendet, bei grösseren Karten (SDHC SDXC) sind es Sektoradressen (1 Sektor = 512 Bytes). Gruss brue
Brue W. schrieb: > Was du genau mit "sind die Daten gleich werden doppelt ausgelesen." > meinst kann ich nicht nachvollziehen. > > Wichtig waere aber mal zu wissen was fuer eine Karte verwendest, handelt > es sich um eine SDSC (Standard capacity) wird eine Byte Adressierung > verwendet, bei grösseren Karten (SDHC SDXC) sind es Sektoradressen (1 > Sektor = 512 Bytes). > > Gruss > brue Hi brue, ich beschäftige mich erst neu mit Softwareanwendungen. Aber Doofschwätzer haben hier nichts zu suchen. Ich glaube den Anderen hier ist die Sache schon wichtig. Zu meinem anliegen. Ich teste gerade mit einer MMC plus 2GB Premium Karte. Der effekt ist dass ich bei der Adresse CMD17.00.00.0E.00... die gleichen Daten erhalte wie bei .00.00.10.00... und bei .00.00.1E.00. und .00.00.20.00. usw. Ich addiere zur Adress 512 = 200H und lese 512Byte aus. Die Daten sind bis zur genannten Adresse ok. dann in .0E.00. und .10.00. gleich. was mach ic falsch?? Gruss Hansjörg
Sicher dass die Daten auf der Karte nicht einfach so sind und sich wiederholen? Wie geprüft? Was soll denn an der Adresse liegen (FAT?)? Welches API/Library nutzt du, wie sieht dein Code aus?
Hansjörg W. schrieb: > was mach ic falsch?? Dumpe mal den Sektor 0 und schau Dir an was so in der Partitionstabelle steht. Vor der 1. Partition ist meistens freier Platz für z.B. irgendwelchen Boot Code - da kann also auch mal was doppelt kommen. Und wie oben erwähnt sieht man das unter Windows OS nur als Admin und braucht AFAIK Tools von einem Dritthersteller - ich lese daher solche Sachen gerne unter Linux aus, aber YMMV.
Hallo, ich schreibe den Code in .ASM aus meinem eZ80 Development (eZ80F91) Kit Board. Habe keine Software zum zeigen auf dem PC. Kann das Prinzip kurz darstellen: Ich benutze einen Zähler 16Bit high und einen 8Bit low. ld hl,0000h ; high Adr. ld e,01h ; low Adr. Start loop1: inc e ; low 8Bit n+1 cp lowmax ; low Adr. Max (20h) jp nc,loop2 inc hl ; high 16Bit n+1 ld e,01 loop2: ld d,00h add hl,hl ;*2 add hl,hl ;*4 add hl,hl ;*8 add hl,hl ;*16 add hl,hl ;*32 add hl,de ; high mit low Adr. addieren REPT 9 sla hl_de ; Shift um 9* links und erhalte n+512(200h) call SD/MMC_command jp loop1
SD-Karten Zugriff in Assembler? Weil das in C schon so einfach ist? Hansjörg W. schrieb: > Habe keine Software zum zeigen auf dem PC. Dann lade dir mal HxD runter, das kann Datenträger (auch SD-Karten) direkt öffnen. Da kannst du dann zur gewünschten Adresse springen und gucken was da tatsächlich ist. https://mh-nexus.de/de/hxd/
Hi, Herr Dr Sommer ich habe da ein Problem. dieser Hexeditor ist gut. Zeigt mir die Daten auf der MMC (PC Daten) richtig an. Nun irritiert mich die Adress Ausgabe. Im Datendlatt der SD/MMC ist die Aussage, die Adr. muss grösser 512Byte also > 1FFH = 0200 sein. 02.00, 04.00, 06.00. Im Hexeditor zeigt es mir > 0FH = 00.10 an. 01, 20, 30,... Die MMC Karte läst in meinem System auch kein Zugriff kleiner xx.x2.00 zu. Lesefehler, also innerhalb der 512Byts.Ich kann nur mit Adresse grösser xx.xx.x2.00 / .x4.00/ .x6.00/.x8.00 zugreifen. Der Hexeditor greift mit xx.xx.xx.10/ .xx.20/ .xx.30/ .xx.40 zu. Muss ich da die Blockgrösse von 512Byte verändern ??
Hansjörg W. schrieb: > Im Datendlatt der > SD/MMC ist die Aussage, die Adr. muss grösser 512Byte also > 1FFH = 0200 > sein. Das musst du falsch verstanden haben. Der Speicher fängt ab 0 an. Da befindet sich der Master Boot Record (MBR). Darauf folgt eine endlose Folge von Bytes, die (aus logischer Sicht) erstmal nicht strukturiert sind. Lediglich die Zugriffe müssen an Grenzen von 512Bytes ausgerichtet sein, aber 0 ist ja auch eine. Du kannst auch die Daten an schrägen Adressen wie 1365 o.ä. lesen, indem du eben die 512 Bytes ab Adresse 1024 liest und von den gelesenen Daten das Byte 1365-1024=341 nimmst. Bei HxD sieht man davon nichts, weil das alles der SD-Karten-Leser bzw. dessen Treiber vom PC erledigt. Dort wird nur die Folge an Bytes dargestellt, auch wenn der Lesezugriff im Hintergrund an 512-Byte-Grenzen ausgerichtet war. Hansjörg W. schrieb: > Die MMC Karte läst in meinem System auch kein Zugriff kleiner xx.x2.00 > zu. Auch bei Adresse 0 nicht? Dann ist die Karte kaputt oder du machst was falsch. Wie soll man sonst den MBR auslesen?
Würde ich doch zuerst mal eine andere Karte eines anderen Herstellers ausprobieren. Nächster Test wäre dann mit einem Linux Hexeditor. Erst wenn 2 Karten und 2 BS den selben verwirrenden Unfug machen nach einem Denkfehler suchen.
Bist du sicher, dass der 2. Block gleichen Inhalts von der Karte kommt? Ich habe das auch mal so gemacht. Da passierte das auch. Ich kam dan drauf, dass der vermeintliche 2.gleiche Block gleichen Inhalts gar nicht von der SD kam sondern aus dem Pufferund das lesen in wirklicket mit einer Fehlermeldung abgebrochen wurde, zB wegen Nichtbeachten banalen Blockadressierungsfehlern. ...
Hi, Danke erst mal für die zahlreiche Unterstützung. Als Einsteiger hat man es nicht leicht. Dann werde ich mal den teste mit verschiedene Karten machen. Habe dazu mal alte MMC Karten rausgesucht mit verschiedener Grösse. 32MB, 512MB, 1GB, 2GB. Gibt es bereiche die man nicht überschreiben darf? wie z.B. Sec 0. Die Adressierungsart ist aber nicht Grössenabhängig?. Das Verhalten sollte soweit gleich sein??
:
Bearbeitet durch User
Hansjörg W. schrieb: > Gibt es bereiche die man nicht überschreiben > darf? > wie z.B. Sec 0. ...nein, du darfst die komplette Karte beschreiben wie du lustig bist, ABER dann darf man natürlich nicht mehr erwarten das ein sich vorher auf der Karte befindliches Dateisystem noch funktioniert bzw richtig gelesen werden kann, kommt halt drauf welche Blöcke du überschreibst wie z.B. Sektor 0, das ist der MBR und da steht die Partitionstabelle drin, ohne die, kein Zugriff mit Windows etc. mehr möglich da "defektes" Dateisystem Die Adressierungsart ist aber nicht Grössenabhängig?. wie Bruce W schon oben erwähnte: es gibt die Byte- und Sektor-Adressierung, je nach "größe" / Typ der Karte.
... die LBA Sektoren sind eigentlich immer 512 byte aligned, ABER können auch andere Größen annehmen, da gibts aber irgendwo ein Feld entweder im Descriptor der Karte, im MBR oder im ersten Sektor der jeweiligen Partition, weis ich jetzt leider nicht mehr auswendig....
Ch.G. schrieb: > ... die LBA Sektoren sind eigentlich immer 512 byte aligned, ABER können > auch andere Größen annehmen, da gibts aber irgendwo ein Feld entweder im > Descriptor der Karte, im MBR oder im ersten Sektor der jeweiligen > Partition, weis ich jetzt leider nicht mehr auswendig.... ... oder ich hab mich jetzt ganz verhaspelt und das bezog sich nur auf die Sektoren der FATs, und die Karte wird immer in 512 byte Blöcken(Sektoren) addressiert (also byte-adresse / 512) oder nur die byte-addresse wenn die Karte es nicht anders kann.
Hi Ch.G, dann werde ich mal loslegen muss mein Programm dazu etwas abändern. Ich werde dann das Ergebniss euch mitteilen. Klasse Infoaustausch.
Beitrag #5152561 wurde vom Autor gelöscht.
Hi zusammen, hab den Fehler gefunden beim Shift von high Adr. nach linke habe ich 5mal hl Register Add statt nur 3mal. Dadurch entstand eine Adresslücke leerbereich der sich doppelt ausgewirkt hat. Somit habe ich immer beim übergang eine Adresse zweimal ausgelesen. Neue Adressberechnung high+low: ld hl,0000h ; high Adr. ld e,01h ; low Adr. Start loop1: inc e ; low 8Bit n+1 cp lowmax ; low Adr. Max (20h) jp nc,loop2 inc hl ; high 16Bit n+1 ld e,01 loop2: ld d,00h add hl,hl ;*2 add hl,hl ;*4 add hl,hl ;*8 add hl,de ; high mit low Adr. addieren REPT 9 sla hl_de ; Shift um 9* links und erhalte n+512(200h) call SD/MMC_command jp loop1 Ich werde jetzt noch einige tests mit SD-Karten machen und versuchen FAT16 zu lesen. Falls jemand mehr zu meinem Projekt wissen will kann mit Hardware Info helfen.Das ganze soll ein Foto Bilderrahmen werden. Der Weg dahin wird noch steinig genug sein.
Hey Hansjörg Winterhalter, nur so aus neugier...steuerst du die SD mit SPI oder mit 4/8-bit an? Und warum bitte in ASM?
Hi adamap, > "Und warum bitte in ASM?" ich mache seit vielen Jahren Entwicklung im bereich peripherie Micocontroller Vor etwa 5Jahren bekam ich von Zilog ein eZ80F Development Kit für die unterstützung an einem selbstfahrendes Autonomes Fahrzeug. Alle versuche es in einer Hochsprache zu entwickeln schlugen bei allen beteiligten fehl. Ich schrieb meine Testprogramme schon immer in .ASM und versuchte es auch in diesem Projekt mit dem eZ80F91 Compilert auch in .ASM. Bingo, in der halben Zeit geschrieben, nur 10% Speicherbedarf, Ausreichende Performence. Was will man mehr. Das Programm für die SD/MMC Karte schrieb ich in .ASM in einem halben Tag. Programmgrösse mit Initialisierung der Hardware 1,2Kb. Das muss nicht die Einsteinlösung sein, ist für mich ein guter alternative. Programm ist für jeden Überschaubar, kann diese als Funktionen in C einbinden. Somit sind alle möglichkeiten offen und ich kann in kürze alles einzeln durchtesten. > "Und warum bitte in ASM?" Die Ansteuerung mache ich über die SPI des eZ80F91 auf einer Prototypenplatine. Ich muss jetzt doch noch ein bediener-Display dazu machen um es einfacher zu Handhaben. ( habe noch einige Toshiba 128X128 LCD) mal schauen. um Ich kann jetzt bereits die Speicherkarte linear ansprechen und Programme Speichern und abrufen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.