SPI mit Raspberry Pi2

OP #4078162
Lesenswert?

Hallo zusammen

Ich möchte mit dem RPI2 per SPI mit einem STM32 kommunizieren. Für den 
Anfang habe ich mir überlegt, testweise den LIS3DSH Sensor auf dem STM32 
Discovery Board auszulesen, später sollte dann der STM32 als Slave 
dienen.

Nun die Frage: was brauche ich alles auf dem RPI damit ich mit SPI 
kommunizieren kann ? Die Software auf dem RPI wollte ich mit dem QT 
Creator programmieren.

Ich habe schon gegoogelt, aber da gibt es relativ viele Varianten, dass 
ich langsam den überblick verloren haben.
OP #4079041
Lesenswert?

Super bestens ! Also mit dem wiringpi funtkioniert auf jedenfall mal das 
einfache schreiben auf einen gpio.

nun zurück zum spi und dem stm32 discovery board. habe noch ein kleines 
problem: und zwar sind die pegel am RPI 3.3V und am discovery 3V :-(

gemäss datenblatt vom LIS3DSH dürfen die signale max 0.3V grösser als 
VDD_IO sein.  Was kann ich da machen ? einfach einen wiederstand 
dazwischen, oder muss da wirklich ein pegelwandler dran ?
OP #4079914
Lesenswert?

Also das Problem mit den Pegeln hat sich erledigt.

Mit der wiringPI lib kann ich jedoch den SPI port am Raspberry nicht 
initialisieren. Bei wiringPiSPISetup(0,1000000) kommt immer der Fehler:

/home/pi/test/mainwindow.cpp:-1: error: undefined reference to 
`wiringPiSPISetup'
:-1: error: collect2: ld returned 1 exit status

Was mache ich genau falsch ?

Hier der Code von mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "wiringPiSPI.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    int a;
    a = wiringPiSPISetup(0,1000000);


    ui->lineEdit->setText("SPI Setup");

}
OP #4080830
Lesenswert?

irgendetwas passiert, jedoch nicht das richtige.

Vom sensor LIS3DSH möchte ich das inforegister auslesen (0x0D), ich 
sollte dann den wert 0x21 zurückbekommen, es kommt jedoch immer 0xFF, 
was mach ich falsch ?

Hier mal der Code:

    int a;
    int b;
    quint8 buff[10];
    QString txt;

    a = wiringPiSPISetupMode(0,1000000,0);
    txt = "Setup: "+QString::number(a)+"\n";

    buff[0]=0x8D;
    a = wiringPiSPIDataRW (0,buff,1) ;
    txt += "RW: "+QString::number(a)+"\n";

    for(b=0;b<10;b++){
        txt += QString::number(buff[b])+"\n";
    }

    ui->textEdit->setText(txt);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren