• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:TI社製CC1101のキャリアセンス機能停止方法)

CC1101キャリアセンス機能停止方法

このQ&Aのポイント
  • CC1101を搭載した親機と子機の間で無線データ通信を行うプログラムを作成していますが、子機でキャリアセンスが発生する現象が発生しています。
  • データシートを参照しながらキャリアセンスを無効にするレジスタ設定を行った結果、電波送信では問題がないことが確認できましたが、親機からの返答信号の受信ができなくなりました。
  • このような場合にキャリアセンス機能のみを無効にする方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kuro804
  • ベストアンサー率29% (523/1762)
回答No.1

こんばんは マニュアルには”Compete Radio Control State Diagram" という図表があるかと思います。 この図表で例えば”RX ”から”TX"への移行に対しての各種フラグの条件が記載されています。あるいは逆のRXからTXへの移行も読み取れます。 キャリアセンス以外にもCCAも関与しているようですね。 以上

techhouse
質問者

お礼

回答頂きありがとうございます。 同様の内容をTI社のフォーラム内で見つけて読んだところ、CCA_modeの設定でキャリアセンスの有効・無効が決まるという記事を見つけました。 https://bit.ly/2ucWp7e 現在のプログラム内容を確認したところ、パケットの送信時にのルーチンでは必ず MSCM1.CCA_MODE = 0 このようにCCA_MODEを無効にするプログラムが設置されていることを確認しました。 現在のプログラムでのMSCM1.CCA_MODEの設定を確認してみたところ、パケットを送信しようとするときは cc1101_tx という関数内で、 cc1100_write_reg(CC1100_REG_MCSM1,0x00); こちらのMCSM1レジスタに0x00という設定を必ず行っているというのを確認しました。 MSCM1.CCA_MODEビットは既に0に設定しているようで、他のプログラムでセットにするようなことはないことを確認しました。 すると、既にキャリアセンスは無効となっていることになります。 ただ、このcc1101_txの関数内で、パケットを送信する前に、近くで同じ周波数帯で何かの端末が電波を出していないかを確認するために PORTA.PIN2CTRL = 0x18; // pullup , both edge delay_ms(10); if(PORTA.IN & 0x04) { cc1100_cmd_idle(); if(th == 0) { return CARRIER_SENSE_DETECT; } } このようなプログラムでキャリアセンスの有無を確認して、あった場合は送信の中止を決めているのですが、if文でキャリアセンス検知などの分岐動作をしていることをデバッガで確認しています。 少し、腑に落ちない点があるのですが、とりあえず MSCM1.CCA_MODEビットでキャリアセンスの有効・無効が決定しているとのことがわかり助かりました。