SPI Delay-Problem mit Raspberry Pi

Gast #3533026
Lesenswert?
• ▲
▼
Hallo,

ich habe ein Problem mit meiner SPI Kommunikation eines Raspberry Pi`s.
Konkret geht es darum viele Messwerte, die mit einem FPGA erfasst 
werden, sehr schnell an einen Raspberry zu übermitteln, um dort die 
eigentliche Auswertung und anschließende Visualisierung vorzunehmen.

Für die Kommunikation verwende ich auf Raspberry-Seite den Standard SPI 
Linux-Treiber .

Die SPI Schnittstelle habe ich wie folgt parametriert:
1
static const char *device = "/dev/spidev0.0";
2
static uint8_t mode = 1;
3
static uint8_t bits = 8;
4
static uint32_t speed = 30000000;
5
static uint16_t delay = 0;

Die Kommunikation mit dem FPGA funktioniert. Jedoch habe ich 
festgestellt, dass die Zeit, bis der MISO Port nach dem letzten 
gesendeten Bit auf High schaltet, sehr lange dauert (rote Pfeile). Auch 
variieren diese Delays je nach Sendezeitpunkt eines SPI-Telegramms 
stark.

Wie schon erwähnt funktioniert die Kommunikation, ist aber zeitlich sehr 
ineffektiv, da 20 bis 80us lange Pausen enthalten sind, bevor ein neues 
Telegramm geschickt werden kann. Dadurch habe ich eine deutlich 
langsamere Kommunikation bzw. effektive Datenrate...

Kann mir jemand einen Tipp geben, wie ich diese Delays verkürzen kann, 
sodass die Telegramme näher zusammenrutschen und eine schnellere 
Kommunikation stattfinden kann?

Oder hat jemand bessere Erfahrungen mit WiringPi o.ä. gemacht?

Vielen Dank für eure Hilfe!

Viele Grüße, MemY
Angehängte Dateien:
Gast #3534425
Lesenswert?
• ▲
▼
Also irgendwie bekomme ich den Treiber von Martin Sperl nicht zum 
laufen...

Mir fehlen sämtliche Header (Auszug von spi-bcm2835dma.c):
1
#include <linux/clk.h>
2
#include <linux/completion.h>
3
#include <linux/delay.h>
4
#include <linux/err.h>
5
#include <linux/interrupt.h>
6
#include <linux/io.h>
7
#include <linux/kernel.h>
8
#include <linux/module.h>
9
#include <linux/of.h>
10
#include <linux/of_irq.h>
11
#include <linux/of_device.h>
12
#include <linux/spi/spi.h>

Kann mir jemand sagen, wie ich den Treiber korrekt eingebunden bekomme?

Vielen Dank,
MemY
Gast #3535196
Lesenswert?
• ▲
▼
Hallo;

es mag dein Problem nicht lösen und ist auch keine konkrete Antwort auf 
deine Konkrete Frage, jedoch:

Der Rasperry Pi hat keine SPI Schnittstelle, das Timing au fden Pins ist 
"Hand Made" ?


Wenn Ja, meine Meinung (neben RISC OS ....)

Verwende zur Datenerfassung einen µC der eine SPI Schnittstelle besitzt.
Das ist dein "Schnittstellenbaustein".

Die Weitergabe an den Pi kann dann über andere Schnittetellen erfolgen:
 - GPIO, TCP/IP/USB..

nur ein Vorschlag:
Den RAM des Kontrollers könntes du als Buffer verwenden.


Wenn du bei Linux Lösungen bleiben möchtest:

Ich weis nicht ob der Pi geeignet ist:

Es gibt eine vielzahl von Embedded Linux geeigneten Controllern, die 
eine Anzahl von Schnittstellen (SPI,,,,,) schon auf der Chipfläche 
integruert haben.


Wie gessagt: Löst dein Problem nicht, nur ideen.

Gruß
Persönliche Seite #3535269
Lesenswert?
• ▲
▼
>
> Der Rasperry Pi hat keine SPI Schnittstelle, das Timing au fden Pins ist
> "Hand Made" ?
>

Der Prozessor hat sogar zwei SPI-Busse:

http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf

wobei aber nur ein SPI Bus über den PIN-header herausgeführt ist.

BTW: Das Delay Problem habe ich auch beobachtet:
http://www.raspberrypi.org/forum/viewtopic.php?f=44&t=7027&start=103
bzw jemand anders:
http://www.raspberrypi.org/phpBB3/viewtopic.php?t=38587&p=319353

Siehe auch:
http://www.raspberrypi.org/forum/viewtopic.php?f=44&t=19489&hilit=notro+spi


Den SPI-DMA Treiber habe ich mir aber im Detail nicht so genau 
angeschaut.
Aus den Erinnerungen heraus meine ich aber gesehen zu haben, das er
wesentlich geringere Delays hat.

Ich würde mir aber auch:
http://wiringpi.com/reference/spi-library/

anschauen. Ggf. benutzt die Lib ein paar Tricks, um die Delays
zu umgehen.
Gast #3537839
Lesenswert?
• ▲
▼
Hey Leute!

Vielen Dank für die zahlreichen Posts!

Die Idee von Marc Rupprath ist zwar berechtigt, aber in meinem 
Anwendungsfall ungünstig (wegen zusätzlicher Hardware, Aufwand, Kosten, 
etc.)

Die von Gerd B. erwähnte wiringPi Lib habe ich schon ausprobiert, jedoch 
genau mit dem selben Verhalten...

Dann werde ich doch noch den Treiber von Martin Sperl anschauen müssen?

Viele Grüße
MemY
Beitrag #5680206 wurde von einem Moderator gelöscht.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.