Arduino-SPI (Svenska)

det här biblioteket låter dig kommunicera med SPI-enheter, med Arduino som huvudenhet.
för att använda detta bibliotek
#include <SPI.h>

en kort introduktion till Serial Peripheral Interface (SPI)

Serial Peripheral Interface (SPI) är ett synkront seriellt dataprotokoll som används av mikrokontroller för att kommunicera med en eller flera kringutrustning snabbt över korta avstånd. Den kan också användas för kommunikation mellan två mikrokontroller.,

med en SPI-anslutning finns det alltid en huvudenhet (vanligtvis en mikrokontroller) som styr de perifera enheterna., Vanligtvis finns det tre linjer som är gemensamma för alla enheter:

  • MISO (Master In Slave Out) – Slavlinjen för att skicka data till befälhavaren,
  • MOSI (Master Out Slave In) – huvudlinjen för att skicka data till kringutrustning,
  • SCK (Serial Clock) – klockpulserna som synkroniserar dataöverföring som genereras av befälhavaren

och en rad som är specifik för varje enhet:

  • SS (Slave Out) – Välj) – PIN-koden på varje enhet som befälhavaren kan använda för att aktivera och inaktivera specifika enheter.,

När en en enhets Slavval är låg kommunicerar den med mästaren. När den är hög ignorerar den mästaren. Detta gör att du kan ha flera SPI enheter som delar samma MISO, MOSI, och CLK linjer.

för att skriva kod för en ny SPI-enhet måste du notera några saker:

  • vad är den maximala SPI-hastighet som enheten kan använda? Detta styrs av den första parametern i SPISettings. Om du använder ett chip som är betygsatt vid 15 MHz, använd 15000000. Arduino använder automatiskt den bästa hastigheten som är lika med eller mindre än det nummer du använder med SPISettings.,
  • skiftas data i most Significant Bit (MSB) eller Least Significant Bit (LSB) först? Detta styrs av andra SPISettings parameter, antingen MSBFIRST eller LSBFIRST. De flesta SPI chips använda MSB första uppgifterna för.
  • är dataklockan inaktiv när den är hög eller låg? Är prover på den stigande eller fallande kanten av klockpulser? Dessa lägen styrs av den tredje parametern i SPISettings.

SPI-standarden är lös och varje enhet implementerar den lite annorlunda. Det innebär att du måste ägna särskild uppmärksamhet åt enhetens datablad när du skriver din kod.,

generellt sett finns det fyra sätt att överföra. Dessa lägen styr om data skiftas in och ut på den stigande eller fallande kanten av dataklocksignalen (kallas klockfasen) och om klockan är inaktiv när den är hög eller låg (kallas klockpolariteten).,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 () för att börja använda spi-porten. SPI-porten kommer att konfigureras med alla dina inställningar. Det enklaste och mest effektiva sättet att använda SPISettings är direkt inuti SPI.beginTransaction().Till exempel:

SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));

om andra bibliotek använder SPI från avbrott kommer de att hindras från att komma åt SPI tills du ringer SPI.endTransaction(). SPI-inställningarna tillämpas i början av transaktionen och SPI.endTransaction() ändrar inte SPI-inställningarna., Om du, eller något bibliotek, ringer börjartransaktion en andra gång bibehålls inställningen. Du bör försöka minimera tiden mellan innan du ringer SPI.endTransaction(), för bästa kompatibilitet om ditt program används tillsammans med andra bibliotek som använder SPI.

med de flesta SPI-enheter, efter SPI.beginTransaction(), kommer du att skriva slaven select PIN LOW, Ring SPI.transfer() valfritt antal gånger för att överföra data, skriv sedan SS pin HIGH och ring slutligen SPI.endTransaction().

För mer information om SPI, se Wikipedias sida på SPI.,

anslutningar

följande tabelldisplay på vilken stift SPI-linjerna är utbrutna på de olika Arduino-brädorna:

Observera att MISO, MOSI och SCK är tillgängliga på en konsekvent fysisk plats på ICSP-huvudet; det här är till exempel användbart vid utformning av en sköld som fungerar på varje styrelse.

notera Om Slave Select (SS) – pin på AVR-baserade brädor

alla AVR-baserade brädor har en SS-pin som är användbar när de fungerar som en slav som styrs av en extern mästare., Eftersom det här biblioteket endast stöder huvudläge ska den här pin-koden alltid ställas in som utgång annars kan SPI-gränssnittet sättas automatiskt i slavläge med hårdvara, vilket gör biblioteket inoperativt.

det är dock möjligt att använda någon pin-kod som Slave Select (SS) för enheterna. Till exempel använder Arduino Ethernet shield pin 4 för att styra SPI-anslutningen till det inbyggda SD-kortet och pin 10 för att styra anslutningen till Ethernet-styrenheten.

exempel

  • Barometertryckssensor: Läs lufttrycket och temperaturen från en sensor med hjälp av SPI-protokollet.,
  • Digital Pot Control: Styr en ad5206 digital potentiometer med hjälp av SPI-protokollet.

senaste revideringen 2019/12/24 av SM

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *