こんにちは、
私は i.MX RT1170 (M7 コア) で以下の作業を行っています:
SDKバージョン25.09
FreeRTOS
USB CDC (仮想COM)
CAN-FDの並列実行
初期化は正常です。
USB 列挙が正常に完了しました。
通常実行中は、CAN-FD と USB 通信は両方とも正常に動作します。
通常の状態でのシステムの動作:
CAN-FDはデータを正しく受信します
USB CDCはPC(Tera Term)にデータを正常に送信します
USB_DeviceCdcAcmSend() は期待通りに動作します
USBコールバックが実行され、ビジーフラグが適切にクリアされます
問題:
プロジェクトの任意の場所にブレークポイントを配置すると、現在実行されていないコード内であっても (たとえば、初期化後の main() 内や関連のない関数内)、システムは実行を継続しますが、USB CDC は最終的に停止してしまいます。
重要な観察事項:
ブレークポイントはヒットしていません。
コードは正常に実行され続けます。
FreeRTOS タスクは実行を継続します。
CAN-FD は正常に動作し続けます。
USB CDC のみが機能を停止します。
この現象が発生すると、次のようになります。
USB_DeviceCdcAcmSend() は kStatus_USB_Busy を返します
USB転送コールバックが呼び出されない
ビジーフラグが消えない
ボードをリセットするまでUSB通信は永久に停止します
実行時に printf() を使用した場合でも、同様の動作が引き起こされることがあります。
構成:
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 2
#USB_DEVICE_INTERRUPT_PRIORITY (6U) を定義します。
USBタスクスタックサイズ:
#APP_TASK_STACK_SIZE を 8000L と定義します
スタックオーバーフローは発生しません。
システムはクラッシュしません。
USB CDC 通信のみが停止します。
質問:
実行されていないコードにブレークポイントが設定されている場合でも、USB CDC が停止するのはなぜですか?
デバッガーは、USB HS タイミングに影響を与えるような方法で M7 コアを一時的に停止しますか?
USB 割り込みの遅延サービスにより、CDC ドライバが永続的に kStatus_USB_Busy 状態のままになる可能性はありますか?
これは、CPU が停止したときの USB HS コントローラ (EHCI) の予想される動作ですか?
転送の破損を起こさずに RT1170 上の USB CDC をデバッグするための推奨方法は何ですか?
どのようなご指導でもいただければ幸いです。
よろしくお願いします。
こんにちは@Harisha
弊社の製品にご興味をお持ちいただき、またコミュニティをご利用いただき誠にありがとうございます。
問題に関しては、次の調整を試すことをお勧めします。
1:USB がタイムリーな割り込みサービスを確実に受信できるように、USB 割り込み優先度を FreeRTOS が管理できる最高の優先度に設定します。
2:他のモジュール(アプリケーション内の CAN-FD など)の割り込み優先度を下げて、USB プロセッシングが停止しないようにします。
これらの変更を試して、もう一度テストしてください。