Hi, habe da mal eine Frage nach Erfahrungen oder Wissen ob und wie ich folgendes realisieren kann. Ich möchte wav-Daten die ich über den ADC am Atmega644p erzeuge, während des Samling auf SD-Karte schreiben. Ich nutze Bascom im Verbund mit AVR-DOS für die Dateisystemverwaltung. Kann ich nun während des Sampling die Daten direkt auf die SD-Karte schreiben? Ich weiss ja (durch die eine Sekunde) am Anfang schon die Dateigröße. So könnte ich den "Header" der wav-Datei schreiben, anangen zu samplen und die Bits so schreiben wie sie kommen. öffne neue wav schreibe den header der wav DO solange die Sekunde noch nicht rum ist lese ADC1 schreibe ADC1-Wert auf die SD warte 12us oder so LOOP schließe wav Bei 8Bit/8Khz Sampling bekomme ich so 8kb/sec. Verlangsame ich dadurch den Samplingprozess? Wenn ja, kann ich berrechnen um wiviel ich ihn verlangsame? Vielleicht merkt man an der Fragestellung dass ich ziemlich am Anfang der uControler-Entwicklung stehe^^ Gruß Kalle
So wird das nichts, denn das Schreiben auf die SD Karte dauert zwischen wenigen µs und einigen 100ms je nachdem ob gerade ein neuer Sektor/Cluster angefangen wird. Bau dir zwei Puffer im RAM, in die du die Sampledaten in einem Timer Interrupt schreibst. Ist ein Puffer voll, wird dieser auf die Karte geschrieben und währenddessen der andere Puffer gefüllt. Worst Case muss dieser Puffer aber jeweils >1kByte groß sein. Kleinere Puffer können (und werden warscheinlich) funktionieren, müssen aber nicht. Es wird mit Sicherheit SD Karten geben die ab und zu Probleme machen.
Hi,
danke für diesen Denkansatz. Ich benutze einen Atnega644p, dadurch bin
ich glücklicherweise in der Situation diese beiden Kb frei zu haben.
Du schreibst:
> µs und einigen 100ms je nachdem ob gerade ein neuer
Sektor/Cluster angefangen wird.
Was denkst Du, erfahrungsgemäß, wie schlimm die Ausreiser "einige 100ms"
wohl höchstens sein könnten?
Wenn ich 1kb-Blöcke schreibe, so habe ich 125ms pro Puffer. Wird das
denn auch im extremfall ausreichen?
gruß
Kalle
Kalle wrote: > Was denkst Du, erfahrungsgemäß, wie schlimm die Ausreiser "einige 100ms" > wohl höchstens sein könnten? Einige 100ms können ab und zu durchaus vorkommen, wenn gerade das wear-leveling etwas zu tun hat, siehe auch hier: Beitrag "Schnelle SD-Karte im SPI-Modus?" > Wenn ich 1kb-Blöcke schreibe, so habe ich 125ms pro Puffer. Wird das > denn auch im extremfall ausreichen? 2x 1k (1k=1024Byte=2 Sektoren) Puffer sollte für viele Fälle reichen, aber es wird bestimmt einige wenige SD Karten geben, bei denen das ab und zu nicht reicht.
>Wenn ich 1kb-Blöcke schreibe, so habe ich 125ms pro Puffer. Wird das >denn auch im extremfall ausreichen? Nein, ich habe auch schon 300ms gemessen. Wenn du mit 125ms auskommen musst, dann musst du eine Karte finden die halt kein längeren Aussetzer macht. Viel Spaß beim suchen :(
okay, nicht sehr motivierend ;) Hat denn jemand Erfahrungen welche Speicherkarten als gut gelten und welche nicht? Gibt es einen besonders guten Hersteller? Manhört ja viel, doch auch wird viel das Marketing dazu beitragen, oder ist eine Kingston oder SanDisk Karte wirklich besser als andere? Gruß Kalle
Von SanDisk gibt es ja besondere 'Ultra Highspeed SD-Karten'. Vielleicht taugen die für sowas? So ganz nebenbei frage ich mich natürlich schon: Warum dauert das bis zu mehreren 100 ms? Das ist ja völlig unbrauchbar, zumal man ja im Voraus nicht wissen kann, ob demnächst der Schreibvorgang 100ms oder 100 us dauert.
Tobias Plüss wrote: > So ganz nebenbei frage ich mich natürlich schon: Warum dauert das bis zu > mehreren 100 ms? Eine SD Karte hat größere Sektoren als nur 512Byte. Daher müssen in der Karte z.B. 2 oder 4kByte gelesen werden und wo anderst hingeschrieben werden (wear Leveling). Dazu kommt noch, dass die FAT Tabelle aktualisiert werden muss usw.
2kB Puffer werden für die meisten Karten nicht reichen. Ich habe 6kB als Ringpuffer ausgeführt und ab und zu noch Aussetzer, hauptsächlich in den vorderen Sektoren der verschiedenen Karten. Um alle Aussetzer wegzubekommen, muß man mindestens 300ms des aktuellen Sampleaufkommens puffern können. Die Geräte, für die SD-Karten eigentlich gedacht sind, haben meistens genug Speicher an Board, Mikrocontroller tun sich hier etwas schwer oder man braucht halt externe Bausteine und dementsprechend viele Portpins.
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.