※ ChatGPTを利用し、要約された質問です(原文:TI社製CC1101のキャリアセンス機能停止方法)
CC1101キャリアセンス機能停止方法
2019/03/15 12:12
このQ&Aのポイント
CC1101を搭載した親機と子機の間で無線データ通信を行うプログラムを作成していますが、子機でキャリアセンスが発生する現象が発生しています。
データシートを参照しながらキャリアセンスを無効にするレジスタ設定を行った結果、電波送信では問題がないことが確認できましたが、親機からの返答信号の受信ができなくなりました。
このような場合にキャリアセンス機能のみを無効にする方法を教えてください。
現在CC1101というTI社製の無線ICを搭載した基板端末のプログラムをやっています。
http://www.tij.co.jp/product/jp/CC1101
このCC1101を搭載した親機と子機の間で無線データ通信をさせるプログラムを作成しています。
CC1101には電波を送信しようとする際に、使用している周波数帯付近で他の端末が電波を出していないかを確認して電波がぶつからないようにするためのキャリアセンスという機能があります。
この機能を親機、子機共に使用しています。
ただ、複数の子機の基板で、実装などにバラツキがあるようで、特に電波のぶつかりが低い状況にも関わらず、このキャリアセンスが発生したと判定される現象をデバッグ中に確認しました。
これが本当に基板のせいなのかなどを切り分けたいと思い、とりあえずキャリアセンス機能を無効にしようと思い、次のようにプログラム内容を変更してみました。
////変更前////
{CC1100_REG_AGCCTRL1,0x50},
{CC1100_REG_AGCCTRL2,0x03}, // CS thrthold about 61dBm add 2018/03/13
////変更後////
{CC1100_REG_AGCCTRL1,0x48},
{CC1100_REG_AGCCTRL2,0x00}, // CS cariier sense disabled add 2019/03/14
データシートを参照しながら、キャリアセンスを無効にするレジスタ設定にしてみたのですが、電波送信では問題がないことをスペクトラムアナライザで確認できたのですが、今まで出来ていた親機からの返答信号の受信動作が出来なくなってしまいました。
このような場合に、キャリアセンス機能のみを無効にするレジスタ設定方法をご教示頂きますよう、よろしくお願い致します。
質問の原文を閉じる
質問の原文を表示する
お礼
回答頂きありがとうございます。 同様の内容を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ビットでキャリアセンスの有効・無効が決定しているとのことがわかり助かりました。