SPI-Schnittstelle in C öffnen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,

    zunächst wünsche ich allen ein frohes neues Jahr!

    Zu meinem Anliegen: Zurzeit arbeite ich mit dem CAN-Bus an dem Raspberry Pi. Mein Problem ist jetzt, wenn die CAN-Schnittstellen aktiv sind kann ich nicht auf den SPI-Bus zugreifen. Deshalb wollte ich mal fragen, ob es möglich ist die SPI-Schnittstellen trotz CAN öffnen zu können?? Ich möchte nämlich die Geschwindigkeit von dem SPI-Bus variieren und dafür habe ich gelesen, dass dies programmtechnisch nur über die jeweiligen Schnittstellen geht...

    Wäre echt super wenn hier jemand ist, der mir einen Tipp geben könnte!

    Gruß Kilian

  • Hallo Kilian,

    Du kannst die SPI-Schnittstelle mit jedem beliebigen Quatrupel an GPIO-Pins aufrichten. Wie das in Icon funktioniert kannst Du in einem meiner zahlreichen Tutorials nachlesen und dann in jeder beliebigen Programmiersprache - erst recht in C - nachbilden.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo,


    erstmal Danke für die Antworten! Also auf meinem Board sind die Controller MCP2515 und MCP2517FD verbaut. Beide hängen am SPI-Bus. Was ich jetzt vorhabe ist, die Geschwindkeit des SPI-Busses zu erhöhen. Dieser ist glaube ich standardmäßig auf 500 kHz gesetzt. Die beiden Controller können jedoch eine höhere Geschwindgkeit.

    Im Internet habe ich jetzt gelesen, dass für das Erhöhen nun die Schnittstellen "spidev0.0" und "spidev0.1" geöffnet werden müssen. Wenn jedoch die CAN-Schnittstellen aktiv sind kann ich die SPI-Schnittstellen nicht öffnen, weil diese nicht bekannt sind... Gibt es da irgendwie eine Möglichkeit die Geschwindkeit trotzdem zu erhöhen??

  • Oha, du hast das CAN Modul also selbst entwickelt und gebaut mit Layout usw.?

    Das Einstellen der bitrate macht ja normalerweise das overlay beim öffnen

    Code
    sudo /sbin/ip link set can0 up type can bitrate 500000

    Wenn das Betriebssystem die SPI Schnittstelle verwaltet, kannst du nicht mehr so einfach dazwischenfunken

  • Oha, du hast das CAN Modul also selbst entwickelt und gebaut mit Layout usw.?

    Ne leider nicht :D Ist ein Projekt auf der Arbeit. Das Board extern entwickelt...


    Das Einstellen der bitrate macht ja normalerweise das overlay beim öffnen

    Aber wird dabei nicht nur die Geschwindigkeit für den CAN-Bus eingestellt? Oder wird dabei auch der SPI-Bus verändert? Ich möchte nämlich den Datenaustausch zwischen dem Raspi und den CAN-Controllern erhöhen!

  • kann ich die SPI-Schnittstellen nicht öffnen, weil diese nicht bekannt sind...

    wenn die device nodes nicht existieren, dann hast Du auch kein SPI.

    Zudem bringt Dir das nichts, weil die Geschwindigkeit des SPI für jede Transaktion separat gesetzt werden kann. Will heissen: selbst wenn Du das SPI auf 4 MHz stellst, werden die einzelnen Transfers eines Programms die Geschwindigkeit für ihre Bedürfnisse anpassen und entsprechend runtertakten. Das SPI kennt, im Gegensatz zum I2C, keine globale Einstellung, die man vornimmt und mit der dann alle Transfers abgewickelt werden.

    cu,

    -ds-

  • Sieht fast so aus ...

    Das Einstellen der bitrate macht ja normalerweise das overlay beim öffnen

    das wäre wohl die einzige Möglichkeit die Du versuchen könntest. Wie das bei CAN aussieht, vermag ich nicht zu sagen ...

    Da irgenwie über SPI was umzuistellen, nur weil das CAN dieselben Anschlüsse verwendet, halte ich für aussichtslos.

    cu,

    -ds-

  • Kellermann66 was ist denn dein eigentliches Problem? (siehe xy-problem)

    Bisher hast du ja nur gefragt, wie du die SPI Frequenz ändern kannst aber nicht welches Problem du damit lösen willst.

    Btw, welches CAN overlay verwendest du denn eigentlich genau? Vorkompiliert dtbo von mcp2515-can0-overlay.dts

    GGf. kannst du ja daran drehen und nei kompilieren.

    Einmal editiert, zuletzt von andyydna (2. Januar 2019 um 17:47)

  • was ist denn dein eigentliches Problem? (siehe xy-problem)

    Mein Ziel ist es die Kommunikation zwischen CAN-Controller und dem Raspi so schnell wie möglich einzustellen. Dadurch soll dann so wenig Zeit wie es geht benötigt werden.

    Btw, welches CAN overlay verwendest du denn eigentlich genau? Vorkompiliert dtbo von mcp2515-can0-overlay.dts

    GGf. kannst du ja daran drehen und nei kompilieren.

    Also in meiner config.txt habe das eingetragen:

    Code
    dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=22
    dtoverlay=mcp2517fd-can1,oscillator=40000000,interrupt=25

    Ob und wie man daran jetzt rumschrauben kann weiß ich leider nicht...

Jetzt mitmachen!

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