[LINUX] [C] IOW56D Fragen und ungereimtheiten....

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
chrischa
Posts: 4
Joined: Wed Sep 19, 2012 5:05 pm

[LINUX] [C] IOW56D Fragen und ungereimtheiten....

Post by chrischa »

Hallo liebe Codemercs Community,

ich habe seit kurzem den IO warrior 56 USB Dongle. Jedoch bekomme ich immer einen Fehler der wohl mit dieser Zeile zusammenhängt: "devHandle = IowKitOpenDevice()" -> anbei mal der Komplette Code drumrum... http://pastebin.com/M3feQDum Die normalen Standard- und Beispielcodes funktionieren alle und der IOwarrior wird richtig erkannt. Nur wenn ich diese Zeile reinnehme, bekomme ich einen Fehler 20 oder so, der mir sagt: "Gerät nicht gefunden". (komischerweise ist das Gerät aber da und wird ohne diese Zeile/ von anderen Programmen erkannt.... )

Mein Ziel ist eigentlich mich per SPI mit einem Funkchip zu verbinden... oder wahlweise auch mit dem Mikrocontroller vor dem Funkchip... allerdings erwartet der RFM02 (HopeRF funkchip) 10 16-bit lange Configurationsbits. Ich habe versucht die zu senden, aber irgendwie sehe ich auf Oszi nichts. Habe auch schon die Forumsuche benutzt, aber (leider) verwenden die meisten Java und Windows, weshalb ich ein extra Thema erstellt habe.

Um möglichst viele Fehlerquellen auszuschließen beschreibe ich noch kurz mein Testsystem. Den IOwarrior habe ich folgendermaßen verbunden:
IOWarrior RFM02
SCK - CLK
MOSI - SDO
MISO - SDI
SS - SS
RDY - nIRQ

Ich habe dabei jetzt den RFM als SPI master gedacht, da der IOwarrior ja keinen Clock erzeugen kann!? Strukturmäßig könnte ich den SS weglassen, da der RFM ja der einzige ist, oder? Weiterhin ist der RFM02 ja ein Sender- das heißt ich brauche auch den MOSI nicht!? D.h. 2 pins Einsparung wären möglich oder klappt es dann erst recht nicht.

Danke schon mal für die Hilfe. =)

LG Christian
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....

Post by Christoph Jung »

Die Mischung aus unserer API und den Linux-USB funktionen ist schon seltsam.

Welches Linux wird denn verwendet?
Wurde die IO-Warrior API installiert?
Ist die 10-iowarrior.rules in den etc/udev/rules.d/ kopiert worden?
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....

Post by Guido Körber »

chrischa wrote:Ich habe dabei jetzt den RFM als SPI master gedacht, da der IOwarrior ja keinen Clock erzeugen kann!? Strukturmäßig könnte ich den SS weglassen, da der RFM ja der einzige ist, oder? Weiterhin ist der RFM02 ja ein Sender- das heißt ich brauche auch den MOSI nicht!? D.h. 2 pins Einsparung wären möglich oder klappt es dann erst recht nicht.
Also für die nächste Überarbeitung des Datenblattes vom IO-Warrior würde mich mal interessieren welche Informationen aus dem Datenblatt zu diesem grundlegenden Fehlverständnis geführt haben?

Es ist absolut unmöglich den IO-Warrior56 als SPI Slave anzusteuern. Der IO-Warrior56 ist ein SPI Master und erzeugt selbstverständlich selber den Takt für die Datenübertragung. /SS kann man bei keinem (ordentlichen) SPI Slave weglassen, weil mit diesem Signal Anfang und Ende einer Kommunikation signalisiert werden. Da der IO-Warrior der Master ist, ist MOSI der Pin über den er seine Daten sendet, auf der Gegenseite geht das an SDI.
chrischa
Posts: 4
Joined: Wed Sep 19, 2012 5:05 pm

Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....

Post by chrischa »

Superschnelle Antwort =) - Ja das ist etwas wild, da ich nach dem "normalen" einrichten und installieren Fehler bekommen habe. Deshalb habe ich dann mit experimentieren angefangen und das irgendwie alles ineinander getan. Das Problem ist, das es etwas unübersichtlich ist. Ein richtiges Linux "howto" oder ein codemercs wiki wäre bestimmt nicht nur für mich hilfreich =)
linux ist "ubuntu lucid lynx 10.04" bzw 12.04 ... beide weit nach kernel 2.62.
IOwarrior rules habe ich kopiert und iowarrior.h und iowkit.h liegen im Verzeichnis...

Danke schon mal für die Antworten =)

Christian

Edit:
Guido Körber wrote:
chrischa wrote:Ich habe dabei jetzt den RFM als SPI master gedacht, da der IOwarrior ja keinen Clock erzeugen kann!? Strukturmäßig könnte ich den SS weglassen, da der RFM ja der einzige ist, oder? Weiterhin ist der RFM02 ja ein Sender- das heißt ich brauche auch den MOSI nicht!? D.h. 2 pins Einsparung wären möglich oder klappt es dann erst recht nicht.

Also für die nächste Überarbeitung des Datenblattes vom IO-Warrior würde mich mal interessieren welche Informationen aus dem Datenblatt zu diesem grundlegenden Fehlverständnis geführt haben?
Hier habe ich einfach nicht gründlich recherchiert...
habe die Pins jetzt so geändert das es stimmen sollte. - Danke dafür =)
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....

Post by Christoph Jung »

Für die installation des IO-Warrior unter Ubuntu folgendes ausführen (bezogen auf den iowkit Ordner):
  • cd libiowkit-1.5.0
    sudo ./configure
    sudo make
    sudo make install
Zur vollstängikeit halber nicht vergessen die Regeln kopieren (im libiowkit-1.5.0 Ordner):

sudo cp 10-iowarrior.rules /etc/udev/rules.d/

Wenn alles ohne Fehler funktioniert sollte das IOWKIT ins System installiert sein. Ab dem Linux Kernel 2.6 ist der
IO-Warrior (mit den Standard Produkt IDs) im System integriert. Die Programme, die man also erstellt sollten auch Ohne die Installation
des SDKs funktionieren.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
chrischa
Posts: 4
Joined: Wed Sep 19, 2012 5:05 pm

Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....

Post by chrischa »

Christoph Jung wrote:Für die installation des IO-Warrior unter Ubuntu folgendes ausführen (bezogen auf den iowkit Ordner):
  • cd libiowkit-1.5.0
    sudo ./configure
    sudo make
    sudo make install
Zur vollstängikeit halber nicht vergessen die Regeln kopieren (im libiowkit-1.5.0 Ordner):

sudo cp 10-iowarrior.rules /etc/udev/rules.d/

Wenn alles ohne Fehler funktioniert sollte das IOWKIT ins System installiert sein. Ab dem Linux Kernel 2.6 ist der
IO-Warrior (mit den Standard Produkt IDs) im System integriert. Die Programme, die man also erstellt sollten auch Ohne die Installation
des SDKs funktionieren.
Danke wieder für die Superschnelle Antwort.. allerdings habe ich das (,wie schon oben geschrieben,) bereits getan ... wenn das vielleicht der Verweis sein sollte dass ich das nochmal machen soll, kann ich dies gerne tun..
kann ich dann einfach iowkit.h und iowarrior.h überall einbinden oder muss ich die dann trotzdem kopieren. Da nach meiner bisherigen Installation ohne das hinterherkopieren der headerdateien gar nichts ging.

MfG Christian
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....

Post by Christoph Jung »

Nein das war keine Aufforderung. Das war nur der Vollständigkeit halber.

Mit welcher Entwicklungsumgebung wird denn gearbeitet?
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....

Post by Christoph Jung »

Hier mal ein kurzes Beispiel (zum IO-Warrior40) welches ausschließlich die IOW-Kit Funktionen nutzt.

Code: Select all

//    compile with :
//    gcc -Wall -g -liowkit <FILE>.c iowkit.c -o <AppName>
//
//    start with   : ./<AppName>

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>
#include <linux/ioctl.h>
#include <errno.h>
#include <sys/time.h>
#include <time.h>

#include <iowkit.h>
#include <iowarrior.h>

 BOOLEAN WriteSimple(IOWKIT_HANDLE devHandle, UCHAR value)
 {
   IOWKIT40_IO_REPORT rep;

   // Init report
    memset(&rep, 0xff, sizeof(rep));
    rep.ReportID = 0;
    rep.Bytes[3] = (UCHAR) value;

    return IowKitWrite(devHandle, IOW_PIPE_IO_PINS,(PCHAR) &rep, IOWKIT40_IO_REPORT_SIZE) == IOWKIT40_IO_REPORT_SIZE;
 }

//Random for Set LEDs
int myrand(void)
{
    srand(time(NULL));
    return (int)(((rand()/(float)RAND_MAX)*255)+0);
}

int main (void)
{
     IOWKIT_HANDLE devHandle;
     unsigned short serial[9];
     char serial_t[9];
     int j;

    //Öffne IO-Warrior
     devHandle = IowKitOpenDevice();		// devHandle ist der Erste IO-Warrior, der gefunden wurde !
    //int numIows = IowKitGetNumDevs();			// Anzahl der IO-Warrior


    if(devHandle == NULL)
    {
        printf( "iowarrior open failed %d\n",errno );
        return 0;
    }

     //Bsp. für ProductID abgleich
    if(IowKitGetProductId(devHandle) == IOWKIT_PRODUCT_ID_IOW40)
        printf( "Found IO-Warrior40\n" );

    IowKitGetSerialNumber(devHandle, serial);	// Seriennummer ermitteln und in "serial" speichert

    /*Work aroung for Serial*/
    for (j = 0; j < 9; j++)
      serial_t[j] = serial[j];

    printf("Serial = %s\n", serial_t);
    printf("Revision = %04x\n",(unsigned int) IowKitGetRevision(devHandle));

    int i;
    for(i=0; i<10; i++)
    {
        //Schreibfunktion (siehe oben)
        WriteSimple(devHandle, myrand());
        usleep(500000);
    }


    //Schließen !!!!!!!
    IowKitCloseDevice(devHandle);

     return 1;
}
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
chrischa
Posts: 4
Joined: Wed Sep 19, 2012 5:05 pm

Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....

Post by chrischa »

Hallo, ich verwende ganz normal gedit bzw. vim mit Syntax highlight. Habe aber schon überlegt eclipse zu nehmen... zwecks debugging etc.

zu dem Beispiel welches Sie gepostet haben: Hat das einen speziellen Grund warum das Beispiel für den iow40 ist? ... ich habe den 56 und im Beispielcode gab es dafür eine extra Routinen - oder ist das egal?

Vielen Dank,
Christian
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....

Post by Christoph Jung »

Ist im Prinzip egal. Aber beim IO-Warrior40 Starterkit sind LEDs drauf und das ist zum Testen immer ganz Praktisch. Da muss ich mir nichts hier zusammenbasteln oder lange suchen.
Beim 56er sind halt die report Variablen anders und halt die Anzahl der Ports und Bytes. Alles andere ist gleich, es geht hauptsächlich darum zu zeigen wie man es machen sollte/könnte.
Es fehlen natürlich Sicherheitsabfragen wie z.B. Hat das Write geklpatt, ist der IO-Warrior noch da und dergleichen.

Ich nutzt QT und den CodeLite Editor. Aber Eclipse oder Netbeans sind auch gute Compiler.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
DonTeckie
Posts: 1
Joined: Tue Oct 30, 2012 6:43 pm

Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....

Post by DonTeckie »

Christoph Jung wrote:Hier mal ein kurzes Beispiel (zum IO-Warrior40) welches ausschließlich die IOW-Kit Funktionen nutzt.
...
Danke für das gute Beispiel, damit lässt sich auf jeden Fall arbeiten!
Mal sehen wie weit ich komme.
Post Reply