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の作業に関連する平和報告書のようなものです。 データシートと指定されたプログラミングガイドに加えて、アプリケーションノートにはレジスタマップという有用なドキュメントがあります 。 プログラミングガイドには、双方向通信用にトランスミッタを構成する方法も記載されています。 レジスタマップは、すべてのレジスタ、動作モード、および設定の詳細な説明を提供します。



All Articles