Veraltete Raspberry Bibliotheken?

Für Fragen von Einsteigern und Programmieranfängern...
Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Veraltete Raspberry Bibliotheken?

Beitrag von Marc »

Ich müsste ein serielles SRam via SPI ansprechen, mit dem Raspberry (V3).
Dafür würde ich wohl eine der Bibliotheken brauchen die hier beschrieben sind.
http://wiki.freepascal.org/Lazarus_on_Raspberry_Pi

Wie ich lese läuft Pigpio nur auf einem Broadcom BCM2835? Also Raspberry V1.
Die RPI-Hal bringt auch nur Fehlermeldungen.

Kann es sein das ich was falsch mache oder ist das alles ev. ein wenig veraltet?

Ist dieses eXtended Library besser?
Good code comes from experience, experience comes from bad code.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Timm Thaler »

Nö. Musst Du nicht. Linux: Everything is a file.

Du kannst den SPI Port ganz normal über die Dateifunktionen ansprechen, so wie die Gpios auch. Dateiname ist irgendwas mit SPI.

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Marc »

Du meinst bestimmt nicht der 'native Access'?

Der schreibt ja wirklich ein File auf die SD card.
Da sehe ich auch keine Möglichkeit 'SPI' zu machen.
Das ist wohl eher gedacht mal ab und an einen Port zu ändern.

Ich versuche mal das Pascalio, da gehts in den Beispielen wie es scheint vor allem um einen Portexpander.
Nicht exakt was ich brauche, aber wenigstens kann ich da irgendwas compilieren.
Good code comes from experience, experience comes from bad code.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Timm Thaler »

Nein, Du kannst den Spi ansprechen wie die Gpios, als Device. Es gibt zwei Spi Devices die als spidev.0 und spidev.1 bezeichnet werden, oder so.

Wenn das 2 Tage Zeit hat, ich schreibe eine nrf24 Routine von C auf Pascal um, der nrf nutzt auch den Spi. Da kann ich Dir die Beispiele reinstellen.

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Marc »

Danke für die Antwort.
Sicher hat das zwei Tage Zeit. :-) Bin jetzt schon Monate an meinem Projekt (Raspberry -> Ram/Rom -> AVR).
Diese NRF24 dinger sind auch sehr interessant.
Ich versuche trotzdem mal was mit Pascalio. Sollte ja Möglich sein. Mann kann nur lernen. :-)
Good code comes from experience, experience comes from bad code.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Timm Thaler »

Pascalio sollte schneller sein als Filezugriff, weil das ja direkt über die Register auf die Hardware zugreift. Ist auch bei den Gpios so. Man macht sich halt von externen Libs abhängig. Deswegen versuche ich das zu vermeiden, wenn möglich.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Socke »

Timm Thaler hat geschrieben:Pascalio sollte schneller sein als Filezugriff, weil das ja direkt über die Register auf die Hardware zugreift. Ist auch bei den Gpios so. Man macht sich halt von externen Libs abhängig. Deswegen versuche ich das zu vermeiden, wenn möglich.

PascalIO verwendet aktuell auch nur die Dateischnittstelle. Den Zugriff per Memory-Mapped-File direkt auf die Register hatte ich nicht hinbekommen, kann aber gerne ergänzt werden.
Falls es um maximale Geschwindigkeit geht, führt kein Weg an einem eigenen Kernel-Modul vorbei; dann könnte der SRAM auch als externer RAM genutzt werden. Ohne Kernel-Modul ist es nur ein externer, anwendungsabhängiger Speicher.

Der Zugriff auf die SPI-Schnittstelle erfolgt über die Klasse TSPILinuxDevice, ein Beispiel findet sich unter https://github.com/SAmeis/pascalio/blob/master/test/spi_linux/Project1.pas

P.S. wenn euch in PascalIO oder der Dokumentation noch etwas fehlt, meldet euch bitte hier im Forum. Ich versuche das dann kurzfristig zu ergänzen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Timm Thaler »

Für SPI auf dem AVR hab ich hier ein paar Routinen reingestellt: http://wiki.freepascal.org/AVR_Embedded_-_SPI

Erstmal nur für Master-Betrieb, aber um den Speicher auszulesen sollte das gehen.

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Mathias »

Timm Thaler hat geschrieben:Für SPI auf dem AVR hab ich hier ein paar Routinen reingestellt: http://wiki.freepascal.org/AVR_Embedded_-_SPI

Erstmal nur für Master-Betrieb, aber um den Speicher auszulesen sollte das gehen.

Du warst anscheinend auch recht fleissig. :shock: :wink:

Wen ich die I²C Schnittstelle mit Pascal ansprechen kann, werde ich mal ein lib für das I²C LCD-Display schreiben.
Auf dem PC/Raspi läuft diese schon über /dev/i2c
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Timm Thaler »

Und hier die Routinen für den Raspberry: http://wiki.freepascal.org/Raspberry_Pi_-_SPI

Hier ist zu beachten, dass der SPI-Controller die Steuerung der Select-Pins (Gpio7 und Gpio8) selbst übernimmt.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Timm Thaler »

Mathias hat geschrieben:Wen ich die I²C Schnittstelle mit Pascal ansprechen kann, werde ich mal ein lib für das I²C LCD-Display schreiben


Wenn es Software-I2C sein darf: http://wiki.freepascal.org/AVR_Embedded ... _I2C_/_TWI

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Marc »

Timm Thaler hat geschrieben:Und hier die Routinen für den Raspberry: http://wiki.freepascal.org/Raspberry_Pi_-_SPI

Hier ist zu beachten, dass der SPI-Controller die Steuerung der Select-Pins (Gpio7 und Gpio8) selbst übernimmt.


Das sieht ja sehr gut aus. Versuche gerade mein SRam Problem damit zu lösen.
Good code comes from experience, experience comes from bad code.

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Marc »

Ich wieder. Habe mein Projekt mal hochgeladen.
Es funktioniert soweit.
Musste nur ein drei Aenderungen in der Unit (test_spi) machen. Habe es markiert.

Irgendwie habe ich aber Probleme mit der Prozedur 'spi.TransferSync'.
Ich kann die Modes des SRAM setzen, wenn ich aber versuche den Status (mode) wieder auszulesen kriege ich das nicht angezeigt. Das SRAM schickt es korrekt wie es scheint.

Einzelnes Byte speichern funktioniert auch, nur beim Auslesen habe ich wieder dasselbe Problem mit der Prozedur 'spi.TransferSync'.
Weiss gerade nicht ob ich was verkehrt mache oder ob es ein Fehler in der Unit ist?
Dateianhänge
Test_SPI.tar.gz
(7.09 MiB) 73-mal heruntergeladen
Good code comes from experience, experience comes from bad code.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Timm Thaler »

Marc hat geschrieben:Einzelnes Byte speichern funktioniert auch, nur beim Auslesen habe ich wieder dasselbe Problem mit der Prozedur 'spi.TransferSync'.
Weiss gerade nicht ob ich was verkehrt mache oder ob es ein Fehler in der Unit ist?


Naja, ich hab da mal drübergeschaut: Du schreibst 3 Byte, liest ein Byte und gibst eine Bytezahl von 4 an. Bißchen inkonsequent, oder?

SPI Transfer funktioniert so, dass eine Anzahl Bytes rausgeschrieben wird und gleichzeitig Bytes eingelesen werden. Dafür werden in der Prozedur Buffer reserviert. Werden 4 Byte reserviert, aber nur 3 übergeben, ist das vierte Byte Null, wird aber trotzdem gesendet. Was Move macht, wenn der Eingangsbuffer 4 Byte groß ist, 4 Byte als Länge angegeben werden aber Dein Byte_In nur 1 Byte groß ist - keine Ahnung. Entweder wird nur das erste Byte übertragen, oder das letzte, oder alle 4 Byte, und weil intern eh mit 32bit-Werten gearbeitet wird landen alle 4 Byte in einem 32-bit-integer.

Also Out_Byte und In_Byte müssen nicht gleich groß sein, aber zumindest sollten alle empfangenen Bytes auch in In_Byte passen.

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Veraltete Raspberry Bibliotheken?

Beitrag von Marc »

Hallo Timm Thaler. Danke für die Hilfe.

Ja inkonsequent und noch schlimmer Ahnungslos!
Ich mache die Buffer jetzt gleich gross. Muss einfach die ersten Bytes in der Array ignorieren.
So geht es.

Um das RAM zu füllen gäbe es den Sequential Mode. Das müsste insgesamt am schnellsten sein.
So wie ich das Datenblatt verstehe müsste das gehen.
Den kann ich aber nicht verwenden da ich 32768 + 3 Bytes im Out Buffer hätte.
Die Prozedur 'spi.TransmitSync(OutArr, ByteCnt); ' verwendet ja ein Byte als Zähler.
Ich nehme mal an das ist technisch bedingt?

Also werde ich den Page Mode verwenden. Eine einzelne Page hab ich schon mal geschrieben.
Da müsste ich mit der Zeit hinkommen, die ich zur Verfügung habe, das RAM zu füllen (geschätzt ca 0.3 Sec für alle Pages zusammen).
Ist nur etwas unschön die 32768 bytes in 1024 mal 32 bytes umzukopieren. :-)
Good code comes from experience, experience comes from bad code.

Antworten