Forum: Mikrocontroller und Digitale Elektronik Cypress EZ-USB FX2 unter Linux


von Sascha F. (popdog)


Lesenswert?

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?

von Εrnst B. (ernst)


Lesenswert?

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

von Sascha F. (popdog)


Lesenswert?

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?

von Εrnst B. (ernst)


Lesenswert?

Kurz die Header überflogen....

versuch mal ein
#define ALLOCATE_EXTERN

vor den Includes.

von Sascha F. (popdog)


Lesenswert?

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...

von Christian R. (supachris)


Lesenswert?

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.

von Εrnst B. (ernst)


Lesenswert?

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.

von Sascha F. (popdog)


Lesenswert?

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