www.mikrocontroller.net

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


Autor: Sascha F. (popdog)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha F. (popdog)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <fx2.h>
#include <fx2regs.h>


void main(void) {

        PORTACFG = 0x00;  // PORTA als normale I/O
        OEA = 0xFF;       // PORTA = Output
        IOA = 0xAA;       // 0xAA an PORTA ausgeben


        while(1);
}

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?

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurz die Header überflogen....

versuch mal ein
#define ALLOCATE_EXTERN

vor den Includes.

Autor: Sascha F. (popdog)
Datum:

Bewertung
0 lesenswert
nicht 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.source...

...und jetzt funktioniert alles wie gedacht. Auch der Download via 
fxload von Linux aus!

Jetzt kommt der schwierige das: der USB Kram...

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sascha F. (popdog)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.