ホーム › フォーラム › Texas Instruments › マイコン › C2000 › LiveFirmwareUpdateについて
-
投稿者投稿
-
LiveFirmwareUpdateについて
デバイス型番:TMS320F28374S資料SPRUIU8で行われている内容をF28374Sで実現したいと考えております。
F28374SはBANKが1つしかありませんが、その場合の参考資料等はございますでしょうか?F28374Sの参考資料は用意がございませんでした。
ご認識の通り、F28374SにはFLASH BANKが1つしかございませんので、Live Firmware Updateを実現するためには、ApplicationプログラムがすべてRAM上で完結動作するようにしていただく必要がございます。F28004xと同様に、Flash上でプログラムを実行しながらFirmwareをUpdateする必要がある場合には、F28374Sとピンコンパチ品である、F28374Dをご検討いただけますでしょうか。こちらの製品は、CPUが2つ、FLASHが2つ内蔵されておりますので、Flash上でのLive Firmware Updateが可能となります。
TMS320F28374D
https://www.tij.co.jp/product/jp/TMS320F28374D以上、よろしくお願いいたします。
ご回答ありがとうございます。
余り価格差はございませんが、F28374Sで開発は進めたいと考えております。
ApplicationをFlashからRAMにコピーさせ動作させる必要があるという認識ですが、具体的にどのような作業が必要になりますでしょうか?F28374Sで開発を進める旨承知ました。
ApplicationをFlashからRAMにコピーさせ動作させる必要があるという認識ですが、具体的にどのような作業が必要になりますでしょうか?
Applicationで使用するプログラムと、データを全てRAMにコピーして使用する必要がございますので、
このプログラムとデータにユーザー定義のセクションを指定し、memcpyを使ってRAMにコピーする必要がございます。以下の資料が参考になると思いますので、こちらも合わせてご参考ください。
TMS320C2000:Piccolo MCUのソフトウェア開発入門
http://www.tij.co.jp/jp/lit/an/jaja230a/jaja230a.pdf
(p.29) コラム : ユーザー定義のセクション
(p.57) 内蔵Flash を使ったProject以上、よろしくお願いいたします。
ご回答ありがとうございます。
なんとなくのイメージは出来ているのですが、具体的なところがまだ理解できておりません。
参考資料では特定の関数をRAMに展開する例となっておりまが、すべてのプログラムとデータとなるとどのような設定になるのかが理解できておりません。
まずリンカーコマンドファイルについてですが添付(28374S_FLASH_CLA_lnk.cmd)のような設定にし、F2837xS_SysCtrl.cのInitSysCtrl()を初期化時に呼び出すということで良いのでしょうか?Attachments:
具体的に行いたいことは、リモートでのアップデートになります。
ですので、全てのプログラムとデータをRAMに展開しなくても良いのかとも思っております。
アップデートに必要な関数のみをRAMに展開し、FLASHを書き換えリブートするという手順を想定しております。
RAMへの展開ですが、リンカーコマンドファイルで必要サイズのRAMを確保し、jaja230aを参考にramfuncs…を記載し、コピーしたい関数をCODE_SECTION()にて指定し、初期化時にmemcpy()するということであっていますでしょうか?
また、FLASHを書き換えリブートするという手順については現在検討中になります。ご連絡ありがとうございます。Live Firmware Updateはアプリケーション(信号処理など)を実行したままアップデートをするものになります。今回は、アプリケーションを一時停止してアップデートを行うという認識でよろしいでしょうか。その場合には、C2000wareに含まれる以下のサンプルプロジェクトがそのままご利用いただけます。
こちらのサンプルプロジェクトは、SCI経由でアップデートを行うものになっておりますが、カスタマイズすることで他のシリアルインターフェース経由でもアップデートが可能となります。C:\ti\c2000\C2000Ware_3_03_00_00\device_support\f2837xs\examples\cpu1\F2837xS_sci_flash_kernel
RAMへの展開ですが、リンカーコマンドファイルで必要サイズのRAMを確保し、jaja230aを参考にramfuncs…を記載し、コピーしたい関数をCODE_SECTION()にて指定し、初期化時にmemcpy()するということであっていますでしょうか?
ご認識の通りとなります。リンカーコマンドファイルで必要サイズのRAMを確保し、jaja230aを参考にramfuncs…を記載し、コピーしたい関数をCODE_SECTION()にて指定します。
memcpy()については、アップデートをする前に行えば問題ございません。尚、基本的な動作は全て上記のサンプルプロジェクトに含まれておりますので、アップデートしたいタイミングで、上記のプロジェクトのコードが走るようにしていただければ、実現可能となります。
また不明点が御座いましたらお問い合わせください。
以上、よろしくお願いいたします。
ご回答ありがとうございます。
記載頂いているようにアプリケーションを一時停止してアップデートを想定しております。
サンプルのご紹介ありがとうございます。
こちらのサンプルについてご質問がございます。
サンプルのリンカーコマンドファイルはRAMブートとなっておりますが、最終的にはFLASHブートとし、サンプルのコードをRAMにmemcpy()するという理解でよろしいでしょうか?ご連絡ありがとうございます。
こちらのサンプルについてご質問がございます。
サンプルのリンカーコマンドファイルはRAMブートとなっておりますが、最終的にはFLASHブートとし、サンプルのコードをRAMにmemcpy()するという理解でよろしいでしょうか?ご理解のとおりとなります。サンプルプロジェクトをFLASH上に配置するように変更いただき、プログラム内でmemcpy()を使用しRAMにコピーし使用します。
また不明点が御座いましたらお問い合わせください。
以上、よろしくお願いいたします。
サンプルプロジェクトのSCI部を独自プロトコルに変更するようにしてデバッグを行っているのですが、動作がいまいちつかめない状況です。
何かお心当たりがあればアドバイスを御願いいたします。
作成したdatファイルを読み込みFLASHに書き込んでいる箇所をモニタすると、書込み開始アドレスが80002からではなくエントリポイントのアドレス設定されている次のセクター88000からとなります。
これは正しいのでしょうか?
開始アドレスは何によって決まるのでしょうか?
また、mapファイルで確認したusedサイズと出力したdatファイルのサイズを比べるとdatファイルがかなり大きいサイズとなっております。(datファイルはバイナリエディタで確認)
これも正しいのでしょうか?
以上よろしくお願いいたします。作成したdatファイルを読み込みFLASHに書き込んでいる箇所をモニタすると、書込み開始アドレスが80002からではなくエントリポイントのアドレス設定されている次のセクター88000からとなります。
これは正しいのでしょうか?
開始アドレスは何によって決まるのでしょうか?
と記載しましたが、エントリポイントのアドレスは無関係でした。また、RAM展開する関数ですが、こちらは関数内で使用しているサブ関数も定義する必要がございますでしょうか?
情報ありがとうございます。
また、RAM展開する関数ですが、こちらは関数内で使用しているサブ関数も定義する必要がございますでしょうか?
RAM上で使用する関数は全て定義する必要がございますので、サブ関数も定義する必要がございます。
以上、よろしくお願いいたします。
ありがとうございます。
一括で定義する方法等はございますでしょうか?
やはり個別に定義しないといけないでしょうか?一括で定義する方法等はございますでしょうか?
やはり個別に定義しないといけないでしょうか?複数の関数を一括で定義する方法はございませんので、お手数ではございますが個別に定義いただけますでしょうか。
以上、よろしくお願いいたします。
ありがとうございます。
新たな問題を抱えております。アドバイスお願いいたします。
F021_API_F2837xS_FPU32.lib を使用してFLASHのイレースを行っているですが、特定のセクターをイレースすると動作がとまります。
そのセクターを.mapファイルで確認すると上記.libが使用されている場所のようです。
動作に必要な関数はCODE_SECTIONにてRAM展開しているのですが、.libはRAM展開の仕方がわからずケアしておりません。
そのせいで動作が止まっているのではと考えております。
.libもRAM展開する必要御座いますでしょうか?
必要な場合はどのようにするかご教授願います。 -
投稿者投稿