Forum: PC-Programmierung Wie PCMCIA schnittstelle programmieren?


von Wolfgang (Gast)


Lesenswert?

Als es den ISA Bus noch gab, konnte man durch die Wahl entsprechender
Adressen noch rel. leicht z. B. die Parallelschnittstelle programmieren
(bestimmte Leitungen als Ausgang oder Eingang benutzen). Für die PCMCIA
schnittstelle, die ja an vielen Notebooks vorhanden ist, habe ich
leider noch keine Beschreibungen oder Literatur gefunden.
Was will ich machen? Ich möchte eine CF- Karte mit einem in Delphi
geschrieben Programm byteweise lesen bzw. beschreiben.
Wer kennt sich mit der PCMCIA schnittstelle aus und könnte mir
entsprechende Literatur empfehlen oder wo könnte man sonst noch
nachlesen?
MfG
Wolfgang

von Rufus T. Firefly (Gast)


Lesenswert?

Um mit PCMCIA-Devices zu kommunizieren, muss man mit dem
Cardbus-Controller kommunizieren.
Dazu muss für DOS oder alte Windows-Versionen (3.11 etc.) ein "CardBus
enabler" verwendet werden.
Der ist natürlich bei neueren Windows-Versionen eh' Bestandteil des
Betriebssystems. Dieser "CardBus enabler" detektiert angeschlossene
Devices und mappt deren I/O- und Speicheradressen in den Adressraum des
Rechners. Mit einer sicherlich irgendwo dokumentierten
Programmierschnittstelle kann man dieses Mapping auch in Erfahrung
bringen.

Erschwerend kommt allerdings hinzu, daß Notebooks seit längerem gar
keine reine PCMCIA-Schnittstelle mehr haben (die entsprach im Grunde
genommen einem Plug-und-Play-fähigem 16-Bit-ISA-Bus), sondern eine
32-Bit-Cardbus-Schnittstelle. Die entspricht ziemlich exakt dem
PCI-Bus.

Für Deine spezielle Anwendung ist das aber gar nicht erforderlich; eine
CF-Karte, die in einem entsprechenden Adapter in einem PCMCIA-Slot
steckt, ist wie eine Festplatte anzusprechen.
Steck' den ganzen Krempel mal in Dein Notebook und sieh' Dir an, was
so alles im Gerätemanager auftaucht.
Sofern die CF-Karte mit FAT16 oder ähnlichem formatiert ist, taucht
diese als Wechsellaufwerk im System auf.
Ist sie nicht formatiert, lässt sie sich - zumindest unter den
ernstgemeinten Windowsversionen - als "Rawdevice" ansprechen,
entsprechende Hinweise finden sich beispielsweise unter
msdn.microsoft.com

Exakt was bezweckst Du mit Deiner Programmierung?

von Wolfgang (Gast)


Lesenswert?

@ Rufus T. Firefly
Ich verfolge im wesentlichen folgendes Ziel: Ich möchte die
Funktionsweise der PCMCIA -Schnittstelle so detailliert kennen lernen,
dass ich diese das macht, was ich will, um damit auch Eigenbaugeräte
anschließen zu können. Ich denke da z. B. an A/D Wandler, Geräte der
MSR- Technik, oder, wie schon genannt, Speicherkarten. Bisher habe ich
das mit der  Parallelschnittstelle  gemacht, oder an einem alten
Computer gleich am ISA Bus (zusätzliche Karte gebaut). Als besonderen
Vorteil am ISA Bus hatte ich die Möglichkeit der 16 Bit breiten Aus-
bzw. Eingänge gesehen. Bei der Parallelschnittstelle gibt es nur 8 Bit
bzw. 5 Bit.
Aufgrund der vielen Anschlüsse an der PCMCIA -Schnittstelle dachte ich,
 dass hier eine größere Verarbeitungsbreite möglich ist.
Dass es nicht so einfach sein wird, wie in DOS z. B. mit Pascal $378:=
F0h und damit führen die 4 oberen Leitungen H Pegel, das hatte ich mir
schon gedacht.
Das größte Problem aber ist, dass ich zu PCMCIA nichts richtiges finde.
Da ich zu wenig Ahnung habe, verwende ich vielleicht auch nicht die
richtigen Suchbegriffe.
Vielleicht hast du, oder auch jeder andere, noch einige Tipps für
mich.
MfG
Wolfgang

von Rufus T. Firefly (Gast)


Lesenswert?

Na, das ist was anderes.

Dich interessiert, wie man Hardware an PCMCIA anschließt - Du solltest
Dich allerdings gleich von der Vorstellung trennen, daß das eine
"Schnittstelle" im Sinne einer Druckerschnittstelle o.ä. handelt. Das
ist ein Bus, der die Adress- und Datenleitungen des Prozessors nach
außen führt - eben genau so, wie's der alte ISA-Bus auch tat.
Nur ist aufgrund der Plug-and-Play-Funktionalität und der dadurch
erforderlichen Resourcezuweisung das Protokoll um einiges
komplizierter, was durch die Einführung des 32-Bit-Cardbus (der von der
Performance her dem PCI-Bus entspricht) nicht einfacher wurde.

Sieh' Dir mal folgendes Datenblatt an
http://www.oxsemi.co.uk/download/standard/dsheets/oxcb950ds.pdf, das
beschreibt einen seriellen Schnittstellenbaustein mit
Cardbus-Interface.

Die Programmierung von an PCMCIA/Cardbus angeschlossener Hardware ist
selbst kein Problem, dies erfolgt genauso über I/O- und
Speicherzugriffe, wie bei anderer Hardware auch. Beides geschieht unter
Betriebssystemen mittels Devicetreiber - in einem Usermode-Programm ist
ein Zugriff, so wie Du ihn von DOS-Pascal her kennst, nicht möglich.


PCMCIA und CardBus sind bei der PCMCIA beschrieben - dieses Akronym
steht nämlich nicht für "People can't memorize computer industry
acronyms", sondern für "Personal Computer Memory Card International
Association". www.pcmcia.org führt Dich auf weitere Informationen.

Ich würde diesen Weg allerdings sofort wieder verlassen.
Einerseits ist PCMCIA-Hardware für Eigenbauten sehr unzugänglich,
andererseits ist diese ohne Zusatzaufwand nur mit Notebooks nutzbar,
und obendrein erfordert ihre Nutzung erheblichen Aufwand in Sachen
Devicetreiberprogrammierung.
(Sehr unzugänglich: Platinen müssen etwa Kreditkartengröße haben und
dürfen mitsamt Bestückung und Gehäuse gerade mal 5mm dick werden. Die
68polige Buchse ist auch nicht gerade für Handbestückung geeignet.)

Um ein Cardbus-Interface zu realisieren, muss ein FPGA oder
vergleichbares verwendet werden (das ist PCI gar nicht so unähnlich),
eventuell stellen Firmen wie PLX (www.plxtech.com) auch Bridge-Chips
her, die einem das Bushandling abnehmen.
Jedenfalls ist das ohne sehr viel Erfahrung und einen nicht mit
Hobbymitteln finanzierbaren Messgerätepark nicht realisierbar - Du
kannst Dir ja trotzdem mal http://www.sycard.com/proto150.html
ansehen.

Nein, ich würde einen anderen Weg beschreiten:
Für schnelle I/O-Interfaces bietet sich die Nutzung von USB an; die
Devicetreiberprogrammierung kann hier entfallen, wenn auf isochrone
Datenübertragung verzichtet wird, und die erzielbaren Datenraten (~ 1
MByte/sec bei USB1.1, ~40 MByte/sec bei USB2.0) sollten auch genügen.
Bei Hardwarefehlern zerschießt man sich nicht gleich das Notebook, und
der Aufbau selbst ist durch ein handhabbares Kabel vom Notebook
getrennt; Aufbauten können in vernünftigen Gehäusen untergebracht
werden, so daß Bedienelemente und vernünftige Steckverbinder eingesetzt
werden können.
Sieh Dir doch mal an, was für ekelerregende
SupraSubMicroMiniatursteckverbinder verwendet werden müssen, um an
PCMCIA-Karten irgendwas anzuschließen - traust Du solchen Steckern eine
mechanische Beanspruchbarkeit zu?

Dank libusb bzw. libusb-win32 ist eine Programmierung von USB-Devices
auch ohne Programmierung von Devicetreibern möglich.
Microcontroller mit USB-Interface gibt es in allen Größen und
Leistungsklassen, so daß Dir da eigentlich alle Möglichkeiten
offenstehen sollten.

von Wolfgang (Gast)


Lesenswert?

@ Rufus T. Firefly
Ich danke dir für die sehr ausführliche Beschreibung der Materie. Dass
die ganze Sache so umfangreich ist, hätte ich aber nicht gedacht.
Zunächst werde ich mir die genannte Literatur herunterladen, um meinen
Horizont noch etwas zu erweitern, aber so wie es aussieht, ist die
Problematik so umfangreich, dass dann kaum noch Zeit für andere Sachen
bleibt. Und Messmittel (sollte man dann auch richtig bedienen und
bewerten können) sowie Steckerverbinder stehen mir auch nicht zur
Verfügung.
An USB hatte ich auch schon gedacht. Da soll es einen IS geben, der
sich I/O Warrior nennt und 32 I/O Pins hat, aber der ist rel. langsam.
< Dank libusb bzw. libusb-win32 ist eine Programmierung von
USB-Devices
auch ohne Programmierung von Devicetreibern möglich.
Microcontroller mit USB-Interface gibt es in allen Größen und
Leistungsklassen, so daß Dir da eigentlich alle Möglichkeiten
offenstehen sollten.>
Dazu einige Fragen:  Sind libusb bzw. libusb-win32 Bibliotheken und
wenn ja, zu welcher Programmiersprache gehören diese?
Da ich nur von den Mikrokontrollern 8051 oder MSP430 etwas Erfahrung
und dazu die Compiler sowie Programmer habe, würde ich diesen Familien
den Vorzug geben.
Bei MSP430 gibt es nach meinen Kenntnissen nur Verbindungen über URART,
SPI bzw. I²C.
Bei den 8051er hatte ich nur solche ohne USB verwendet. Gibt es hiervon
Typen, die verwendbar wären?
MfG
Wolfgang

von Rufus T. Firefly (Gast)


Lesenswert?

libusb(-win32) ist, wie das lib im Namen impliziert, in der Tat eine
Bibliothek. Die win32-Variante ist eine DLL, die also aus den üblichen
unter Windows geläufigen Programmiersprachen heraus ansprechbar sein
sollte.
Näheres unter http://libusb-win32.sourceforge.net/
"* To use libusb-win32 in your own programs include the supplied
header file usb.h, and link against the import library (libraries for
GCC, BCC, and MSVC are available)"

Aus dem erwähnten C-Headerfile lassen sich auch entsprechende
Informationen ableiten, um die DLL aus Programmiersprachen wie Delphi
oder VB verwenden zu können.

Es könnte allerdings hilfreich sein, nach irgendeinem Tutorial oder
ähnlichem dafür zu suchen; ganz trivial ist das in der Anwendung
nicht.

Microcontroller mit eingebautem USB gibt es ziemlich viele; aus der Dir
vertrauten MCS51-Welt empfehlen sich die EzUsb-Chips von Cypress
(vormals AnchorChip). Das sind USB-Controller, bei denen die Firmware
dynamisch über USB geladen werden kann, ein bei der Softwareentwicklung
sehr praktisches Feature.
http://www.cypress.com/portal/server.pt?space=CommunityPage&control=SetCommunity&CommunityID=209&PageID=259&fid=13&rpn=AN21xx&;
Cypress stellt diese in unterschiedlichsten Varianten für USB1.1 und
USB2.0 her.

Eine einfachere Alternative besteht in der Verwendung eines
USB-Interface-Bausteins von FTDI, die können über eine serielle oder
parallele Schnittstelle mit einem µC kommunizieren, dabei sind recht
hohe Datenraten erzielbar (beim Parallelinterface mehrere hundert
kByte/sec).
Auf der PC-Seite sind diese Bausteine entweder direkt als virtuelle
serielle Schnittstellen betreibbar oder aber über spezielle
Interface-DLLs mit erweiterten Funktionen ansprechbar.
Diese Bausteine (FT232 und FT245) wurden in diesem Forum bereits des
öfteren erwähnt.

von Wolfgang (Gast)


Lesenswert?

@ Rufus T. Firefly
Zu den IS FT232-FT245 hatte ich mir schon mal im Sommer einiges
heruntergeladen, aber dann nicht weiter verfolgt, da ich annehme,  dass
ich damit keine zusätzliche Leitungen im Vergleich zu der
Parallelschnittstelle gewinne. Um z.B. eine CF-Karte anschließen zu
können, werden knapp 20 Leitungen benötigt. FT245 hat 8  I/O Leitungen.
Man müsste also noch weitere IS dazwischenschalten, um die 20 Leitungen
bedienen zu können. Und das wollte ich mit meiner ursprünglichen Frage
zu PCMCIA vermeiden. Aber den Zahn hast du mir erst einmal gezogen.
Zur Zeit sehe ich deshalb nur einen günstigen Weg für eine CF-Karte:
CF-Karte in den PCMCIA-Schacht, mit z.B. WINHEX lesen, und dann in eine
Datei kopieren, die dann weiter bearbeitet werden kann.
MfG
Wolfgang

von Rufus T. Firefly (Gast)


Lesenswert?

Du weisst, daß es CF-Lesegeräte mit USB-Interface gibt? Und daß die so
gut wie nichts kosten?

von Wolfgang (Gast)


Lesenswert?

Ja, habe ich, 6in1 für USB

von Marco D (Gast)


Lesenswert?

Hallo,
ich versuche gerade die libusb_win32 und die entsprechende dll mit
Delphi zu benutzen. Hat irgendjemand Erfahrung damit? Habe bereits
einen Teil der usb.h übersetzt und usb_init(), get_busses() get_devices
funktionieren und liefern Werte, allerdings steigts dann bei usb_open
aus. Ich vermute dass noch Fehler beim übersetzen der Datenstrukten
sind. Wäre echt nett, falls jemand was änhnliches macht oder mal nen
Blick drauf werfen könnte ;-)
MfG Marco

von Jörg (Gast)


Lesenswert?

Also, zu PCMCIA muss ich jetzt doch noch was sagen.

1994 habe ich mit einer Speicheroszilloskop-Karte meinen Doktor
gemacht. Acht Monate habe ich für das gesamte Projekt benötigt.

Ausgangspunkt war ein alter, zerlegter Laptop (die Dinger hiessen
damals noch nicht "Notebook" :-) ). An diesem Gerät habe ich den Bus
zum PCMCIA abgehört. Irgendwann habe ich auch die Spec zum PCMCIA
bekommen, und angefangen, eigene Elektronik anzuschliessen.

Während meiner Arbeit sind mehrere Firmen auf mich aufmerksam geworden,
und ich habe langsam Unterstützung erhalten.

Letztendlich habe ich Engineering-Samples eines PC-Card-Controllers
bekommen, und dazugehörige C-Libs. Damit war es dann kein Problem mehr,
die Socket-Services zu programmieren.

Am Ende hatte ich nicht nur eine Speicheroszilloskop-Karte, sondern
eine POST-Code-Karte für PCMCIA war mit abgefallen :-) . Und ein
mehrjähriger Auslandsaufenthalt;  habe dann für National Instruments
gearbeitet. Lang ist's her...

Also, ich empfinde den PCMCIA bzw. heute PC-Card als nicht zu
kompliziert. Aber es braucht schon etwas Zeit, das "Ding" in den
Griff zu bekommen.

Jörg.

von Wolfgang (Gast)


Lesenswert?

@Hallo Jörg,
es ist ja schön zu wissen, dass Du dich im Rahmen Deiner Doktorarbeit
u. a. mit der PCMCIA-Materie beschäftigt hast und dass Du im Ausland
gearbeitet hast.
Aber was willst Du uns damit sagen?
Wie wäre es, wenn Du uns mit Deinem Erfahrungsschatz unterstützen
könntest.
< An diesem Gerät habe ich den Bus zum PCMCIA abgehört. Irgendwann habe
ich auch die Spec zum PCMCIA bekommen, und angefangen, eigene Elektronik
anzuschliessen>
Hieraus schließe ich, dass Du vermutlich das Wissen hast, welches wir
suchen.
Vielleicht kannst Du aus Deiner Doktorarbeit  etwas anhängen.
Also, was ich brauche,  sind konkrete Angaben, wie PCMCIA funktioniert
und wie kann ich zum Schluss einzelne Leitungen auf 1 oder 0 setzen
bzw. wie kann ich Daten empfangen.
Falls es für das Forum zu  umfangreich oder uninteressant ist, würde
ich mich auch über eine  E-Mail freuen.
Mit freundlichen Grüßen
Wolfgang

von Michael (Gast)


Lesenswert?

Hallo,

habe gerade diese Beiträge mit großem Interesse verfolgt und möchte an
Jörg appellieren, seine Erfahrungen hier mit uns zu teilen.

Auch mich interessiert seit längerem die Funktionsweise des
PCMCIA-Busses um vielleicht auf diese Art und Weise eigene Hardware mit
dem PC zu verbinden. Jedoch habe ich noch nix rechtes gefunden, was mir
einen Einstieg in die Programmierung auf der PC-Seite liefert. Und da
ich mich in der Treiberprogrammierung noch nich auskenne, war das immer
die große Abschreckung.

Gruß Michael

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.