Ich habe hier noch mehrere Platinen (Braintechnology USB Interface V2.5) mit einem Cypress EZ-USB FX2 (CY7C68013-59PVC) Mikrocontroller. Dieser hat ein eingaubtes High-Speed USB 2.0 Interface und eignet sich somit ideal fuer mein Projekt. Ich moechte mobil Daten von einigen Sensoren aufzeichnen. Die Daten sollen sofort auf meinem Notebook weiterverarbeitet werden. Da dieses aber ein Legacyfree-Notebook ist, ist der USB-Anschluss die einzige Wahl (wobei die Lagacy-Schnittstellen wahrschlich auch nicht schnell genug waeren). Auf dem Chips ist wohl schon so eine Art Beispiel-Firmware drauf. Es gibt dazu eine Windows-DLL, die die Ansteuerung der I/O-Ports vom Rechner aus ermoeglicht. Nur ich moechte das Teil unter Linux zum Laufen bringen. Ausserdem moechte ich gerne eine neue Firmware schreiben, die selbststaendig serielle ADCs ausliest und die Sensoren und Schrittmotoren steuert. Ich koennte die Ansteuerung auch per Software vom Hostsystem aus machen, aber die Loesung mit der eigenen Firmware ist sauberer und deutlich schneller. Hat schonmal jemand den Controller unter Linux eingesetzt? Gibt es einen Treiber fuer Linux?
Ich hab mal mit der Vorgängerversion gearbeitet (Version 1.3 glaubich) mit dem AN2131 drauf. C-Code lies sich mit SDCC übersetzen, Firmware-Upload ging mit "fxload". Wenn der FX2 immernoch einen '51er Kern enthält, sollte der SDCC dafür gehen, und fxload unterstützt auch den FX2. /Ernst
Dnake fuer die Tips. Leider bekomme ich es nicht hin, einen Wert auf einem I/O-Port auszugeben. Ich habe diese Seite gefunden: http://www.danielclemente.com/placa_pi/index.en.html Ich habe dann die Header-Dateien fx2.h und fx2regs.h heruntergeladen und folgenden Testcode geschrieben:
1 | #include <fx2.h> |
2 | #include <fx2regs.h> |
3 | |
4 | |
5 | void main(void) { |
6 | |
7 | PORTACFG = 0x00; // PORTA als normale I/O |
8 | OEA = 0xFF; // PORTA = Output |
9 | IOA = 0xAA; // 0xAA an PORTA ausgeben |
10 | |
11 | |
12 | while(1); |
13 | }
|
Ich habe den Code mit SDCC kompiliert (sdcc -I. fx2test.c), aber es kommt folgende Meldung: ?ASlink-Warning-Undefined Global '_PORTACFG' referenced by module 'fx2test' Eine ihx-Datei wird trotzdem erzeugt. Diese habe ich mit packihx fx2test.ihx > fx2test.hex umgewandelt und mittels fxload uebertragen. Nur am Port tut sich nichts. Ich habe es mit dem Uebertragen auch unter Windows mittels Cypress Control Center probiert. Ebenfalls keine Reaktion. Was mache ich falsch?
Kurz die Header überflogen.... versuch mal ein #define ALLOCATE_EXTERN vor den Includes.
Irgendetwas stimmt mit der fx2regs.h von der Webseite nicht. Ich habe folgende fx2regs.h genommen: http://www.mail-archive.com/sdcc-user@lists.sourceforge.net/msg00151.html ...und jetzt funktioniert alles wie gedacht. Auch der Download via fxload von Linux aus! Jetzt kommt der schwierige das: der USB Kram...
Naja, die Header sind unterschiedlich für Keil und SDCC. Musst halt den passenden nehmen. Ansonsten ist es anhand der Beispiele recht einfach, den USB Kram aufzusetzen. Zur Kommunikation müsste unter Linux auch die libusb funktionieren. Sind ja rudimentärste USB Kommandos an die Endpoints.
USB-Treiber-Entwicklung ist unter Linux eh recht angenehm. Mit LibUSB und einer Scriptsprache hat man sich schnell einen Treiber zum testen zusammengestöpselt, und mit Wireshark+usbmon kann man die USB-Kommunikation schön mitloggen und auswerten.
Stimmt. LibUSB ist recht angenehm... Dahingegen ist die Entwicklung von Kernel-Treibern nicht ganz so entspannend. Ich habe mal fuer ein embedded-System einen Linuxtreiber fuer eine spezielle I/O-Karte geschrieben. Getestet in einem normalen System. Da musste ich den Reset-Taster anschliessen.
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.