- Mi az a Bit Banging?
- Mikor kell használni a Bit Banging alkalmazást
- Algoritmus a soros kommunikációhoz Bit Banging segítségével
- Bit Dörömböl az SPI felett
- Példa a Bit Banging: SPI kommunikációra Arduino-ban
- A Bit Banging hátrányai
- UART keresztül Bit banging Arduino
A kommunikációs interfészek egyike azoknak a tényezőknek, amelyeket figyelembe veszünk a projekthez használandó mikrovezérlő kiválasztásakor. A tervező biztosítja, hogy a kiválasztott mikrovezérlő rendelkezik minden olyan interfésszel, amely a termékhez használt összes többi alkatrésszel való kommunikációhoz szükséges. Ezen interfészek némelyike, például az SPI és az I2C a mikrovezérlőn, mindig megnöveli az ilyen mikrovezérlők költségeit, és a BOM költségvetésétől függően a kívánt mikrovezérlőt nem teheti megfizethetővé. Ilyen helyzetekben olyan technikák jönnek be, mint a Bit Banging.
Mi az a Bit Banging?
A bit dörömbölés a soros kommunikáció olyan technikája, amelyben az egész kommunikációs folyamatot szoftveren keresztül kezelik dedikált hardver helyett. Adatátvitelhez a technika magában foglalja egy szoftver használatát, amely az adatokat jelekké és impulzusokká kódolja, amelyeket egy mikrokontroller I / O tűjének állapotának manipulálására használnak, amely Tx tűként szolgál adatok küldésére a céleszközre. Adatok fogadásához a technika magában foglalja az Rx pin állapotának mintavételét bizonyos intervallumok után, amelyet a kommunikációs átviteli sebesség határoz meg. A szoftver meghatározza a kommunikáció eléréséhez szükséges összes paramétert, beleértve a szinkronizálást, az időzítést, a szinteket stb., Amelyekről általában dedikált hardver dönt, ha a bithangot nem használják.
Mikor kell használni a Bit Banging alkalmazást
A Bit-Banging-ot általában olyan helyzetekben használják, amikor a szükséges interfésszel rendelkező mikrovezérlő nem áll rendelkezésre, vagy ha a szükséges interfésszel rendelkező mikrovezérlőre váltás túl drága lehet. Ez olcsó módot kínál arra, hogy ugyanazon eszköz több protokoll használatával kommunikálhasson. Az a mikrovezérlő, amely korábban csak az UART kommunikációra volt engedélyezve, felszerelhető az SPI és a 12C használatára bitfrekvenciás kommunikációra.
Algoritmus a soros kommunikációhoz Bit Banging segítségével
Míg a bitcsattanás végrehajtására szolgáló kód eltérhet a különbözõ mikrokontrollerektõl, és különbözhet a különbözõ soros protokolloknál is, de a bitcsattanás végrehajtásának eljárása / algoritmusa minden platformon azonos.
Adatok küldéséhez például az alábbi álkódot használják;
- Rajt
- Kezdő bit küldése
- Várja meg, amíg az időzítés megfelel a vevő adatátviteli sebességének
- Adatbit küldése
- Várja meg, amíg az idő ismét megfelel a vevő adatátviteli sebességének
- Ellenőrizze, hogy az összes adatbit el lett-e küldve. Ha nem, ugorjon a 4. oldalra. Ha igen, folytassa a 7. lépéssel
- Stop bit küldése
- Álljon meg
Az adatok fogadása általában egy kicsit bonyolultabb, általában megszakítást használnak annak meghatározására, hogy mikor állnak rendelkezésre adatok a vevő érintkezőjén. Ez segít abban, hogy a mikrovezérlő ne pazarolja túl sok feldolgozási teljesítményt. Bár bizonyos megvalósítások a mikrovezérlők bármelyikének I / O csatlakozóját használják, a zaj és a hibák esélye - ha valószínűleg nem is kezelhető - nagyobb. Az alábbiakban ismertetjük az adatok megszakításokkal történő fogadásának algoritmusát.
- Rajt
- Engedélyezze a megszakítást az Rx csapon
- Amikor a megszakítás elindul, szerezze be a kezdő bitet
- Várja meg az átvitelt az adatátviteli sebességnek megfelelően
- Olvassa el az Rx csapot
- Ismételje meg 4-től, amíg az összes adat meg nem érkezik
- Várja meg az átvitelt az adatátviteli sebességnek megfelelően
- Ellenőrizze a leállító bitet
- Álljon meg
Bit Dörömböl az SPI felett
Mint fent említettük, a különböző protokollok bitdurranása másképp működik, ezért fontos, hogy olvassunk el az egyes protokollokról, megértsük az adatok keretezését és ütemezését, mielőtt megpróbálnánk végrehajtani őket. Például az 1. SPI módot véve, az óra alapértéke mindig 0, és az adatokat mindig az óra emelkedõ szélén küldi vagy fogadja. Az SPI 1. módú kommunikációs protokoll időzítési diagramja az alábbiakban látható.
Ennek megvalósításához a következő algoritmus használható;
- Rajt
- Állítsa alacsonyra az SS tűt a kommunikáció megkezdéséhez
- Állítsa be a Master Out Slave In (MOSI) PIN-kódját az elküldendő adatok első bitjéhez
- Állítsa magasra az órajelet (SCK), hogy az adatokat a master továbbítsa és a szolga fogadja
- Olvassa el a Master in Slave Out (MISO) állapotát, hogy megkapja az első bit adatot a slave-től
- Állítsa az SCK Low értéket, így az adatok a következő emelkedő élre kerülhetnek
- Folytassa a 2. lépéssel, amíg az összes adatbit továbbításra nem kerül.
- Állítsa az SS tűt magasra az átvitel leállításához.
- Álljon meg
Példa a Bit Banging: SPI kommunikációra Arduino-ban
Példaként valósítsuk meg az SPI-kommunikáció algoritmusát az Arduino-ban bitcsattanással, hogy bemutassuk, hogyan lehet az adatokat az SPI-n keresztül bitrobbantani az alábbi kód segítségével.
Azzal kezdjük, hogy deklaráljuk az Arduino csapjainak használatát.
const int SSPin = 11; const int SCKPin = 10; const int MISOPin = 9; const int MOSIPin = 8; bájt sendData = 64; // Küldendő érték byte slaveData = 0; // a rabszolga által küldött érték tárolására
Ezután áttérünk a void setup () függvényre, ahol a csapok állapotát deklaráljuk. Csak a Master in Slave out (MISO) csap van deklarálva bemenetként, mivel ez az egyetlen pin, amely adatokat fogad. Az összes többi tüskét kimenetként deklarálják. A csap üzemmódok deklarálása után az SS tű HIGH értékre áll. Ennek oka annak biztosítása, hogy a folyamat hibamentes legyen, és a kommunikáció csak akkor kezdődik, ha alacsonyra van állítva.
void setup () { pinMode (MISOPin, INPUT); pinMode (SSPin, OUTPUT); pinMode (SCKPin, OUTPUT); pinMode (MOSIPin, OUTPUT); digitalWrite (SSPin, HIGH); }
Ezután elkezdjük a ciklust az adatok küldésére. Ne feledje, hogy ez a hurok folyamatosan továbbítja az adatokat.
A ciklust azzal kezdjük, hogy alacsonyra írjuk az SS pin-t, hogy elindítsuk a kommunikáció kezdetét, és meghívjuk a bitbangdata függvényt, amely az előre meghatározott adatokat bitekre bontja és elküldi. Miután ezt megtettük, megírjuk a HIGH SS tűt az adatátvitel végének jelzésére.
void loop () { digitalWrite (SSPin, LOW); // SS alacsony slaveData = bitBangData (sendData); // adatátvitel digitalWrite (SSPin, HIGH); // SS ismét magasra }
A bitbangdata () függvényt alább írjuk. A függvény felveszi az elküldendő adatokat, és bitekre bontja, majd továbbítja az átviteli kód átkötésével, az algoritmus 7. lépésében leírtak szerint.
byte bitBangData (byte _send) // Ez a funkció bitbangingon keresztül továbbítja az adatokat { byte _receive = 0; for (int i = 0; i <8; i ++) // 8 bit bájtban { digitalWrite (MOSIPin, bitRead (_send, i)); // MOSI digitalWrite beállítása (SCKPin, HIGH); // SCK high bitWrite (_receive, i, digitalRead (MISOPin)); // MISO digitalWrite rögzítése (SCKPin, LOW); // SCK low } return _receive; // A kapott adatok visszaküldése }
A Bit Banging hátrányai
A bit dörömbölés elfogadásának átgondolt döntésnek kell lennie, mivel a bit dörömbölésnek számos hátránya van, ami miatt nem biztos, hogy bizonyos megoldásokban megvalósítható. A bitcsattanás növeli a mikrovezérlő által fogyasztott energiát a folyamat által felhasznált nagy feldolgozási teljesítmény miatt. A dedikált hardverhez képest több kommunikációs hiba, például hibák és rázkódások fordulnak elő, amikor bitcsattanást alkalmaznak, különösen akkor, ha az adatkommunikációt a mikrovezérlő más feladatokkal egy időben végzi. A bitdurranással történő kommunikáció annak a sebességnek a töredékén megy végbe, amellyel dedikált hardver használata esetén történik. Ez bizonyos alkalmazásokban fontos lehet, és a kis dörömbölést „nem túl jó” választássá teheti.
A bitcsattanást mindenféle soros kommunikációhoz használják, beleértve; RS-232, aszinkron soros kommunikáció, UART, SPI és I2C.
UART keresztül Bit banging Arduino
A bitcsattanások egyik népszerű megvalósítása az Arduino Software Serial könyvtár, amely lehetővé teszi az Arduino számára, hogy az UART-on keresztül kommunikáljon a dedikált hardveres UART-csapok (D0 és D1) használata nélkül. Ez nagy rugalmasságot biztosít, mivel a felhasználók annyi soros eszközt tudnak csatlakoztatni, amennyit az Arduino táblán lévő csapok száma támogat.