dette bibliotek giver dig mulighed for at kommunikere med SPI-enheder, med Arduino som master-enhed.
At bruge dette bibliotek #include <SPI.h>
En Kort Introduktion til den Serielle Perifere Interface (SPI)
Seriel Perifere Interface (SPI) er en synkron seriel data protokol, der bruges af microcontrollere til at kommunikere med en eller flere eksterne enheder hurtigt over korte afstande. Det kan også bruges til kommunikation mellem to mikrocontrollere.,
med en SPI-forbindelse er der altid en masterenhed (normalt en mikrocontroller), der styrer de perifere enheder., Der er typisk tre linjer, der er fælles for alle enheder:
- MISO (Master Slave Ud) – Slave-linje til at sende data til master,
- MOSI (Master Slave) – Herre online for at sende data til eksterne enheder,
- SCK (Serial Ur) – Uret pulser, som synkroniserer data transmission genereret af master
og en linje, der er specifik for hver enhed:
- SS (Slave Vælg) – pin-koden på hver enhed, som master kan bruges til at aktivere og deaktivere bestemte enheder.,
Når en enheds Slave Select pin er lav, kommunikerer den med masteren. Når det er højt, ignorerer det mesteren. Dette giver dig mulighed for at have flere SPI-enheder, der deler de samme MISO -, MOSI-og CLK-linjer.
for at skrive kode til en ny SPI-enhed skal du notere et par ting:
- hvad er den maksimale SPI-hastighed, som din enhed kan bruge? Dette styres af den første parameter i SPISettings. Hvis du bruger en chip vurderet til 15 MH., skal du bruge 15000000. Arduino bruger automatisk den bedste hastighed, der er lig med eller mindre end det nummer, du bruger med SPISettings.,
- forskydes data i mest signifikant Bit (MSB) eller mindst signifikant Bit (LSB) først? Dette er kontrolleret af anden SPISettings parameter, enten MSBFIRST eller LSBFIRST. De fleste SPI chips bruger MSB første dataordre.
- er dataklokken inaktiv, når den er høj eller lav? Er prøver på den stigende eller faldende kant af urpulser? Disse tilstande styres af den tredje parameter i SPISettings.
SPI-standarden er løs, og hver enhed implementerer den lidt anderledes. Det betyder, at du skal være særlig opmærksom på enhedens datablad, når du skriver din kode.,
generelt er der fire transmissionsformer. Disse tilstande styrer, om data forskydes ind og ud på den stigende eller faldende kant af datalocksignalet (kaldet urfasen), og om uret er inaktivt, når det er højt eller lavt (kaldet urpolariteten).,se according to this table:
Mode | Clock Polarity (CPOL) | Clock Phase (CPHA) | Output Edge | Data Capture |
SPI_MODE0 | 0 | 0 | Falling | Rising |
SPI_MODE1 | 0 | 1 | Rising | Falling |
SPI_MODE2 | 1 | 0 | Rising | Falling |
SPI_MODE3 | 1 | 1 | Falling | Rising |
Once you have your SPI parameters, use SPI.,beginTransaction () for at begynde at bruge SPI-porten. SPI-porten vil blive konfigureret med alle dine indstillinger. Den enkleste og mest effektive måde at bruge SPISettings på er direkte inde i SPI.beginTransaction().For eksempel:
SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));
Hvis andre biblioteker og til gøre SPI fra afbryder, vil de blive forhindret i at få adgang til SPI, indtil du ringer SPI.endTransaction()
. SPI-indstillingerne anvendes i starten af transaktionen, og SPI.endTransaction()
ændrer ikke SPI-indstillingerne., Medmindre du eller et bibliotek begynder opkaldtransaktion en anden gang, opretholdes indstillingen. Du bør forsøge at minimere tiden mellem, før du ringer SPI.endTransaction()
, for bedste kompatibilitet, hvis dit program bruges sammen med andre biblioteker, der bruger SPI.
Med de fleste SPI enheder, efter SPI.beginTransaction()
, du vil skrive slave skal du vælge pin-kode LAVE, ring til SPI.transfer()
mange gange, du ønsker at overføre data, så skriv SS pin HIGH, og endelig kalder SPI.endTransaction()
.for mere om SPI, se Wikipedias side om SPI.,
Forbindelser
Den følgende tabel vises, hvor benene SPI linjer, der er brudt ud på de forskellige Arduino boards:
Bemærk, at MISO, MOSI, og SCK er til rådighed i en sammenhængende fysiske placering på ICSP header; dette er nyttigt, for eksempel, ved at designe et skjold, der virker på hvert bord.
Bemærk om Slave Select (SS) pin på AVR-baserede opslagstavler
alle AVR-baserede opslagstavler har en SS pin, som er nyttig, når de fungerer som en slave styret af en ekstern master., Da dette bibliotek kun understøtter mastertilstand, skal denne pin altid indstilles som OUTPUT, ellers kan SPI-grænsefladen automatisk sættes i slave-tilstand af Hard .are, hvilket gør biblioteket ude af drift.
det er dog muligt at bruge en hvilken som helst pin-kode som Slave Select (SS) for enhederne. For eksempel bruger Arduino Ethernet shield pin 4 til at styre SPI-forbindelsen til det indbyggede SD-kort og pin 10 til at styre forbindelsen til Ethernet-controlleren.
eksempler
- Barometertrykssensor: Aflæs lufttryk og temperatur fra en sensor ved hjælp af SPI-protokollen.,
- Digital Pot Control: Styr et ad5206 digitalt potentiometer ved hjælp af SPI-protokollen.
Sidste revision 2019/12/24 af SM