- Čo je bit búranie?
- Kedy použiť bit búchanie
- Algoritmus pre sériovú komunikáciu pomocou bit búchania
- Bit búchanie cez SPI
- Príklad bit búchania: SPI komunikácia v Arduine
- Nevýhody bitového tresku
- UART prostredníctvom bitovania bitov v Arduine
Komunikačné rozhrania sú jedným z faktorov, ktoré sa berú do úvahy pri výbere mikrokontroléra, ktorý sa má použiť pre projekt. Dizajnér zabezpečí, aby vybraný mikrokontrolér mal všetky rozhrania potrebné na komunikáciu so všetkými ostatnými komponentmi, ktoré sa majú pre produkt použiť. Existencia niektorých z týchto rozhraní, ako napríklad SPI a I2C, na mikrokontroléri vždy zvyšuje náklady na tieto mikrokontroléry a v závislosti od rozpočtu kusovníka môže požadovaný mikrokontrolér spôsobiť, že nebude cenovo dostupný. V situáciách ako sú tieto, prichádzajú na rad techniky ako Bit Banging.
Čo je bit búranie?
Bit búchanie je technika pre sériovú komunikáciu, pri ktorej je celý komunikačný proces riešený pomocou softvéru namiesto vyhradeného hardvéru. Na prenos dát technika zahrnuje použitie softvéru na kódovanie údajov do signálov a impulzov, ktoré sa používajú na manipuláciu so stavom I / O kolíka mikrokontroléra, ktorý slúži ako Tx kolík na odosielanie dát do cieľového zariadenia. Na príjem dát technika zahrnuje vzorkovanie stavu kolíka Rx po určitých intervaloch, ktoré sú určené prenosovou rýchlosťou komunikácie. Softvér nastavuje všetky parametre potrebné na dosiahnutie tejto komunikácie vrátane synchronizácie, časovania, úrovní atď., O ktorých obvykle rozhoduje vyhradený hardvér, keď sa bit búchanie nepoužíva.
Kedy použiť bit búchanie
Bit-búchanie sa zvyčajne používa v situáciách, keď mikrokontrolér s požadovaným rozhraním nie je k dispozícii, alebo keď môže byť prechod na mikrokontrolér s požadovaným rozhraním príliš drahý. Poskytuje tak lacný spôsob umožnenia rovnakého zariadenia komunikovať pomocou niekoľkých protokolov. Mikrokontrolér, ktorý je predtým povolený iba na komunikáciu UART, môže byť vybavený na komunikáciu pomocou SPI a 12C prostredníctvom bitového bitovania.
Algoritmus pre sériovú komunikáciu pomocou bit búchania
Zatiaľ čo sa kód na implementáciu bitového bitovania môže líšiť v rôznych mikrokontroléroch a môže sa líšiť aj v prípade rôznych sériových protokolov, postup / algoritmus na implementáciu bitového bitovania je vo všetkých platformách rovnaký.
Na odosielanie údajov sa používa napríklad nižšie uvedený pseudokód;
- Štart
- Poslať začiatočný bit
- Počkajte, kým načasovanie zodpovedá prenosovej rýchlosti prijímača
- Odoslať dátový bit
- Počkajte, kým doba opäť nebude zodpovedať prenosovej rýchlosti prijímača
- Skontrolujte, či boli odoslané všetky dátové bity. Ak nie, prejdite na 4. Ak áno, choďte na 7
- Odošlite stop bit
- Prestaň
Príjem dát býva o niečo zložitejší, zvyčajne sa na zistenie, či sú údaje k dispozícii na kolíku prijímača, používa prerušenie. To pomáha zabezpečiť, aby mikrokontrolér neplytval príliš veľa výpočtovej sily. Aj keď určité implementácie používajú niektorý z I / O pinov mikrokontrolérov, pravdepodobnosť šumu a chýb, ak sa pravdepodobne nezvládnu, je vyššia. Algoritmus prijímania údajov pomocou prerušení je vysvetlený nižšie.
- Štart
- Povoliť prerušenie na kolíku Rx
- Keď sa spustí prerušenie, získajte štartovací bit
- Počkajte na načasovanie podľa prenosovej rýchlosti
- Prečítajte si kolík Rx
- Opakujte od 4 do prijatia všetkých údajov
- Počkajte na načasovanie podľa prenosovej rýchlosti
- Skontrolujte dorazový bit
- Prestaň
Bit búchanie cez SPI
Ako už bolo spomenuté vyššie, búchanie bitov pre rôzne protokoly funguje odlišne, a preto je dôležité prečítať si o každom protokole, porozumieť rámcovaniu a časovaniu údajov pred pokusom o implementáciu. Ako príklad môžeme uviesť režim SPI 1, základná hodnota hodín je vždy 0 a dáta sa vždy odosielajú alebo prijímajú na nábežnej hrane hodín. Schéma časovania komunikačného protokolu SPI Mode 1 je uvedená nižšie.
Na implementáciu je možné použiť nasledujúci algoritmus;
- Štart
- Pre začatie komunikácie nastavte nízky pin SS
- Nastavte kolík pre Master Out Slave In (MOSI) na prvý bit dát, ktoré sa majú odoslať
- Nastavte pin hodín (SCK) na vysokú hodnotu, aby dáta prenášal nadradený počítač a prijímal podriadený modul
- Prečítajte si stav Master in Slave Out (MISO), aby ste prijali prvý bit dát od slave
- Nastavte SCK Low, aby bolo možné údaje odosielať na nasledujúcej nábežnej hrane
- Prejdite na 2, kým sa neprenesú všetky dátové bity.
- Nastavte pin SS na vysokú hodnotu, aby sa zastavil prenos.
- Prestaň
Príklad bit búchania: SPI komunikácia v Arduine
Ako príklad poďme implementovať algoritmus pre komunikáciu SPI pomocou bitového bitovania v Arduine, aby sme ukázali, ako je možné dáta bitovo biť cez SPI pomocou nižšie uvedeného kódu.
Začneme vyhlásením pinov Arduina za použitých.
const int SSPin = 11; const int SCKPin = 10; const int MISOPin = 9; const int MOSIPin = 8; byte sendData = 64; // Hodnota, ktorá sa má poslať, byte slaveData = 0; // na ukladanie hodnoty poslanej podriadeným
Ďalej sa presunieme k funkcii void setup (), kde je deklarovaný stav pinov. Ako vstup je deklarovaný iba pin Master in Slave out (MISO), pretože je to jediný pin, ktorý prijíma údaje. Všetky ostatné piny sú deklarované ako výstupné. Po vyhlásení režimov pinov je pin SS nastavený na HIGH. Dôvodom je zabezpečiť, aby bol proces bezchybný a komunikácia začala, až keď je nastavený na nízku úroveň.
void setup () { pinMode (MISOPin, INPUT); pinMode (SSPin, VÝSTUP); pinMode (SCKPin, VÝSTUP); pinMode (MOSIPin, VÝSTUP); digitalWrite (SSPin, HIGH); }
Ďalej začneme slučku na odosielanie údajov. Upozorňujeme, že táto slučka bude neustále odosielať údaje opakovane.
Začneme slučku tak, že napíšeme SS pin low, aby sa zahájil začiatok komunikácie, a zavoláme funkciu bitbangdata, ktorá rozdelí preddefinované dáta na bity a odošle. Keď to máme hotové, potom napíšeme SS pin HIGH, aby sme označili koniec prenosu dát.
void loop () { digitalWrite (SSPin, LOW); // SS low slaveData = bitBangData (sendData); // prenos dát digitalWrite (SSPin, HIGH); // SS opäť vysoká }
Bitbangdata () funkcia je zapísaný nižšie. Funkcia prijíma dáta, ktoré sa majú poslať, a rozdelí ich na bity a odošle ich opakovaním kódu pre prenos, ako je uvedené v kroku 7 algoritmu.
byte bitBangData (byte _send) // Táto funkcia prenáša údaje pomocou bitbanging { byte _receive = 0; for (int i = 0; i <8; i ++) // 8 bitov v byte { digitalWrite (MOSIPin, bitRead (_send, i)); // Nastaviť MOSI digitalWrite (SCKPin, HIGH); // SCK high bitWrite (_receive, i, digitalRead (MISOPin)); // Zachytiť MISO digitalWrite (SCKPin, LOW); // SCK low } return _receive; // Vrátiť prijaté údaje }
Nevýhody bitového tresku
Prijatie bitového búchania by malo byť dobre premysleným rozhodnutím, pretože bitové búchanie má niekoľko negatív, ktoré môžu spôsobiť, že jeho implementácia do určitých riešení nebude spoľahlivá. Bitové búchanie zvyšuje energiu spotrebovanú mikrokontrolérom v dôsledku vysokej procesnej energie spotrebovanej procesom. V porovnaní s vyhradeným hardvérom sa pri použití bitového bitového útoku vyskytne viac komunikačných chýb, ako sú závady a chvenie, najmä keď dátovú komunikáciu vykonáva mikrokontrolér súčasne s inými úlohami. Komunikácia prostredníctvom bitov bitov sa deje pri zlomku rýchlosti, s akou sa používa, keď sa používa vyhradený hardvér. To môže byť dôležité v určitých aplikáciách a môže byť bitové bitie „nie tak dobrou“ voľbou.
Bitovanie bitov sa používa pre všetky druhy sériovej komunikácie vrátane; RS-232, asynchrónna sériová komunikácia, UART, SPI a I2C.
UART prostredníctvom bitovania bitov v Arduine
Jednou z populárnych implementácií bitovania bitov je knižnica sériového softvéru Arduino, ktorá umožňuje Arduinu komunikovať cez UART bez použitia vyhradených hardvérových pinov UART (D0 a D1). To dáva veľkú flexibilitu, pretože používatelia môžu pripojiť toľko sériových zariadení, koľko podporuje počet pinov na doske Arduino.