問題タブ [nrf52]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linker - nrf52 S132 ブートローダーのリンカー スクリプト
現在、デュアル チャネル DFU および SD132 に適したブートローダーを構築しています。nrf52832 にあり、現在 PCA10040 にあります。リンカー スクリプトは機能し、16 進ファイルを作成しますが、app_error_code 1
after nrf_sdh_enable_request()
, fromが残りますsd_softdevice_enable()
。
LSのせい?マークを完全に逃しましたか?それとも全く違うものですか。詳細についてはお気軽にお問い合わせください。他に何を追加すればよいかわからないため、LS を含めました。
ありがとう
以下は、SDK のさまざまな例をまとめたものです。
android - Android と NRF52832 間の断続的な BLE スループットの問題
発生している断続的な BLE スループットの問題の原因を特定するための支援を探しています。
セットアップ:
BLE経由で3つのセンサーに接続するカスタムアプリケーションを備えたAndroid 7.1.1を実行している携帯電話(nexus 5x)があります。センサーは Nordic NRF52832 に基づいており、カスタム ファームウェアを実行しています。Nordic ファームウェアは作成していませんが、nrf5_SDK_v12.2 S132 SDK / ソフト デバイスを使用していると言われています。Nordic は、Nordic UART サービス (NUS) を介してセンサー データを電話にストリーミングします。
問題:
通常、私は自分のアプリを実行し、センサーに接続してから、センサーから電話にデータをストリーミングします。すべてが期待どおりに機能する場合、各センサーからの平均データ スループットは ~ 2250 Bps です (電話で測定)。しかし、時折、スループットが大幅に低下する 1 つまたは 2 つのセンサー (常に 2 つになる可能性があります) が得られます。スループットが低下すると、通常、センサーからのスループットは 750Bps ~ 1500Bps に低下しますが、影響を受けていないセンサーからのスループットは同じままです。システムが 3 つのセンサーすべてに対してフル帯域幅で実行されているのを観察したことがありません。その後、突然 2 つのセンサーのスループットが低下したり、その逆になったりします。接続がセットアップされると、全速接続または減速接続のように見えます。
私が試したこと/除外したこと:
- 最初は RF の問題だと思ったので、電話側の各センサーの RSSI を記録し始めました。ログを確認すると、RF の問題ではないようです。-90dB という低い RSSI でシステムのフル スループット動作を観察し、-40dB という高い RSSI でスループットを低下させました。
- 2 つ目は、センサーになんらかの問題があり、データの生成速度が低下した可能性があることです。これを確認するために、まず (電話で) NUS データ特性通知から受信したすべてのバイト数をログに記録しました。センサーの帯域幅が減少すると、特性の変化により、電話で常に 20 バイトが受信されることがわかります (MTU -3)。これにより、センサーの BLE サブシステムが、センサーによって生成されたデータに追いついていないことがわかりました。この結論をさらに検証するために、Nordic チップにデバッガーを接続し、測定値が ble NUS 経由で送信される前に測定値のバッファーに使用されるバッファーを監視しました。バッファーがいっぱいだったためにサンプルがドロップされていることがわかりました。
- さらに、速度低下の原因は自分のアプリではないと思います。onCharacteristicChanged() コールバックにとどまらないようにしました。私のアプリは、新しいバイトをキューに入れ、別のスレッドで処理するだけです。
- OnConnectionStateChanged() で gatt 接続が確立された後、電話で gatt.RequestConnectionPriority(GattConnectionPriority.High) を呼び出して、各センサーに優先度の高い接続を要求しました。
- Nordic の最小/最大接続間隔を 12.5ms に設定しました
私の結論/質問
私の観察によると、接続が確立されたときに、電話またはセンサーが接続の帯域幅を減少させる何かが起こっているようです。MTU/接続間隔 (CI) 以外では、どのパラメーターが接続のスループットの低下を引き起こしているのかわかりません。
- これらのスループットの問題が断続的に発生する理由について何か考えはありますか?
- Android BLE スタックがやりたくないことをしているという直感がありますが、接続プロパティに関してはブラック ボックスのようなものです。意図的に接続を遅くすることをどのように検出できますか?
完全な免責事項、私の電話アプリは Xamarin 用に c# で記述されていますが、それは問題ではないと思います。
ありがとう!
c - サンプル コードのソース ファイル内の関数でスタックする
SPI経由で外部ADCからデータを受信し、ADCからのデータに依存するデューティサイクルでPWM信号を出力するNetbeans IDEのcで、NRF52832マイクロコントローラでプログラムを開発しています。
SPI ドライバーと PWM ドライバーが別々のプロジェクトで動作するサンプル コードを取得しましたが、現在、この 2 つを結合しようとしています。ただし、PWM ドライバーから SPI ドライバーに関数を挿入し、対応するインクルード ファイルを SPI ドライバーに挿入すると、サンプル コードの一部として含まれているソース ファイルの if ループでスタックします。トラブルシューティングを開始する方法さえわからなくなったので、提案や洞察をいただければ幸いです。
現在、main.c に次のコードを追加するまで正常に動作している SPI ドライバーで作業しています。
デバッグすると、機能に到達するまですべて問題ありません
この関数をステップ実行すると、舞台裏で一連の初期化が行われ、次の関数でスタックします。
これが残りの main.c コードです (pwm に関係するものはすべて私が追加したもので、残りは SPI ドライバーのサンプル コードです):
どんな提案でも大歓迎です!重要な情報を省略した場合は、明確化を求めてください。できる限り提供します。
アップデート
やあみんな、たくさんの反応に感謝します。画像の画面の左側にあるすべての関連変数とその値を (うまくいけば) デバッグしながら、ループの Imgur アルバムを作成しました: https://imgur.com/a/HYah1yC
アルバムでわかるように、ポインターは*p_rd_idx
内部で際限なく増加nrf_log_frontend.c
し、何らかの理由で関数の最後に到達しません。
@Yunnosch: の定義を見つけましたASSERT
:
expr
しかし、の値がでありOUT_OF_SCOPE
、右クリックして の宣言に移動しようとしてexpr
も、何も起こらないため、役に立たないと思います。