J-Link を使用した JN5189DK6 上の OpenThread イメージのデバッグに関する問題 – 「main() のソースが利用できません」
NXPサポートチーム様
私は現在、 JN5189DK6開発キットを使用して、OpenThread RCPイメージ(ot-rcp.elf)のフラッシュとデバッグを試みています。OpenThread スタックから構築されています。デバッガーがシンボルを解決できない問題が発生しています。具体的には、次のメッセージが表示されます。
- 「main() at 0x5da」のソースが利用できません
構成の詳細:
- 対象MCU: JN5189DK6
- 使用されたSDK: SDK_2_6_16_JN5189DK6
- OpenThread バージョン/リファレンス: ot-nxp v1.4.0 README の指示に基づく
- デバッガ: Segger J-Link (SWD インターフェース)
- デバッグインターフェース: CMSIS-DAP を使用しない (NXP ガイドに記載されているとおり)
- フラッシュフォーマット: .hexおよび.elf
- デバッグファイル: ot-cli-ftd.elf
- IDEs バージョン: MCUXpressoIDE_24.12.148
実行された手順:
デバッグ シンボルを有効にして、JN5189 ターゲット用の OpenThread RCP ファームウェアを構築しました。
- SWD インターフェースを使用してSegger J-Linkデバッガーをボードに接続しました。
シンボル参照のために ot-rcp.elf をデバッガーにロードしました。
デバッグ セッションを開始しましたが、次のメッセージが表示されました:
- 「main() at 0x5da」のソースが利用できません
添付ファイル:
ボード構成画像
デバッグファイル (ot-rcp.elf)
プロジェクト構成のスクリーンショット
Re: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ヴィカシュ。
R&D と相談した結果、より良いソリューションをCAN提供できると思います。
前述したように、JN5189 と K32W0x1 は同じファミリの互換チップであり、K32W0x1 は BLE が追加された JN の上位バージョンです。K32W0x1 ot-nxp の CASE では、実際の使用CASE (フレーム制御なしの RCP) で使用することを推奨する rcp_only_uart_dma 構成があります。script/build_k32w061 でCAN確認できます。
OT_OPTIONS_RCP_ONLY_UART_DMA=(
"-DOT_RCP_UART_DMA=ON"
"-DOT_APP_CLI=OFF"
"-DOT_FTD=OFF"
"-DOT_MTD=OFF"
"-DOT_1_2_SUPPORT=ON"
"-DUART_BAUD_RATE=1000000"
)
readonly OT_OPTIONS_RCP_ONLY_UART_DMA
この例では、UART および無線モジュールの処理を改善する特別な DMA ライブラリを使用します。
K32W0 の例をビルドし、JN5189 でテストに使用すること CAN。
BR、
ミハイ
Re: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ミハイさん。
1) すでにこのハードウェアを導入しているデバイスが多数あるため、JN5189 に制限されています。
2) ボーレート「1000000」を使用してみましたが、通信中にフレーミング エラーが発生します。
UART_DRIVER と SERIAL_MGR の両方でテストしました。SERIAL_MGR が推奨されるのはなぜですか?
さらにデバッグするために、ログを有効にして、USART FIFO オーバーフロー レジスタの値を確認しました。FIFOSTAT に RXERR ビットが設定されていることに気付きました。
参考までに、USART0 は 32 MHz (XTAL から供給) でクロックされ、メイン クロックは 48 MHz で動作しています。
BR、
ヴィカシュRe: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ミハイさん。
私が提起した 4 つのポイントのそれぞれに対処するために時間を割いていただいたこと、そして忍耐強く対応していただいたことに感謝いたします。
あなたの明確な説明のおかげで、私は問題をよりよく理解することができました。
BR、
ヴィカシュRe: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ヴィカシュ。
1) に関して、LPC-Link2 ポートと FTDI ポート間で UART をルーティングする場合の違いは、FTDI ポートでは UART が DK6 ボード上の FT230XS FTDI チップにルーティングされ、より「ハードウェア」なロジックで信号を USB に変換するため、処理が高速化されることです。LPC-Link2 ポートでは、信号はデバッガー プローブとしても機能する LPC4322 チップを介して渡されますが、これはより多くのプロセッシングによって遅延が生じる、より「ソフトウェア」的なアプローチを意味していると思われます。
私たちのシナリオではそのポートを使用しても問題は発生していませんが、私が指摘した制限があるため、実際のシナリオでは FTDI ポートを使用することをお勧めします。お勧めできるのは、LPC Link2 チップ上で実行されているファームウェアを切り替えることです。これを実行するには、LPC を DFU モードにして (JP5 を NORMAL から DFU に切り替える)、 LPCScrypt ソフトウェアを使用して変更を行います。リンク先にユーザーガイドがあります。CMSIS または JLink ファームウェアを使用するオプションがあります。
2)に関しては、 UART_USE_DRIVERではなくUART_USE_SERIAL_MGRを使用することをお勧めします。以前の投稿で提案した変更も行う必要があります。
- src/k32w0/jn5189/openthread-core-jn5189-config.h の OPENTHREAD_CONFIG_LOG_OUTPUT を OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED に変更
- 同じファイル内の OPENTHREAD_CONFIG_LOG_LEVEL から OT_LOG_LEVEL_DEBG へ
3)に関しては、はい、TeraTerm で SWO デバッグ行をキャプチャしたことを覚えています、SO動作するはずです。
4) に関しては、リンカー ファイルRAM0: 0x4000400 の変更は、ブート時に ROM コードを実行することによる RAM のニーズに対応するために行われました (スクラッチ RAM)。MCUXpresso の設定を変更して一致させることもできますが、ボードへの書き込み時に RAM にアプリケーションをロードしないため、古い設定を維持しても影響はないと思います。
JN5189 はレガシー部品であり、一部の機能は古くなっており、次のリリースでは更新されません。さらに、JN5189 と K32W0x1 は次のリリースで ot-nxp リポジトリから削除され、最後にリリースされたバージョンのメンテナンス フェーズに入る予定です。
スタックと SDKs のメンテナンスに関する継続的なサポートの恩恵を受ける NXP OpenThread Wireless シリコンを使用したソリューションを開発したい場合は、 MCXW7x ファミリを検討することをお勧めします。
BR、
ミハイ
Re: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ミハイさん。
現在、OpenThread Border Router (OTBR) 環境で JN5189 の UART 通信とデバッグ ログを設定しているときに、いくつかの問題が発生しています。以下にポイントを詳しく説明します。
1) LPC-LINK2 ポートを使用すると (デバッガーなしでも、UART 通信のみの場合)、otbr-agent を起動した直後に HDLC 解析エラーまたはフレーミング エラーが発生します。対照的に、FTDI-USB UART インターフェースを使用すると確実に動作し、コマンド負荷が重くならない限り、エージェントは通信を維持します。
LPC-LINK2ポート使用時のジャンパー設定を添付しました。(添付画像を参照: Jn5189_Debug_port_jumper_config_.png)
2) K32W0 と JN5189 の互換性を考慮して、USART1 (ピン 10/11 の TX/RX) 経由でデバッグ ログを有効にしようとしました。ただし、USB-UART アダプターを接続し、Minicom 経由で出力を監視すると、ログは表示されません。また、otbr-agent はメッセージを受信できず、最終的にタイムアウトになります。
SO変更した内容は次のとおりです。
jn5189-sdk-config.h 内:
#UART_USE_DRIVER 1 を定義する
#UART_USE_SERIAL_MGR 0 を定義する
#UART_USE_DRIVER_LOG 1 を定義する
#UART_USE_SERIAL_MGR_LOG 0 を定義する
#UART_USE_SWO_LOG 0 を定義する
CMake 構成に以下を追加しました:
オプション(OT_DEBUG_CONSOLE_ENABLE "gOtLogUartInstanceでデバッグコンソールを有効にする" ON)
(OT_DEBUG_CONSOLE_ENABLE) の場合
ターゲットコンパイル定義( ${NXP_DRIVER_LIB}
公開
-DgUartDebugConsole_d=1
)
終了()
build_jn5189 スクリプトの OT_OPTIONS の下に、以下を追加しました。
-DOT_DEBUG_CONSOLE_ENABLE=オン
これらの変更にもかかわらず、USART1 では出力が見られず、OTBR 通信は失敗します。
3) Minicom または同様のターミナルアプリケーションを使用して SWO デバッグ ログをキャプチャすることは可能ですか?そうでない場合、JN5189 で SWO 出力を表示するにはどのようなツールまたは方法が推奨されますか?
4) プロジェクトを作成し、次の方法で RAM 領域を設定します。
-> プロジェクト → プロパティ → C/C++ ビルド → MCU 設定 → JN5189 → 適用して閉じる
-> IDE に表示される RAM 境界値とリンカー スクリプトで定義された値の間に不一致があることに気付きました。
IDE の場合: (添付画像:JN5189_Mem_Layou_Ide.png を参照)
RAM0: 0x4000000、サイズ: 0x15FE0
RAM1: 0x4020000、サイズ: 0x10000
jn5189 リンカースクリプト (src/k32w0/jn5189/jn5189.ld) 内:
RAM0: 0x4000400、サイズ: 0x0015C00
RAM1: 0x4020000、サイズ: 0x10000
これらのメモリ構成のうちどれが正しいと考えられますか?IDEs 設定をリンカー スクリプトに合わせる必要がありますか、それともその逆でしょうか?
BR、
ヴィカシュ


Re: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ヴィカシュ。
デバッグ ログは USART1 インスタンスに出力されます。USART1 に使用できる他のピンについては、 JN5189 ユーザーマニュアルの表 3 を参照してください。JN5189 には 2 つの USART インスタンスがあり、USART0 は OpenThread CLI/Spinel 通信用です。
簡単に検索してみると、次のことがわかります。
USART0_TXD: PIO3、PIO8、PIO18。
UASRT0_RXD: PIO2、PIO9、PIO19。
USART1_TXD: PIO0、PIO6、PIO10、PIO20。
UASRT1_RXD: PIO1、PIO7、PIO11、PIO19。
BR、
ミハイ
Re: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ミハイさん。
ご提案ありがとうございます。残念ながら、JN5189 を統合するエンド プラットフォームはハードウェア フロー制御をサポートしていないSO、ハードウェア フロー制御なしでも動作する代替手段を検討する必要があります。
1つの追加の質問:-
1) GPIO を別の USART インスタンスとして構成してデバッグ ログを有効にしてリダイレクトし、Minicom を使用して出力を表示することは可能ですか?
よろしくお願いします、
ヴィカシュ
Re: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ヴィカシュ。
私がCAN提案できるのは、フロー制御のための K32W0 構成を確認することです。具体的には、script/build_k32w061 にビルド オプションがあります。
OT_OPTIONS_RCP_ONLY_UART_FLOW_CONTROL=(
"-DOT_RCP_FLOW_CONTROL=ON"
"-DOT_APP_CLI=OFF"
"-DOT_FTD=OFF"
"-DOT_MTD=OFF"
"-DUART_BAUD_RATE=1000000"
)
これにより、OT_RCP_FLOW_CONTROLオプションがONに設定され、SDKオプションが有効になります。
gUartHwFlowControl_d
boards//wireless_examples/openthread/reed/bm/board.c の SDK を調べると、これにより、UART0 のフロー制御に RTS および CTS ピンの使用が有効になり、デフォルトでは RTS の場合は PIO6、CTS の場合は PIO7 が有効になることがわかります。JN5189 ユーザーマニュアルの表 3 を参照して、ピンを他の USART0 使用ピンに調整できます。
これにより、UART 通信の安定性が向上します。
K32W0x1 は JN5189 とピン互換で、実際には BLE を備えた JN5189 のバリアントSO、K32W0 SDK を参照として使用できます。
BR、
ミハイ
Re: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ミハイさん。
アプリケーションをフリー実行構成で実行し、ブレークポイントが設定されていないことを確認しましたが、LPCLINK2 ポートをチェックしているときに同じ問題が発生します。
具体的には、RCP 側では、OTBR が大量 (100 ~ 150 バイト) のメッセージを連続して送信しているときに、バイトがドロップされたり、欠落したりしていることがわかります。これは、高い RX 負荷またはバッファ オーバーフローの処理に関する潜在的な問題を示しているようです (現在、Rx バッファ値は 10kb です)。
確認すべき追加の設定や手順がある場合、またはこの動作の原因となっている他の何かがある場合にはお知らせください。
BR、
ヴィカシュRe: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ヴィカシュ。
ホスト側、つまり ot-daemon を実行している MPU/MCU ホストで RCP タイムアウトが発生していますが、これは正常です。JN5189 RCP アプリケーションをデバッグしている間は、チップ上のコード実行が停止し、暗黙的にホストへの UART 通信も停止しているからです。
FTDI USB を使用するとプロセッサと通信が停止しないので、このようなイベント情報が表示されなくても正常です。
BR、
ミハイ
Re: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ミハイさん。
MCUXpresso IDEs で LPC-Link2 オンボード プローブを介してデバッグするたびに、ブレークポイントを設定せずにセッションを起動した場合でも、繰り返し発生する「rcp out」エラーが発生します。
以前にフラッシュしたバイナリを使用して FTDI-USB 接続にスイッチすると、タイムアウトの問題はまったく発生しません。
よろしく
ヴィカシュRe: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ミハイさん。
上記の手順に従うと、ログを IDEs に正常に送信できるようになりました。
ご協力ありがとうございます。
BR
ヴィカシュRe: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、
早急なご返信ありがとうございます。
上記の手順に従ってご連絡いたします。Re: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、
JN5189 上の任意の ot-nxp アプリのログ記録は、ビルドからの定義の一部を変更することで有効にCANます。私の記憶によれば、しばらく前にこれに取り組んだとき、次の点を変更する必要があります。
- src/k32w0/jn5189/openthread-core-jn5189-config.h の OPENTHREAD_CONFIG_LOG_OUTPUT を OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED に変更
- 同じファイル内の OPENTHREAD_CONFIG_LOG_LEVEL から OT_LOG_LEVEL_DEBG へ
- src/k32w0/jn5189/jn5189-sdk-config.h で UART_USE_SWO_LOG を 1 に設定
- 上記と同じファイルで、UART_USE_DRIVER_LOG と UART_USE_SERIAL_MGR_LOG を 0 に設定します
これにより、SWO インターフェースでのログ記録が有効になり、デフォルトでは P10 ヘッダーのピン 14 にルーティングされ、外部の LPC-Link2 SWO_TRGT にもルーティングされます。この設定により、外部 FTDI から USB へのアダプタ (ピンを FTDI アダプタの RX ピンに接続) を使用してピン 14 をプローブするか、MCUXpresso ITM ビューアでログを表示できるようになります。これに関するアプリケーションノートは、 https://community.nxp.com/pwmxy87654/attachments/pwmxy87654/mcuxpresso %40tkb/41/1/How% 20To %20Use%...でご覧いただけます。
確認のために私の側でこれを再テストする必要があり、今後数日中にこれを実行しようとしていますが、今のところ、あなたの側で開始するための情報がいくつかあるはずです。
BR、
ミハイ
Re: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、ミハイさん
MCU IDE を介した RCP デバッグ設定に関する解決策を提供していただきありがとうございます。
フォローアップとして、もう 1 点についてサポートが必要です。
RCP ファームウェアを搭載したノートPCに NXP ボードを接続する場合、MCU IDEs を介して RCP のログを直接表示することは可能ですか?もしSOなら、それらにアクセスする方法、またはこれを有効にするために IDEs を構成する方法を教えていただけますか?Re: Issue Debugging OpenThread Images on JN5189DK6 with J-Link – "No source available for main(こんにちは、
発生している問題は、デバッグ シンボルを削除する「MinSizeRel」オプションを使用してビルドが実行されていることが原因です。
これを修正するには、次の行を変更する必要があります: https://github.com/NXP/ot-nxp/blob/release/v1.4.0/script/build_jn5189#L40
「MinSizeRel」から「RelWithDebInfo」に変更し、イメージとフラッシュを再構築します。この変更を試してフィードバックをお寄せいただけますでしょうか?
良い一日を!
ミハイ