Forum: Mikrocontroller und Digitale Elektronik Problem mit Incostartec LILLY-912 Core Module, Compact-Flash Karte und DMA Modus


von NordBerg (Gast)


Lesenswert?

Hallo,

ich hoff, das ist das richtige Forum.

Erstmal zur Vorgeschichte:

Wir (die Firma in der ich Arbeite) stellen kleine, tragbare Geräte her, 
an denen jeweils 2 Sensoren (Bewegungssensoren, ist nochmal eine eigene 
Platine) an einem RS485 Bus hängen.

In den Geräten verwenden wir das LILLY-912 Modul von Incostartec, auf 
dem ein Linux-Kernel in der Version 2.6.20.4 läuft. Auf dem Modul 
befindet sich ein Cirrus Logic EP9312 AMR9 Prozessor und die 
dazugehörigen Kernel-Dateien wurden mit einem Patch von Cirrus Logic 
hinzugefügt.

Da beim Messvorgang eine ziemlich große Datenmenge entsteht, speichern 
wir diese in einer Textdatei zwischen und übertragen diese nach der 
MEssung auf einen USB-Stick.

Das funktioniert auch alles soweit super.

Nun wollen wir diese Daten auf einer Compact-Flash Karte Speichern, um 
mehr als nur eine Messung zu ermöglichen. Aus Performancegründen würden 
wir die Karte gern im UDMA bzw. MDMA Modus laufen lassen, weil da der 
Datendurchsatz höher ist. Sonst haben wir das Problem, das der 
schweibvorgang zu langsam ist und nicht alle Messwerte geschrieben 
werden, was wiederum zu Fehlern führt.

In der Kernelkonfiguration habe ich alle dafür notwendigen Optionen 
ausgewählt. Ich kann die Karte auch Mounten und drauf schreiben, jedoch 
nicht in den DMA Modus wechseln.

Ich habe mit dem Programm "hdparm" versucht, in den DMA Modus zu 
wechseln, jedoch scheitert der Versuch mit einer Fehlermeldung:
1
/ # hdparm -d1 /dev/hda
2
3
/dev/hda:
4
 setting[ 6781.600000]  device only supports MDMA ? (we're hosed)
5
 using_dma to 1 (on)
6
hdparm:  HDIO_SET_DMA: Input/output error
7
 using_dma    =  0 (off)

WEnn ich den Parameter -i verwende, erhalte ich folgende Infos:
1
/ # hdparm -i /dev/hda
2
3
/dev/hda:
4
5
 Model=SMI MODEL, FwRev=20071116, SerialNo=SMI 00007093
6
 Config={ HardSect NotMFM Fixed DTR>10Mbs }
7
 RawCHS=1966/16/63, TrkSize=0, SectSize=576, ECCbytes=4
8
 BuffType=DualPort, BuffSize=1kB, MaxMultSect=1, MultSect=off
9
 CurCHS=1966/16/63, CurSects=1981728, LBA=yes, LBAsects=1981728
10
 IORDY=no, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
11
 PIO modes:  pio0 pio1 pio2 pio3 pio4
12
 DMA modes:  *mdma0 mdma1 mdma2
13
 AdvancedPM=no
14
15
 * signifies the current active mode

Die Info sagt aus, das der MDMA0 Modus aktiv ist. Verwende ich aber 
hdparm ohne argumente, dann erschein folgendes:
1
/ # hdparm /dev/hda
2
3
/dev/hda:
4
 multcount    =  0 (off)
5
 IO_support   =  1 (32-bit)
6
 unmaskirq    =  0 (off)
7
 using_dma    =  0 (off)
8
 keepsettings =  0 (off)
9
 readonly     =  0 (off)
10
 readahead    = 256 (on)
11
 geometry     = 1966/16/63, sectors = 1981728, start = 0

Dieser Teil sagt mir, das DMA nicht verwendet wird (using_dma = 0).

Was mache ich falsch? Kann mir dort jemand Helfen?

Ich bedanke mich schonmal im Vorraus für die Antworten und die 
aufgewendete Zeit!!!

von Linux_Lover (Gast)


Lesenswert?

Hallo NordBerg ,

selbst im langsamsten PIO-Mode müssten ca. 3M/s möglich sein.
Was sind das für riesige Datenmengen die da nicht durchpassen sollen?
Vielleicht ist die CF-Karte einfach zu langsam/billig.

was passiert bei: hdparm -tT /dev/hda

von Turbo J (Gast)


Lesenswert?

> LBAsects=1981728

Das ist eine 1 GB Karte. Die kann vermutlich noch kein UDMA, denn das 
kam erst sehr spät zu den CF Spezifikationen hinzu. Man könnte mal eine 
neuere und größere CF Karte probieren. Sie sollte größer als 2 GB sein, 
denn meine kann auch kein UDMA.

Aber wieso gibt es Probleme mit der Datenmenge? Ich komme mit 
Bewegungssensoren auf Datenraten im einszelligen KB/s Bereich. Ein 
moderner USB-Stick kann am Full-Speed Bus ca. 1 Megabyte/s schreiben, 
d.h. voll auslasten. Daher ist es unklar, wieso der Stick nicht reichen 
soll.


Zu UDMA: Dieses Video (http://www.youtube.com/watch?v=Sqi6BWOyX-U) lässt 
vermuten, dass UDMA erst ab "300X" verfügbar ist. Die "133x" Karten 
haben also dann "nur" MWDMA.

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
Noch kein Account? Hier anmelden.