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.
Eine eigene Frage?
Dieser Thread ist über 18 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.