Hallo zusammen, in unserer Firma gibt es ein älteres Gerät, auf dem ein ADC über ein CPLD (Altera MaxII EPM570) und einen ISA-Bus an eine PC104-CPU-Karte mit Windows XP angeschlossen ist. Es werden kontinuierlich ~240kByte/s übertragen. Dazu wurde bisher DMA verwendet und im CPLD war nur ein wenig Bus-Logik drinn. Nun wurde die PC104-CPU-Karte abgekündigt und der Nachfolger hat kein DMA mehr. Jetzt darf ich herausfinden, ob man das auch ohne DMA lösen kann, ohne die Hardware zu ändern. Mein Ansatz wäre folgender: Im CPLD einen FIFO einbauen und über einen Interrupt die CPU triggern. Leider kann ich im EPM570 nicht viel Speicher für den FIFO realisiseren, ich gehe mal von 128 bis 256 Bit aus. Das wären gerade mal 8 bis 16 16Bit-Worte. Bei meiner Datenrate könnte ich damit 66µs bis 133µs puffern. Was ich nun gar nicht einschätzen kann ist, ob es unter Windows XP möglich ist, die Daten in diesem Zeitfenster abzuholen. Der CPLD würde ja einen Interrupt erzeugen und ein Treiber o.ä. unter Windows XP müßte dann "zeitnah" die Daten holen. Leider hab ich im Netz gar keine Anhaltspunkte gefunden, über was für Interrupt-Latenzen wir bei Windows sprechen. Man liest zwar immer von mangelnder Echtzeitfähigkeit, aber gilt das auch für Treiber mit einem Hardware-Interrupt? Hat jemand irgendwelche Infos oder Ideen?
Das kommt mir sehr bekannt vor, wir haben einen EPM1270, der den 16bit-DMA eines PC104-Rechners (unter Linux) benutzt, der ist jetzt auch abgekündigt. Es gibt allerdings noch Nachfolger (adlinktech/Lippert). Wir übertragen jeweils bis zu 6 (oder 7?) 16bit-Worte mit bis zu 50k/sec, bei der nächsthöheren Stufe 62,5k fällt dann jedes 2.Datenpaket unter den Tisch. Ein Umbau auf andere Übertragung über den alten ISA-Bus ist nicht mehr geplant, da würde man eher über PCIe oder ähnliches neueres gehen. Leider ändern sich die Schnittstellen alle paar Jahre, wenn man ein langfristiges Produkt hat ist PC-Technik nicht ideal.
Bei der geringen Datenrate könntest du auch einen Mikrocontroller mit USB Unterstützung und einigem an internem RAM nehmen, und sogar über USB Full Speed übertragen. Das funktioniert dann sowohl auf alten WinXP Rechnern als auch auf moderner PC Hardware ohne ISA, und du bist das ganze uralte Zeug los...
Seit dem 80386 und dem movs Befehl braucht man eigendlich keine "alte" ISA DMA für Memory transfers mehr. Das Problem ist wahrscheinlich ein passenden Treiber für Win XP und deine Karte zu finden. Selbst schreiben geht natürlich immer ;)
Programmierer schrieb: > Bei der geringen Datenrate könntest du auch einen Mikrocontroller mit > USB Unterstützung und einigem an internem RAM nehmen, und sogar über USB > Full Speed übertragen. Das funktioniert dann sowohl auf alten WinXP > Rechnern als auch auf moderner PC Hardware ohne ISA, und du bist das > ganze uralte Zeug los... Gibt es schon fertig: http://arstech.com/install/ecom-prodshow/usb2isar.html
Lattice User schrieb: > Gibt es schon fertig: Klar, aber warum überhaupt ISA und nicht ganz normal USB?? Gibt ja auch diverse Datenacquise-Systeme von NI usw., gibt eigentlich wenig Grund das selber zu entwickeln...
Programmierer schrieb: > Lattice User schrieb: >> Gibt es schon fertig: > Klar, aber warum überhaupt ISA und nicht ganz normal USB?? Weil er dis ISA Karte schon hat. Und: Bronco schrieb: > Jetzt darf ich herausfinden, ob man das auch ohne DMA lösen > kann, ohne die Hardware zu ändern. > Eine komplette Neuentwicklung der Hardware dauert und stellt auch ein Risiko dar. Eine fertige USB->ISA Bridge ist der Aufwand geringer. Software muss natürlich trozdem angepasst werden. Kosten/Nutzen Analyse macht dann sein Chef.
Bronco schrieb: > Leider hab ich im Netz gar keine Anhaltspunkte gefunden, über was für > Interrupt-Latenzen wir bei Windows sprechen. Man liest zwar immer von > mangelnder Echtzeitfähigkeit, aber gilt das auch für Treiber mit einem > Hardware-Interrupt? Natürlich. Da muss das ganze System mitspielen. Wenn Du einen PIO-IDE-Treiber hast, der beim Lesen/Schreiben eines Sektors per REP INSW/REP OUTSW die Interrupts abstellt, dann bist Du davon natürlich betroffen. Alles schon erlebt. fchk
Ich würde da einen UART ran bauen und das schön seriell mit USB dann in den PC bringen. Gibt durchaus UARTs die 921600 Baud können.
Bronco schrieb: > Es werden kontinuierlich ~240kByte/s übertragen. > Bei meiner Datenrate könnte ich damit 66µs bis 133µs puffern. -gb- schrieb: > Ich würde da einen UART ran bauen und das schön seriell mit USB dann in > den PC bringen. Gibt durchaus UARTs die 921600 Baud können. 240kByte sind aber ca. 2,4MBaud. @ TE: Die 240kByte klingen im PC-Bereich nach nicht viel, wenn sie aber von außerhalb kommen und verlustfrei eingelesen werden müssen ist das schon eine Hausnummer. Ungefähr 0,1 ms Pufferzeit ist unter Windows gar nichts. Windows hat typischerweise Latenzzeiten von 50-100ms und mehr, selber hatte ich schon mal mit fast 1 Sekunde zu kämpfen. Die einzig sinnvolle Lösung sehe ich darin, die ADC-Daten parallel auf einen großen µC mit massig Puffer zu geben und dann mittels USB auf den PC zu übertragen. Wobei da "Full Speed" schon knapp werden dürfte. Eventuell könnte man die Daten vor der Übertragung im µC packen und im PC wieder auspacken. Alternativ einen µC mit USB-HiSpeed nehmen...
:
Bearbeitet durch User
http://www.adlinktech.com/pc-104/index.php http://www.adlinktech.com/PD/marketing/Datasheet/CM1-BT1/CM1-BT1_Datasheet_en_1.pdf Die PC/104-PCs von Adlink benutzen einen LPC-to-ISA-Chip F85226A: http://www.fintek.com.tw/index.php/i-o-controller-and-i-f-management/item/11-f85226a https://en.wikipedia.org/wiki/Low_Pin_Count#ISA-compatible_DMA demnach sollte ein DMA noch drin sein.
Hallo zusammen, erstmal vielen Dank für die ganzen Anregungen. Nachdem ich ein Lösungskonzept mit µC (als Puffer) und USB ausgearbeitet hatte, kam jetzt die Anforderung, dass die Latenz "im Millisekundenbereich" liegen soll. Ich hab im Versuch auf USB z.T. Latenzen im 100ms-Bereich gesehen...
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.