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
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?
@ 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
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.
@ 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
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.
@ 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
Du weisst, daß es CF-Lesegeräte mit USB-Interface gibt? Und daß die so gut wie nichts kosten?
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
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.
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.