Geschwindigkeitsprobleme SPI wiringPi

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Schönen guten Morgen,

    ich habe ein kleines Problemchen mit meiner SPI Schnittstelle auf dem Raspberry Pi.

    Der Code funktioniert ist aber nicht schnell genug.

    Ich benutze den AD-Wandler AD7266, er besitzt eine Samplerate von 1MSPS.

    Mein Code:

    #include <wiringPi.h>
    #include <wiringPiSPI.h>

    int main(void)
    {
    unsigned char buf[]="0123";
    wiringPiSPISetup(0,31000000);
    while(1)
    {
    wiringPiSPIDataRW(0,buf,32);
    ...
    }
    return 0;
    }

    bei einer Samplerate von 1MSPS müsste ich alle 1us einen Wert bekommen.
    ich habe eine Messung durchgeführt und habe gemessen, dass ich max. alle 50us einen Wert bekomme.

    Hat jemand eine Idee wie ich die Geschichte schneller machen kann?

    Vielen Dank für eure Antworten.

    Mfg Xeriox

    <--Heute ist ein guter Tag zum basteln-->

    Einmal editiert, zuletzt von Xeriox (18. November 2014 um 08:08)

  • Folgende Ansatzpunkte sollten helfen:
    -Umstieg von der wiringPi auf die BCM2835 Bibliothek <Klick mich>
    -unter Umständen hilft bei den Datenraten eine Übertaktung des RPi (vermutlich nur sehr geringe Verbesserungen)
    -hab nur ganz flüchtig ins Datenblatt geschaut, generell schafft der Wandler anscheinend 2MSPS (bei 5V)
    -->Levelshifter TXB0104 verwenden um die volle Wandlerleistung auszunutzen

    lg kobold254

  • Danke kobold254 für deine Antwort.

    Ich werde es mit deiner vorgeschlagenen Library probieren.

    weißt du welche Geschwindigkeiten damit erreicht werden können?

    Hast du Erfahrungen damit?

    wäre ganz nett wenn jemand mal berichten könnte der mit der SPI vom Raspberry Pi arbeitet und damit kontinuierlich eine Geschwindigkeit von über 1MSPS messen kann.

    <--Heute ist ein guter Tag zum basteln-->

  • Mal eine andere Frage an dich kobold254,

    weißt du ob man mit der Library eine SPI an dem Pi als Slave benutzen kann?

    Ich wollte gerne beide Kanäle von dem AD7266 parallel auslesen aber da ist nur eine clk und 2 SPI Data Leitungen.

    <--Heute ist ein guter Tag zum basteln-->

  • Wenn du mal einen Blick in das Datenblatt des BCM2835 Chip wirfst siehst du, dass zwar generell ein SPI-Slave existiert, dieser aber über ganz andere Register und Pins gesteuert wird. Man müsste sich ziemlich weit in die Materie einarbeiten, um diesen zu Nutzen (wenn es mit einem normalen RPi überhaupt möglich ist...)
    Ich würde dir empfehlen beide Datenpakete nacheinander abzuholen, im Datenblatt des AD-Wandlers ist dokumentiert wie
    Falls dir die Performance so nicht ausreicht bleiben dir die Möglichkeiten
    -noch tiefer in die Software einsteigen (direkte Registeransteuerung, optimierten Kernel etc.)
    -an der Hardware zu schrauben (uC zur Pufferung zwischenschalten oder Daten über USB rüberschieben)

    Mal ganz allgemein:
    Welche Anwendung möchtest du realisieren?

    Edit: Du brauchst doch eigentlich auch gar keinen Slave, du bräuchtest zwei Datenleitungen in den RPi, statt eine ;)

    Einmal editiert, zuletzt von kobold254 (19. November 2014 um 17:36)

  • Ich möchte von dem AD7266 die vollen 2 MSPS haben. Im Moment schiebe ich beide Kanäle über einen SPI Kanal zu meinem Raspberry Pi.

    Im Prinzip brauche ich zwei Datenleitungen für meine SPI aber unterstützt das der Raspberry? Und wenn ja wie?

    Wie ich direkt Register ansteuern kann über C habe ich für SPI noch nicht hin bekommen.

    Wo steht im Datenblatt, dass er einen SPI Slave hat? Kannst du mir bitte die Seitennummer sagen?

    Vielen Dank.:danke_ATDE:

    <--Heute ist ein guter Tag zum basteln-->

  • http://www.raspberrypi.org/wp-content/upl…Peripherals.pdf
    Auf Seite 160

    Mit einem normalen RPi steht nur ein SPI-Bus zur Verfügung.
    Entweder du steigst auf einen "Soft-Spi" um, wenn du's geschickt programmierts könnte das möglich sein...
    Oder du wechselst auf das RPi-Compute Module, bei dem du zwei SPI-Schnittstellen nutzen kannst...

    Pinauflistung:
    http://elinux.org/RPi_BCM2835_GPIOs

    Schematic des Compute-Moduls
    http://www.raspberrypi.org/documentation/…1-SCHEMATIC.pdf

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!