- Mikä on SPI Communication Protocol?
- Kuinka SPI-protokolla toimii?
- Ero I2C: n ja SPI-viestinnän välillä
- SPI PIC16F877A: lla XC8-kääntäjällä:
- SPI-otsikkotiedoston selitys:
- Pääohjelma Selitys:
- PIC: n simulointi SPI-virheenkorjaimella:
PIC-mikrokontrollerit ovat tehokas alusta, jonka tarjoaa mikrosiru sulautettuihin projekteihin; monipuolisen luonteensa ansiosta se on löytänyt tapoja moniin sovelluksiin, ja se on vielä kasvamassa paljon. Jos olet seurannut PIC-opetusohjelmiamme, olisit huomannut, että olemme jo käsittäneet laajan valikoiman PIC-mikrokontrollereita koskevia oppaita alusta alkaen. Samassa prosessissa opimme PIC: n kanssa saatavissa olevia yhteyskäytäntöjä ja niiden käyttöä. Olemme jo peittäneet I2C: n PIC-mikrokontrollerilla.
Suuressa sulautettujen sovellusten järjestelmässä mikään mikro-ohjain ei voi suorittaa kaikkia toimintoja itse. Jossain vaiheessa sen on kommunikoitava muiden laitteiden kanssa tietojen jakamiseksi, näiden tietojen jakamiseksi on olemassa monia erityyppisiä yhteyskäytäntöjä, mutta eniten käytetyt ovat USART, IIC, SPI ja CAN. Jokaisella tiedonsiirtoprotokollalla on omat etunsa ja haittansa. Keskitymme nyt SPI-protokollaan, koska sen opimme tässä opetusohjelmassa.
Mikä on SPI Communication Protocol?
Termi SPI tarkoittaa " Serial Peripheral Interface ". Se on yleinen tiedonsiirtoprotokolla, jota käytetään tietojen lähettämiseen kahden mikro-ohjaimen välillä tai tietojen lukemiseen / kirjoittamiseen anturista mikro-ohjaimeen. Sitä käytetään myös kommunikointiin SD-korttien, siirtorekistereiden, näyttöohjainten ja monien muiden kanssa.
Kuinka SPI-protokolla toimii?
SPI-tietoliikenne on synkronista viestintää, eli se toimii kellosignaalin avulla, joka jaetaan kahden dataa vaihtavan laitteen välillä. Se on myös kaksisuuntainen tiedonsiirto, koska se voi lähettää ja vastaanottaa tietoja erillisen väylän avulla. SPI viestintä edellyttää 5 johdot toimia. Yksinkertainen SPI-tietoliikennepiiri isännän ja orjan välillä on esitetty alla
Viestinnän edellyttämät viisi johtoa ovat SCK (sarjakello), MOSI (Master Out Slave In), MISO (Master In Slave Out) ja SS (Slave Select). SPI-viestintä tapahtuu aina vain isännän ja orjan välillä. Isäntälaitteeseen voi olla kytketty useita orjia. Päällikkö on vastuussa kellopulssin muodostamisesta ja sama jaetaan kaikille orjille. Myös kaikki viestinnät voi aloittaa vain isäntä.
SCK-nasta (alias SCL-sarjakello) jakaa isännän tuottaman kellosignaalin orjien kanssa. MOSI-nastaa (alias SDA –Serial Data Out) käytetään tietojen lähettämiseen isännältä salveen. MISO-nastaa (alias SDI - Serial Data In) käytetään tietojen saamiseksi salvesta päällikölle. Voit myös seurata yllä olevan kuvan nuolimerkkiä ymmärtääksesi datan / signaalin liikkumisen. Lopuksi SS-nastaa (alias CS –Chip select) käytetään, kun isäntään on kytketty useampi kuin yksi orjamoduuli. Tätä voidaan käyttää tarvittavan orjan valitsemiseen. Näytepiiri, jossa useampi kuin yksi orja on kytketty isäntään SPI-viestintää varten, on esitetty alla olevassa piirissä.
Ero I2C: n ja SPI-viestinnän välillä
Olemme jo oppineet I2C-viestinnän PIC: n kanssa, joten meidän on tunnettava, miten I2C toimii ja missä voimme niitä käyttää, kuten I2C: tä voidaan käyttää RTC-moduulin liittämiseen. Mutta nyt, miksi tarvitsemme SPI-protokollaa, kun meillä on jo I2C. Syynä on, että sekä I2C että SPI-viestintä ovat etuja omalla tavallaan, ja siksi ne ovat sovelluskohtaisia.
I2C-tietoliikenteellä voidaan jossain määrin olla etuja SPI-tiedonsiirtoon verrattuna, koska I2C käyttää vähemmän nastamääriä ja se on erittäin kätevä, kun väylään on kytketty suuri määrä orjia. Mutta I2C: n haittana on, että sillä on sama väylä tietojen lähettämiseen ja vastaanottamiseen, ja siksi se on suhteellisen hidas. Joten se perustuu puhtaasti sovellukseen, joka päättää projektin SPI- ja I2C-protokollien välillä.
SPI PIC16F877A: lla XC8-kääntäjällä:
Tarpeeksi perusasiat, anna meidän nyt oppia, kuinka voimme käyttää SPI-viestintää PIC16F877A- mikrokontrollerissa MPLABX IDE- ja XC8-kääntäjällä. Ennen kuin aloitamme, tehdään selväksi, että tässä opetusohjelmassa puhutaan vain SPI: stä PIC16F877a: ssa XC8-kääntäjää käyttäen, prosessi on sama muille mikro- ohjaimille, mutta pieniä muutoksia saatetaan tarvita. Muista myös, että edistyneille mikrokontrollereille, kuten PIC18F-sarja, kääntäjällä voi itse olla jokin kirjasto sisäänrakennettuna SPI-ominaisuuksien käyttämiseen, mutta PIC16F877A: lle mitään sellaista ei ole, joten rakennetaan yksi omasta. Tässä selitetty kirjasto annetaan otsikkotiedostona ladattavaksi alareunassa, jota voidaan käyttää PIC16F877A: n kommunikointiin muiden SPI-laitteiden kanssa.
Tässä opetusohjelmassa kirjoitamme pienen ohjelman, joka käyttää SPI-viestintää SPI-väylän tietojen kirjoittamiseen ja lukemiseen. Tarkistamme sitten saman Proteus-simulaatiolla. Kaikki SPI-rekistereihin liittyvät koodit tehdään otsikkotiedostoon nimeltä PIC16f877a_SPI.h. Näin voimme käyttää tätä otsikkotiedostoa kaikissa tulevissa projekteissamme, joissa vaaditaan SPI-viestintää. Ja pääohjelman sisällä käytämme vain otsikkotiedoston toimintoja. Koko koodi ja otsikkotiedosto voidaan ladata täältä.
SPI-otsikkotiedoston selitys:
Otsikkotiedoston sisällä meidän on alustettava PIC16F877a: n SPI-tietoliikenne. Kuten aina paras paikka aloittaa, on PIC16F877A-tietolomake. PIC16F8777a: n SPI-viestintää ohjaavat rekisterit ovat SSPSTAT ja SSPCON -rekisteri. Voit kertoa niistä sivun 74 ja 75 lomakkeessa.
SPI-tiedonsiirtoa alustaessa on valittava useita parametrivaihtoehtoja. Yleisimmin käytetty vaihtoehto on, että kellotaajuudeksi asetetaan Fosc / 4, ja se tehdään keskellä ja kello asetetaan matalaksi ihanteellisessa tilassa. Joten käytämme myös samaa määritystä otsikkotiedostollemme, voit muuttaa niitä helposti muuttamalla vastaavia bittejä.
SPI_Initialize_Master ()
SPI Initial Master -toimintoa käytetään SPI-viestinnän aloittamiseen isäntänä. Tämän toiminnon sisällä asetamme vastaavat nastat RC5 ja RC3 lähtönapeiksi. Sitten määritetään SSPTAT ja SSPCON -rekisteri ottamaan SPI-tietoliikenne käyttöön
void SPI_Initialize_Master () { TRISC5 = 0; // SSPSTAT = 0b00000000; // s. 74/234 SSPCON = 0b00100000; // s. 75/234 TRISC3 = 0; // Aseta lähtö slave-tilassa }
SPI_Initialize_Slave ()
Tätä toimintoa käytetään asettamaan mikrokontrolleri toimimaan orjatilassa SPI-viestinnässä. Orjatilassa nasta RC5 on asetettava lähdöksi ja nasta RC3 tuloksi. SSPSTAT ja SSPCON asetetaan samalla tavalla sekä orjalle että isännälle.
void SPI_Initialize_Slave () { TRISC5 = 0; // SDO-nasta tulisi ilmoittaa lähtöä SSPSTAT = 0b00000000; // s. 74/234 SSPCON = 0b00100000; // s. 75/234 TRISC3 = 1; // Aseta lähtötilaksi master-tilassa }
SPI_Write (saapuva merkki)
SPI Write -toimintoa käytetään tietojen kirjoittamiseen SPI-väylään. Se saa tiedot käyttäjältä tulevan muuttujan kautta ja siirtää sen sitten puskurirekisteriin. SSPBUF tyhjennetään peräkkäisessä kellopulssissa ja data lähetetään väylälle vähitellen.
void SPI_Write (char incoming) { SSPBUF = saapuva; // Kirjoita käyttäjän antamat tiedot puskuriin }
SPI_Ready2Read ()
SPI ready to read -toimintoa käytetään tarkistamaan, vastaanotetaanko SPI-väylän tiedot kokonaan ja voidaanko ne lukea. SSPSTAT-rekisterissä on vähän nimeltään BF, joka asetetaan, kun tiedot on vastaanotettu kokonaan, joten tarkistamme, onko tämä bitti asetettu, jos sitä ei ole asetettu, meidän on odotettava, kunnes se asetetaan lukemaan mitään SPI-väylältä.
allekirjoittamaton SPI_Ready2Read () { if (SSPSTAT & 0b00000001) palauttaa 1; muuten palauta 0; }
SPI_Lue ()
SPI-lukua käytetään tietojen lukemiseen SPI-väylästä mikrokontrolleriin. SPI-väylässä olevat tiedot tallennetaan SSPBUF: ään, meidän on odotettava, kunnes kaikki tiedot on tallennettu puskuriin, ja sitten voimme lukea ne muuttujaksi. Tarkistamme SSPSTAT-rekisterin BF-bitin ennen puskurin lukemista varmistaaksemme, että datan vastaanotto on täydellinen.
char SPI_Read () // Lue vastaanotetut tiedot { while (! SSPSTATbits.BF); // Pidä, kunnes BF-bitti on asetettu, varmistaaksesi, että täydelliset tiedot luetaan takaisin (SSPBUF); // palauta luetut tiedot }
Pääohjelma Selitys:
Yllä olevassa kappaleessa selitetyt toiminnot ovat otsikkotiedostossa ja ne voidaan kutsua c-päätiedostoon. Joten kirjoitetaan pieni ohjelma tarkistamaan, toimiiko SPI-viestintä. Kirjoitamme vain vähän tietoja SPI-väylään ja tarkistamme proteus-simulaation avulla, vastaanotetaanko samaa tietoa SPI-virheenkorjaimessa.
Kuten aina, aloita ohjelma asettamalla kokoonpanobitit ja sitten on erittäin tärkeää lisätä juuri selitetty otsikkotiedosto ohjelmaan alla olevan kuvan mukaisesti
#sisältää
Jos olet avannut ohjelman yllä ladatusta zip-tiedostosta, otsikkotiedosto on oletuksena projektitiedostosi otsikkotiedostohakemiston sisällä. Muuten sinun on lisättävä otsikkotiedosto manuaalisesti projektisi sisään, kun olet lisännyt projektitiedostosi näyttävät tältä alla
Päätiedoston sisällä meidän on alustettava PIC Masterina SPI-tiedonsiirtoon ja sitten äärettömän silmukan sisään kirjoitamme satunnaiset kolme heksadesimaaliarvoa SPI-väylään tarkistamaan, saammeko saman simulaation aikana.
void main () { SPI_Initialize_Master (); kun (1) { SPI_Write (0X0A); _ viive_ms (100); SPI_Write (0X0F); _ viive_ms (100); SPI_Write (0X15); _ viive_ms (100); } }
Huomaa, että ohjelmassa käytetyt satunnaisarvot ovat 0A, 0F ja 15 ja ne ovat heksadesimaaliarvoja, joten meidän pitäisi nähdä sama simulaation aikana. Eli koodi on kaikki tehty, tämä on vain näyte, mutta voimme käyttää samaa menetelmää kommunikoida muiden MCU: n tai muiden SPI-protokollalla toimivien anturimoduulien kanssa.
PIC: n simulointi SPI-virheenkorjaimella:
Nyt kun ohjelmamme on valmis, voimme koota sen ja jatkaa simulaatiota. Proteuksella on mukava kätevä ominaisuus nimeltä SPI debugger , jota voidaan käyttää tietojen seuraamiseen SPI-väylän kautta. Joten käytämme samaa ja rakennamme piirin kuten alla on esitetty.
Koska simulaatiossa on vain yksi SPI-laite, emme käytä SS-nastaa, ja kun sitä ei käytetä, se on maadoitettava kuten yllä on esitetty. Lataa vain hex-tiedosto PIC16F877A-mikrokontrolleriin ja napsauta toistopainiketta simuloidaksemme ohjelmaa. Kun simulaatio alkaa, saat ponnahdusikkunan, joka näyttää tiedot SPI-väylässä alla olevan kuvan mukaisesti
Katsotaanpa tarkemmin tulevia tietoja ja tarkistetaan, ovatko ne samat kuin kirjoitimme ohjelmassa.
Tiedot vastaanotetaan samassa järjestyksessä kuin kirjoitimme ohjelmassa, ja sama on korostettu sinulle. Voit myös yrittää simuloida ohjelmaa kommunikoimaan kahden PIC-mikrokontrollerin kanssa SPI- protokollaa käyttämällä. Yksi PIC on ohjelmoitava isäntänä ja toinen orjana. Kaikki tähän tarkoitukseen tarvittavat otsikkotiedostot on annettu jo otsikkotiedostossa.
Tämä on vain välähdys SPI: n toiminnasta, se voi myös lukea ja kirjoittaa tietoja useille laitteille. Käsittelemme lisää SPI: stä tulevissa opetusohjelmissamme liittämällä yhteen erilaisia moduuleja, jotka toimivat SPI-protokollan kanssa.
Toivottavasti ymmärrät projektin ja opit siitä jotain hyödyllistä. Jos sinulla on epäilyksiä, lähetä ne alla olevaan kommenttiosioon tai käytä foorumeita tekniseen apuun.
Täydellinen pääkoodi on annettu alla; voit ladata otsikkotiedostot kaikilla koodeilla täältä