26. Lektion: SPI: Difference between revisions
| Line 28: | Line 28: | ||
[[file:SPI_konzept_3.svg.png||Daisychain]] | [[file:SPI_konzept_3.svg.png||Daisychain]] | ||
<br> | <br> | ||
Quelle: https://de.wikipedia.org/wiki/Serial_Peripheral_Interface | |||
==== SPI Modes==== | ==== SPI Modes==== | ||
Revision as of 12:08, 15 December 2023
Das Serielle Periphere Interface
Dem Seriellen Peripheren Interface (SPI) liegt ein sehr einfaches Konzept zu Grunde. Dafür benötigt es mehr Leitungen als die I2C Schnittstelle:
- MOSI
- Master Out Slave In
- MISO
- Master In Slave Out
- SCK
- Clock
- D/C
- Data/Control
- CS / SS
- Chip Select
Das SPI Konzept
SPI arbeitet nach dem Master / Slave Konzept. Der Master kontrolliert die Kommuniktion.
Die Hardware besteht im Prinzip aus einen 8-Bit Schieberegister.
Quelle: https://www-user.tu-chemnitz.de/~heha/hsn/ATmegaX8.chm/19.htm
Die SPI Geräte können auf 2 Arten miteinander verbunden werden. Sie können parallel oder hintereinander (Dasy Chain) verbunden werden.
Quelle: https://de.wikipedia.org/wiki/Serial_Peripheral_Interface
SPI Modes
| SPI Mode | CPOL | CPHA |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 1 |
SPI Objekt erzeugen
Wie üblich in Micropython muss zuerst eine Instanz der Klasse SPI erzeugt werden.
Hardware SPI
Der Pico hat 2 Hardware SPI Schnittstellen (ID = 0, 1)
Die Klasse SPI unterstützt nur diese drei Leitungen: SCK, MOSI, MISO.
Die D/C und CS Signale muss der Programmierer selbst steuern.
Die Hardware SPI's können auf verschiedene Pins gelegt werden (s. Pinout)
Die default Einstellungen für Hardware SPI findet man so:
from machine import SPI print(SPI(0)) print(SPI(1)) SPI(0, baudrate=992063, polarity=0, phase=0, bits=8, sck=18, mosi=19, miso=16) SPI(1, baudrate=992063, polarity=0, phase=0, bits=8, sck=10, mosi=11, miso=8)
SPI Instanz mit default Pins erstellen:
from machine import Pin, SPI spi = SPI(0, baudrate=400000)
Für weitere Parameter gibt es noch folgende Möglichkeiten:
spi = SPI(1, 10_000_000, sck=Pin(14), mosi=Pin(15), miso=Pin(12)) spi = SPI(0, baudrate=80_000_000, polarity=0, phase=0, bits=8, sck=Pin(6), mosi=Pin(7), miso=Pin(4))
Wenn MISO nicht benötgt wird kann miso=None gesetzt werden.
Software SPI
from machine import Pin, SoftSPI spi = SoftSPI(baudrate=500000, polarity=0, phase=0, bits=8, firstbit=SoftSPI.MSB, sck=Pin(2), mosi=Pin(3), miso=Pin(4))
