こんにちは ミリ波SDKの トレーニングへようこそ このトレーニングはTIのシングルチップ・ ミリ波レーダー・デバイスを扱う ソフトウェア・システム・エンジニアと テスト・エンジニアの方向けです このトレーニングは AWR1443 AWR1642 IWR1443 IWR1642などの ミリ波センサ向けの ソフトウェア製品に関する理解を 深めることを 目的としています それらすべてのデバイスに共通する ソフトウェア・パッケージは ミリ波SDKと呼ばれます このトレーニングでは ミリ波SDKの構成要素と コア・コンポーネントについて簡単に説明します また 別のSDKコンポーネントとの やり取りや ミリ波デバイスにおける 代表的な制御フローおよび データ・フローについても説明します SDKについて詳しく 説明する前に まず それらのミリ波センサに 使用されている プラットフォームを確認します 自律的なシングルチップ・ ミリ波センサの プラットフォームには xWR14xxと xWR16xxが使用されています 1つ目のプラットフォームである xWR14xx (AWR1443 IWR1443など)には 4つの受信チャネルと 3つの送信チャネルがあり 信号を処理するための ユーザー・プログラマブルR4Fマイコンと ハードウェア・アクセラレータが 搭載されて います 2つ目の プラットフォーム (AWR1642 IWR1642など)には 4つの受信チャネルと 2つの送信チャネルがあり 同じマイコンが 搭載されています ただし ハードウェア・アクセラレータの 代わりにC674 DSPが 追加されています 提供されているさまざまな 外部インターフェイスを使用して それらのデバイスから 外部のプロセッサまたは コントローラにデータを 送信することもできます 注意が必要なのは いずれのデバイスでも マイコンやDSPの アプリケーション・コードを使用したり 保存したりするには 外部のシリアル・ フラッシュが必要になることです それらのデバイスで アプリケーションやソフトウェアを 開発できるように TIでは プラットフォーム・ソフトウェアを提供しています これには R4FおよびDSP向けの TIリアルタイム・ オペレーティング・システム 各種ペリフェラル用の デバイス・ドライバ ミリ波デバイスを プログラムするためのAPI 信号を処理するための ライブラリ 最終機器で動作確認を行うための 各種デモ・アプリケーション 各種ツールが含まれています それらのデバイスの プラットフォーム・ソフトウェアは ミリ波ソフトウェア開発キット (ミリ波SDK)と呼ばれます これはTIミリ波SDKの 高次ブロック図を示したものです 青色のブロックは TIから提供されている市販の コンポーネントを表しています 黄色のブロックにあるコンポーネントは 参考または例として 示されているもので システムの使用事例に合わせて ユーザーにより開発が期待されている コンポーネントです では TIミリ波SDKの 別のコンポーネントを見て いきます このブロック図の 一番下にある ブートローダはR4Fマイコンの マスターSSにあり デバイス全体のブートを 管理します また アプリケーション・コードを シリアル・フラッシュから 各種コアにロードし それらを実行します Radar SS Firmware (ミリ波フロント・エンド)は RFとアナログ・ハードウェア・ ブロックを制御し ミリ波レーダー全体の 動作を管理します mmWaveLinkは Radar SS Firmwareのドライバで フロント・エンドにある 各ハードウェア・ブロックを制御するための 下位レベルのAPIを提供します ミリ波APIは mmWaveLinkを抽象化し シンプルなAPIを アプリケーションに提供し フロント・エンドを構成します また ミリ波APIは R4Fマイコンと DSPサブシステム間の同期や プロセッサ間の通信を 処理します このSDKには TIのリアルタイム・ オペレーティング・システム (TI-RTOS)と マスター・サブシステムと DSPサブシステム兼用の RTOSベースのドライバがあります すべてのドライバには OSALが搭載されています このため ここに示されている ように ドライバを 異なるRTOSに移植できます ミリ波ライブラリには 標準のルーチンに加えて FFTおよびCFAR アルゴリズムなどの 信号を処理するための アルゴリズムが含まれています SDKにはシンプルな アプリケーションが いくつか同梱されています それらは これらのコンポーネントを使用して 簡単な プロキシミティ・アプリケーションを作成する方法を示しています ミリ波デモ・ビジュアライザは PC上で動作するGUIで 物体の距離 速度 相対位置などの オブジェクト・データを プロットします これは TIミリ波SDKの ディレクトリ構造です SDKをインストールすると PCでは このようなディレクトリ 構造になります ルートには packages docks firmware toolsの4つのフォルダが あります packagesにはミリ波SDKを構築するための スクリプト・ファイルが含まれています TIフォルダには前のスライドで 説明したコンポーネントの すべてのソース・ファイルが 含まれています すぐに利用できるデモや キャプチャ・デモなどの デモのソース・ファイルが あります driversフォルダには 関連するPinMuxやその他の ペリフェラル・ ドライバなどの ドライバのソース・ファイルが含まれています ドライバには OSALが搭載されています このため 異なるRTOSに 移植できます すべてのドライバには ユニット・ レベルでのドライバの使用方法が 説明されたDoxygenドキュメントが それぞれ同梱されています また それらのドライバAPIに 使用されるユニット・テストも 同梱されています controlフォルダには ミリ波フロント・エンドを 制御するためのAPIが含まれています したがって 下位レベルのAPIである mmWaveLinkや 上位レベルのAPIを提供する mmWaveが含まれています algフォルダには 信号処理ライブラリとなるmmWaveLibが 含まれています Platformには プラットフォームの リンカ・コマンド・ファイル などのプラットフォーム 固有のファイルが含まれています utilsフォルダには すべてのユーティリティ・ アプリケーションが含まれています たとえば CCSデバッグ・ アプリケーションや インターフェイスを介して データを送信するための コマンド・ライン・インターフェイス システム・プロファイラ (サイクル・プロファイラ) テストロガーが含まれています ソース・ファイルもあります ミリ波SDKの docsフォルダには リリース・ノートやユーザー・ガイドが 含まれています 初めてお使いになる方向けにご用意しました リリース・ノートには リリースに関する情報が含まれています これまでと 異なるコンポーネントや これまでと異なるツールとの 依存関係について解説しています また そのリリースの 変更点についても 掲載しています ユーザー・ガイドには すぐに利用できるデモや キャプチャ・デモなどの ミリ波SDKデモの実行方法 ミリ波SDKの設定方法 ミリ波SDKの構築方法に関する 情報が含まれています firmwareフォルダには レーダー・サブシステムやデータ・ ツール・フォルダ用のファームウェアが 含まれています SDKのコンテンツについて 詳しくは リリース・ノートおよび ユーザー・ガイドを参照してください それでは 各構成要素について 簡単に見ていきます ミリ波SDKドライバでは 使いやすいAPIを使用して 豊富な機能を備えた移植可能な方法で ペリフェラルにアクセスできます これはそれらの ドライバの一例です すべてのドライバは構造と規格が 同じです たとえば デバイスおよび CPU構成では ドライバをそれぞれ異なるCPUに 移植することができます この場合 MSSとDSPサブシステムで ドライバは共通 しています 各レベルでOSALを使用して スレッドセーフにし ハードウェアIPへの アクセスを制御します TI-RTOSはOSに関連した すべての機能をそれらのドライバに 提供します SDKに含まれる すべてのドライバには それらのAPIの使用方法が示された Doxygenドキュメントと テスト・アプリケーションが 同梱されています 次に ミリ波コンポーネントに ついて見ていきます mmWaveLinkは レーダー・サブシステム (ミリ波フロント・エンド)のドライバです レーダー・サブシステムは RFとアナログ・ハードウェア・ ブロックを制御し ミリ波レーダー全体の動作を 管理しています その内部ブロックで メールボックスを介して 送られてくるメッセージを使用して 任意の動作を制御できます mmWaveLinkフレームワークは それらのメッセージを 生成するインフラストラクチャを 提供するだけでなく メールボックスを介した 通信を処理します mmWaveLinkは レーダー・サブシステムや FMCWチャープ構成を制御するための 下位レベルのAPIを提供 します これはいくつかのAPIを 切り取って示したものです デバイス・マネージャAPIでは ドライバを初期化し ミリ波フロント・エンドと ハンドシェイクを行うことができます センサ制御APIでは ミリ波フロント・エンドの 別のブロックを構成する ことができます たとえば イネーブルにする 必要がある受信チャネル および送信チャネルの数を 構成することができます ADCフォーマットやチャープ・コンフィギュレーションの 構成も可能です また 制御APIを使用して フレームの送信を 開始および停止することができます ミリ波コンポーネントは 上位レベルのAPIを提供し 下位レベルのmmWaveLink APIを抽象化し シンプルなインターフェイスを アプリケーションに 提供します モデルはMSSとDSPの 両方で実行されます そのため それらの各コアから 柔軟にRadar SS Firmware (ミリ波フロント・エンド)を 構成することができます また MSSとDSP間の 通信を処理し 同期機能を提供します この例では フロント・エンドの構成は MSSアプリケーションから 行われていますが ミリ波APIによって構成がDSPに 渡されるため それに応じて DSSはEDMAや 信号処理チェーンを 構成することができます DSPサブシステムで実行される mmWaveLibは 入力データで実行されている 各種FFTルーチンなど FMCW信号を処理するための 重要なルーチンを 提供します CFAR-CAなどの基本的な 検出アルゴリズム 異なる角度推定FFTおよび スケーリング シフティング 演算などの ヘルパー・ルーチンなど これらすべてのルーチンは システム性能を向上させるために C674xアーキテクチャ用に 最適化されています これはミリ波SDKの 代表的なフローです ブートローダがMSSとDSSを リセット状態から立ち上げます マスター・サブシステム上の アプリケーションが ミリ波APIとmmWave Web Link ドライバを使用して ミリ波フロント・エンドと 通信します アプリケーションによって ミリ波フロント・エンドの すべての構成が行われ フレームがトリガされます フレームがトリガされると ADCデータがフロント・エンドから ADCバッファに移動されます ADCバッファは ピンポン・バッファです このため データは ミリ波フロント・エンドから ポン・バッファに移動され ピン・バッファから DSPメモリに移動されます DSPがミリ波ライブラリ を使用して ピン・バッファに対して 距離FFTを実行します 距離FFTが 完了すると EDMAドライバを使用して データがL3メモリに移動されます フレーム内のすべてのチャープについて このシーケンスが繰り返されます すべてのチャープについて 距離FFTが計算されます フレーム間の時間に DSPがデータを L3メモリから DSPメモリに戻し ドップラーFFTを実行します このときも ドップラーFFTの結果は L3メモリに移動されます ドップラーFFTが完了すると DSPがオブジェクトを検出するための 基本CFARアルゴリズムを実行し 角度推定ルーチンを 使用して オブジェクトの 相対位置を割り出します するとデータがマスター・ サブシステムに戻されます MSSはこの情報を各種ペリフェラル・ ドライバを使用して 外部のコントローラに 送信できます またはこのデータを 外部のプロセッサに渡して オブジェクトを追跡したり 分類したりすることもできます 次に 詳細な制御フローについて 見ていきます MSSアプリケーションが SOC_initを使用して デバイスを初期化し ミリ波フロント・エンドを起動します 次に MMWave_init APIを 使用して メールボックスや その他の重要なドライバについて 基本的な初期化を行います その後 フロント・エンドの ブートが完了するのを待ちます 一方で DSPアプリケーションが MSSからデータを 受信するために MMWave_executeAPIを使用して IPCを設定します その後、MSSと DSPの両方で 同期が行われ 相互に正常性が確認されます データを処理できるように DSSがEDMAおよび ADCバッファを初期化します 初期化が完了し MSSとDSSが 同期されると MSSアプリケーションが MMWave_config APIを使用して アプリケーションから ミリ波フロント・エンドに 構成が渡されます ミリ波APIがmmWaveLink APIを使用して メールボックス・ メッセージを作成し それをミリ波フロント・ エンドに送信します ミリ波フロント・エンドは メッセージを受信すると メッセージの 整合性を確認し 受取確認メッセージを mmWaveLinkに送信します このようにすべてのメッセージが フロント・エンドに送信されます ミリ波APIがすべての 構成をフロント・エンドに 送信するときにDSPに 構成を渡します DSPはこの構成を 受け取ると それに応じて EDMAおよび ADCバッファを設定します すべての構成が 完了したら MSSアプリケーションが MMWave_start APIを使用して メッセージをDSPに送信します DSPは開始メッセージを 受け取ると データ処理を有効にし ADCデータを待ちます その後 ミリ波APIは mmWaveLink APIを使用して 開始メッセージをミリ波フロント・ エンドに送信します ミリ波フロント・エンドは 開始メッセージを受信すると フレームの送信を 開始します 次に データ・フローについて 見ていきます フレームがトリガされると ミリ波フロント・エンドは ADCサンプルをピンポンADC バッファに移動させます それらのいずれかの バッファが一杯になると DSPに対して 割り込みが生成され EDMAによってデータが バッファからDSPメモリに 移動されます その後 DSPがmmWaveLibを使用して そのバッファに対して距離FFTを実行し 結果をL3メモリに 移動させます フレーム内のすべてのチャープについて このシーケンスが繰り返されます 距離FFTがL3メモリに 保存されます フレーム間の時間に DSPが EDMAを構成して データをL3メモリから DSPメモリに移動させて ドップラーFFTを実行します ドップラーFFTが 完了したときも DSPはEDMAを構成して データをL3メモリに戻します その後 DSPがオブジェクトの 検出および角度の推定を行い オブジェクトのリストを ピンポン形式で いずれかのオブジェクト・ バッファに移動させます MSSがそれらのいずれかのバッファから オブジェクトのリストを受け取り それを外部の コントローラに送信します これで トレーニング・セッションは 終了です 詳細については ミリ波SDKユーザー・ガイドおよび デモ・アプリケーションをご覧ください このトレーニングが お役に立つことを願っています ありがとうございました