SI4432無線モゞュヌルを䜿甚する

この蚘事では、SI4432トランシヌバヌのISMチップ産業、科孊、および医療無線垯域䞊の無線モゞュヌルの機胜的特城に぀いお説明したす。 ゜フトりェアモゞュヌルの初期化の最も単玔な䟋も瀺し、いく぀かの可胜な構成のバリ゚ヌションに぀いお説明したす。



SI4432チップの説明


受信機の感床は-121 dBmです 。 最倧+20 dBmの送信機電力3 dBmステップの゜フトりェア蚭定が可胜。 組み蟌みのダむバヌシティ受信機胜アンテナダむバヌシティがありたす。 このチップは、156240-480 MHzたたは312 Hz480-960 MHzの増分で240〜960 MHzの呚波数で動䜜できたす。 このチップには、自動りェむクアップタむマヌ、ロヌバッテリヌ怜出噚、64バむト受信/送信バッファヌ、自動パケットプロセッサ、枩床センサヌ、8ビットADC、電圧リファレンス、3぀のGPIOピン、さたざたなタむプの信号倉調などの機胜もありたす。 OOK、FSK、GFSKなど

超小型回路は1.8〜3.6 Vの䟛絊電圧で動䜜したす。

無線モゞュヌルの機胜


モゞュヌルには電圧レギュレヌタがないため、ロゞック入力には適切な電源ず適切なレベルが必芁です。 モゞュヌルには、マヌキングG4Cが付いた別の小さな6ピン超小型回路が芋えたす。 これは、TX端子ずRX端子間でアンテナを切り替える機胜を実行するuPG2179TBチップであり、モゞュヌルに受信モヌドず送信モヌドの䞡方で機胜する機胜を提䟛したす。 スむッチチップは、GPIO0およびGPIO1ポヌトを介しおSI4432自䜓によっお制埡されたす。これらのポヌトは、初期化䞭に、受信/送信モヌドを倉曎/蚭定するために適宜プログラムする必芁がありたす。 同時に、この回路構成ではダむバヌシティ受信機胜を䜿甚できたせん。たた、GPIO0およびGPIO1ピンの動䜜は、uPG2179TBスむッチを制埡するためにのみ予玄する必芁がありたす。

SI4432アンテナ入力のストラップに取り付けられたコンデンサずむンダクタンスの倀は、動䜜呚波数範囲、アンテナ特性、および䟛絊電圧の範囲に基づいお遞択する必芁がありたす。 これらの芁玠がどの宗掟にあるのかは䞍明です。

モゞュヌルの回路図は、図に瀺されおいるずおりではありたせんが、デヌタシヌトの情報に埓っお、モゞュヌルのピン配眮を蚭定できたす。

画像

NSEL、SCLK、SDI、SDO -SPIむンタヌフェヌスSI4432での䜜業は、SPIむンタヌフェヌスを介したSI4432レゞスタの曞き蟌みず読み取りになりたす。

NIRQ-割り蟌み出力受信/送信むベントなどが発生するず、このピンのレベルは0に䜎䞋したす。むベントが割り蟌みに぀ながるのは、察応するレゞスタのビットの倀によっお異なりたす。

SDN -SI4432動䜜モヌド制埡出力.SDNで高レベルに蚭定するず、SI4432はシャットダりンモヌドになり、マむクロチップは15 nAの消費電流で省゚ネモヌドになりたすが、レゞスタの内容党䜓は元の状態に戻り、SPI経由のデヌタ送信は䞍可胜です;

VDD -1.8〜3.6 Vのモゞュヌル電源。

GND- 「アヌス」。

GPIO0、GPIO1、GPIO2-プログラム可胜な入力/出力ポヌトモゞュヌルをはんだ付けしない堎合、GPIO0 GPIO1は送信/受信モヌドを切り替えるためにすでに䜿甚されおいるため、GPIO2のみを目的にプログラムできたす。

モゞュヌルのセットアップ


以䞋で説明するすべおのレゞスタ蚭定は、 AN415プログラミングガむドから取埗されたす。 このファむルは、SI4432の送信機、受信機、トランシヌバヌずしおの䜿甚を察象ずしおおり、64 KBを超える長さのパケットを転送する問題に぀いおも説明しおいたす。

SI4432マむクロチップには、A、V、Bの異なるリビゞョンがありたす。コヌドの最初の文字、私の堎合はBPS10P、次にリビゞョンBによっお決たりたす。異なるリビゞョンの堎合、初期化にはいく぀かの機胜がありたす。

コントロヌラヌぞの接続


モゞュヌルは䞊蚘のピン配列に埓っお接続されたす。 単玔なデヌタの受信たたは送信のために、GPIOピンをマむクロコントロヌラヌの入力から省略し、宙に浮いたたたにするこずができたす。 SPIピンはマむクロコントロヌラヌの察応するピンに接続され、NIRQはマむクロコントロヌラヌの空いおいるピンに掛けるこずができたすおそらく、前面で倖郚割り蟌みを取埗できるようなピンの方が良いでしょう。 SDNは「グランド」たたはMKの出力に移動できたすが、0に蚭定するこずを忘れないでください。

SPIの読み取りず曞き蟌み


SI4432補造元は、SPIを䜿甚しおレゞスタを読み曞きするために次の関数を䜿甚するこずを提案しおいたす。

蚘録

void SpiWriteRegister (U8 reg, U8 value) { //     //    NSEL  0 NSS = 0; //     SPI  //           ( 127 ) SPI1DAT = (reg|0x80); //   while( SPIF1 == 0); SPIF1 = 0; //    SI4432   SPI  SPI1DAT = value; //   while( SPIF1 == 0); SPIF1 = 0; //  NSS = 1; } 

読曞

 U8 SpiReadRegister (U8 reg) { //    NSEL  0 NSS = 0; //     SPI  (   - 0) SPI1DAT = reg; //   while( SPIF1 == 0); SPIF1 = 0; //     SPI  //         SI4432 SPI1DAT = 0xFF; //   while( SPIF1 == 0); SPIF1 = 0; //  NSS = 1; //         SI4432 return SPI1DAT; } 

初期化。 はじめに


次の操䜜をお勧めしたす。

1SDNピンを0に蚭定したす。
2SPI経由でコマンドを送信する前に15ミリ秒埅機したす。
3割り蟌みレゞスタのステヌタスを読み取りたす。
4゜フトリセットを実行したす。

 SDN = 0; // SDN  0 delay_ms(15); //  ItStatus1 = SpiReadRegister(0x03); ItStatus2 = SpiReadRegister(0x04); //   SpiWriteRegister(0x07, 0x80); // 0x80   Operating & Function Control1 //   while ( NIRQ == 1); //  ItStatus1 = SpiReadRegister(0x03); //read the Interrupt Status1 register ItStatus2 = SpiReadRegister(0x04); //read the Interrupt Status2 register 

ステヌタスを読み取るず、割り蟌みフラグがクリアされ、NIRQ出力が1にリセットされたす割り蟌みが発生するず、NIRQは0にリセットされ、察応するステヌタスレゞスタが読み取られるたでこの状態のたたになりたす。

呚波数パラメヌタヌの蚭定


超小型回路はかなり広い呚波数範囲での動䜜をサポヌトしおいるため、呚波数の原因ずなるレゞスタを構成するのはかなり困難です。 補造業者は、電卓 EZRadioPRO Register Calculator を䜿甚しお呚波数レゞスタの倀を蚈算するこずをお勧めしたす。 蚈算機はMicrosoft Excellファむルです。



このファむルには、適切なデフォルトがすでに蚭定されおいたす。 倀は灰色のボックスでのみ倉曎できたす。 このファむルで、䌝送速床J9ず搬送呚波数B17を担圓するセルの倀を倉曎するこずをお勧めしたす。 通垞、䌝送速床が䜎いほど、デヌタ転送䞭に゚ラヌが発生する可胜性は䜎くなりたす。 信号倉調のタむプを遞択できたすFSK、GFSK、OOK。

OOK倉調は、信号増幅噚をオンたたはオフにしおデヌタを゚ンコヌドしたす。 送信するデヌタがない堎合、アンプはオフになり、論理0を送信する堎合、アンプは1ビットの期間オフになり、論理1を送信する堎合、アンプは1ビットの期間オンになりたす。

FSKは、デゞタルデヌタを送信する信号の呚波数を倉曎するこずに基づいおいたす。 論理倀0を送信するには、キャリア信号の呚波数は偏差の呚波数の倀だけ枛少し、論理倀1の堎合は増加したす。 GFSKずFSKの違いは、GFSKがデヌタビットにガりスフィルタヌを適甚するこずです。

このタむプの倉調は、図からわかるように、利甚可胜な他のタむプの倉調ず比范しお最高の䜜業効率ずよりクリヌンな信号スペクトルを提䟛するため、メヌカヌはGFSKタむプの䜿甚を掚奚しおいたすFSKずGFSKの比范



呚波数レゞスタの構成

 //   915  SpiWriteRegister(0x75, 0x75); SpiWriteRegister(0x76, 0xBB); SpiWriteRegister(0x77, 0x80); //   (9.6 kbps) SpiWriteRegister(0x6E, 0x4E); SpiWriteRegister(0x6F, 0xA5); SpiWriteRegister(0x70, 0x2C); //   (+-45 ) (   GFSK ) SpiWriteRegister(0x72, 0x48); 

パケットハンドラヌを䜿甚しおデヌタパケットを枡す


パケットハンドラは、受信モヌドず送信モヌドで䜿甚されたす。 パケットハンドラなしでデヌタを転送できたす。この堎合、レゞスタでパッケヌゞ構造を自分で蚘述する必芁がありたす。 通垞、パッケヌゞ構造は次のずおりです。



プリアンブルプリアンブル-受信機ず送信機を同期するために䜿甚されるシヌケンス0101 ... SI4432にはプリアンブル怜出噚が統合されおいたす。 レゞスタにSI4432を蚭定する堎合、プリアンブルの長さずプリアンブルを怜出するためのしきい倀が蚭定されたす。 プリアンブルの長さたたはプリアンブルの怜出しきい倀が特定の倀よりも小さい堎合、デヌタパケットを倱う可胜性が高くなりたす。 プリアンブル怜出噚は、怜出しきい倀に埓っおプリアンブルを怜玢したす。 察応するプリアンブルが芋぀かるず、同期ワヌド同期ワヌドを決定するメカニズムが開始されたす。

送信されたパケットは垞にプリアンブル010101 ...ビットパタヌンで始たりたす。これにより、受信者は送信されたデヌタを受信する準備ができたす。 プリアンブルdinは、しきい倀ず同様に、無線蚭定倉調のタむプ、自動呚波数調敎AFCに䟝存したす。 SI4432にはプリアンブル怜出噚が組み蟌たれおおり、受信信号でプリアンブル怜出噚がプリアンブルビットシヌケンスの事前定矩された長さを怜出するず、空から受信したビットをプリアンブルビットパタヌンず自動的に比范したす。 GPIOセットアップ。

プリアンブル怜出しきい倀はプログラム可胜な倀です。 倉調のタむプFSK、GFSK、OOK、自動呚波数調敎AFCおよびダむバヌシティダむバヌシティアンテナダむバヌシティの䜿甚に応じお、メヌカヌはプリアンブルを怜出するためのプリアンブルの長さずしきい倀を衚に埓っお遞択するこずを掚奚しおいたす。



AFCに぀いお
自動呚波数調敎AFCを䜿甚する堎合、受信機ず送信機の調敎された呚波数間のシフト倀は、呚波数オフセットレゞスタ1および2に蚘録されたす。 これらの倀を䜿甚しお、自動呚波数調敎を無効にし、プリアンブルの長さ、したがっお怜出しきい倀を削枛しながら、呚波数を埮調敎できたす。

プリアンブルを正垞に怜出した埌、無線は同期ワヌドを予期したす。 到着するず、受信したビットを比范したす。 比范に成功するず、SI4432は送信されたデヌタをFIFOに取り蟌み始めたす。 ビットシヌケンスの受信機ず送信機に知られおいる同期ワヌドは、送信されたデヌタの識別を可胜にしたす。

送信デヌタの長さが任意である堎合固定長にするこずができたす、送信デヌタの長さに関する情報を含むバむトがパケットに远加されたす。

CRCチェックサムもパッケヌゞに远加されたす。

マむクロコントロヌラヌは、パケットハンドラヌを䜿甚しお、SI4432の初期セットアップ䞭に送信パケットのフォヌマットを1回蚭定し、デヌタを転送するために、察応するFIFOレゞスタSI4432に曞き蟌むだけで枈みたす。

ヘッダヌを無効にしお、送信デヌタの可倉バむト数送信バむト数が送信デヌタパケットに自動的に蚘録されるおよび同期ワヌドに2バむトを蚭定したす。

 SpiWriteRegister(0x33, 0x02); 

ヘッダヌに぀いお
ヘッダヌを䜿甚する堎合、受信者のパケットハンドラヌがヘッダヌをフィルタヌ凊理するこずにより、メッセヌゞの送信元を特定したす。

同期ワヌド0x2DD4を盎接蚭定する

 SpiWriteRegister(0x36, 0x2D); SpiWriteRegister(0x37, 0xD4); 

送信機パケットハンドラヌずCRCの有効化

 SpiWriteRegister(0x30, 0x0D); 

FIFO倉調゜ヌスの遞択ずGFSK倉調の蚭定

 SpiWriteRegister(0x71, 0x63); 

倉調゜ヌス-ブロヌドキャストするために倉調する必芁があるデヌタ。 この堎合、FIFOは゜ヌスによっお蚭定されたす。 ただし、特定のタむミングでデヌタビットが任意のSI4432ピンGPIOn、SDI、NIRQに䟛絊される堎合、ダむレクトモヌドもありたす。

前述したように、モゞュヌルにはuPG2179TBチップ䞊にアンテナ甚の1぀の出力ず受信転送モヌドスむッチがあり、その出力はGPIO0およびGPIO1に接続されおいたす。 したがっお、GPIOをプログラムしお自動的に切り替えるこずができたす。

 SpiWriteRegister(0x0B, 0x12);//  GPIO0     TX SpiWriteRegister(0x0C, 0x15);// GPIO1     RX 

䞭心呚波数を蚭定する粟床は、氎晶振動子の粟床、その負荷容量、および共振噚回路のさたざたな浮遊容量によっお決たりたす。 次の方法で、䞭心呚波数の蚭定の粟床に察するこれらの芁因の圱響を枛らすこずができたす。

1送信機にはより高い偏差呚波数を䜿甚し、受信機にはより広い範囲を䜿甚したす。

2AFC自動呚波数キャリブレヌションを䜿甚したす。このためには、プリアンブルの期間を増やす必芁がありたす。

3氎晶振動子の負荷容量に察応するレゞスタを蚭定したす。

 SpiWriteRegister(0x09, 0xD7); // 0xD7       

パッケヌゞを送信しおいたす


1秒に1回パケットを送信したす。

 //  while(1) { delay_ms(1000); /*  */ //    - 8  SpiWriteRegister(0x3E, 8); // 8      // FIFO   SpiWriteRegister(0x7F, 0x42); SpiWriteRegister(0x7F, 0x55); SpiWriteRegister(0x7F, 0x54); SpiWriteRegister(0x7F, 0x54); SpiWriteRegister(0x7F, 0x4F); SpiWriteRegister(0x7F, 0x4E); SpiWriteRegister(0x7F, 0x31); SpiWriteRegister(0x7F, 0x0D); //        //         SpiWriteRegister(0x05, 0x04); SpiWriteRegister(0x06, 0x00); //   ,       NIRQ  . 1 ItStatus1 = SpiReadRegister(0x03); ItStatus2 = SpiReadRegister(0x04); /* */ //         SpiWriteRegister(0x07, 0x09); //    while(NIRQ == 1); //       ItStatus1 = SpiReadRegister(0x03); ItStatus2 = SpiReadRegister(0x04); } 

パケットハンドラヌを䜿甚しおデヌタパケットを受信する


無線の初期化


受信機の初期化は、送信機の初期化に䌌おいたす。 ステヌタスレゞスタをリセットしお読み取る必芁がありたす。

呚波数蚭定


 //   915  SpiWriteRegister(0x75, 0x75); SpiWriteRegister(0x76, 0xBB); SpiWriteRegister(0x77, 0x80); 

無線パラメヌタ9.6 kbps、GFSK倉調、呚波数偏差45 kHz、受信範囲112.1 kHz。 呚波数蚈算機に埓っお、次のレゞスタが埋められたす。

 SpiWriteRegister(0x1C, 0x05); // 0x05  IF Filter Bandwidth  SpiWriteRegister(0x20, 0xA1); // 0xA1  Clock Recovery Oversampling Ratio  SpiWriteRegister(0x21, 0x20); // 0x20  Clock Recovery Offset 2  SpiWriteRegister(0x22, 0x4E); // 0x4E  Clock Recovery Offset 1  SpiWriteRegister(0x23, 0xA5); // 0xA5  Clock Recovery Offset 0  SpiWriteRegister(0x24, 0x00); // 0x00  Clock Recovery Timing Loop Gain 1  SpiWriteRegister(0x25, 0x13); // 0x13  Clock Recovery Timing Loop Gain 0  SpiWriteRegister(0x1D, 0x40); // 0x40  AFC Loop Gearshift Override  SpiWriteRegister(0x72, 0x48); // 0x48  Frequency Deviation  SpiWriteRegister(0x2A, 0x20); // 0x20  AFC Limiter  

パッケヌゞ構造の蚭定


送信機ず同様ヘッダヌをオフにしお、送信デヌタの可倉バむト数送信バむト数が送信デヌタパケットに自動的に蚘録されるおよび同期ワヌドに2バむトを蚭定したす。

 SpiWriteRegister(0x33, 0x02); 

ヘッダヌフィルタリングをオフにしたす。

 SpiWriteRegister(0x32, 0x00 ); 

同期ワヌド0x2DD4を盎接蚭定する

 SpiWriteRegister(0x36, 0x2D); SpiWriteRegister(0x37, 0xD4); 

受信者パケットハンドラヌずCRCを有効にしたす。

 SpiWriteRegister(0x30, 0x85); 

FIFOモヌドずGFSK倉調を有効にする

 SpiWriteRegister(0x71, 0x63); 

プリアンブルの怜出しきい倀を20ビットに蚭定したす。

 SpiWriteRegister(0x35, 0x28); 

GPIOを蚭定しおアンテナを自動的に切り替える

 SpiWriteRegister(0x0B, 0x12);//  GPIO0     TX SpiWriteRegister(0x0C, 0x15);// GPIO1     RX 

固定パケット長に぀いお
パケット長が固定されおいる堎合、長さのデヌタはパケットに含たれたせんが、受信機ず送信機の䞡方の送信パケット長レゞスタに栌玍され、fixpklenビットはヘッダヌ制埡2レゞスタに蚭定する必芁がありたす レゞスタマップを参照

ダむバヌシティ受信を䜿甚しない堎合、アナログゲむン制埡が正しく機胜するには、AGCレゞスタのSGIビットを蚭定する必芁がありたす。

 SpiWriteRegister(0x69, 0x60); 

氎晶振動子の負荷容量を担圓するレゞスタを蚭定する

 SpiWriteRegister(0x09, 0xD7); // 0xD7       

パケット受信


レシヌバヌのアクティベヌション

 SpiWriteRegister(0x07, 0x05);// 0x05  Operating Function Control 1  

2぀の割り蟌みをオンにしたす。

1有効なパケットの受信時の䞭断。
2CRC゚ラヌ割り蟌み。

 SpiWriteRegister(0x05, 0x03); // 0x03  Interrupt Enable 1  SpiWriteRegister(0x06, 0x00); // 0x00  Interrupt Enable 2  

割り蟌みをリセットするためのステヌタスレゞスタの読み取り

 ItStatus1 = SpiReadRegister(0x03); ItStatus2 = SpiReadRegister(0x04); 

メむンルヌプ

 while(1) { //  if(NIRQ == 0) { //   ItStatus1 = SpiReadRegister(0x03); ItStatus2 = SpiReadRegister(0x04); if( (ItStatus1 & 0x01) == 0x01 )//  CRC { //  SpiWriteRegister(0x07, 0x01);// 0x01  Operating Function Control 1  // RX FIFO SpiWriteRegister(0x08, 0x02);// 0x02  Operating Function Control 2  SpiWriteRegister(0x08, 0x00);// 0x00  Operating Function Control 2  //  SpiWriteRegister(0x07, 0x05); } if( (ItStatus1 & 0x02) == 0x02 )//   { //  SpiWriteRegister(0x07, 0x01);// 0x01  Operating Function Control 1  //    length = SpiReadRegister(0x4B);//  Received Packet Length //    RX FIFO for(temp8=0;temp8 < length;temp8++) { payload[temp8] = SpiReadRegister(0x7F);// FIFO Access  } //     { //... } // RX FIFO SpiWriteRegister(0x08, 0x02);// 0x02  Operating Function Control 2  SpiWriteRegister(0x08, 0x00);// 0x00  Operating Function Control 2  //  SpiWriteRegister(0x07, 0x05); } } } 

おわりに


すべおのモゞュヌルプログラミング情報は、 アプリケヌションノヌト415プログラミングガむドから取埗されたす 。

SI4432デヌタシヌトには、すべおのアプリケヌションノヌトのリストがありたす。これは、SI4432の䜜業に関連する平和報告曞のようなものです。 デヌタシヌトず指定されたプログラミングガむドに加えお、アプリケヌションノヌトにはレゞスタマップずいう有甚なドキュメントがありたす 。 プログラミングガむドには、双方向通信甚にトランスミッタを構成する方法も蚘茉されおいたす。 レゞスタマップは、すべおのレゞスタ、動䜜モヌド、および蚭定の詳现な説明を提䟛したす。

Source: https://habr.com/ru/post/J307836/


All Articles