ホーム フォーラム Texas Instruments マイコン C2000 LiveFirmwareUpdateについて

このトピックには29件の返信が含まれ、2人の参加者がいます。3 年、 12 ヶ月前 zen135 さんが最後の更新を行いました。

15件の投稿を表示中 - 1 - 15件目 (全31件中)
  • 投稿者
    投稿
  • #13617 返信

    zen135
    参加者

    LiveFirmwareUpdateについて

    デバイス型番:TMS320F28374S

    資料SPRUIU8で行われている内容をF28374Sで実現したいと考えております。
    F28374SはBANKが1つしかありませんが、その場合の参考資料等はございますでしょうか?

    #13618 返信
    Ge
    Ge
    従業員

    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

    以上、よろしくお願いいたします。

     

    #13619 返信

    zen135
    参加者

    ご回答ありがとうございます。
    余り価格差はございませんが、F28374Sで開発は進めたいと考えております。
    ApplicationをFlashからRAMにコピーさせ動作させる必要があるという認識ですが、具体的にどのような作業が必要になりますでしょうか?

    #13623 返信
    Ge
    Ge
    従業員

    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

    以上、よろしくお願いいたします。

    #13625 返信

    zen135
    参加者

    ご回答ありがとうございます。
    なんとなくのイメージは出来ているのですが、具体的なところがまだ理解できておりません。
    参考資料では特定の関数をRAMに展開する例となっておりまが、すべてのプログラムとデータとなるとどのような設定になるのかが理解できておりません。
    まずリンカーコマンドファイルについてですが添付(28374S_FLASH_CLA_lnk.cmd)のような設定にし、F2837xS_SysCtrl.cのInitSysCtrl()を初期化時に呼び出すということで良いのでしょうか?

    #13630 返信

    zen135
    参加者

    具体的に行いたいことは、リモートでのアップデートになります。
    ですので、全てのプログラムとデータをRAMに展開しなくても良いのかとも思っております。
    アップデートに必要な関数のみをRAMに展開し、FLASHを書き換えリブートするという手順を想定しております。
    RAMへの展開ですが、リンカーコマンドファイルで必要サイズのRAMを確保し、jaja230aを参考にramfuncs…を記載し、コピーしたい関数をCODE_SECTION()にて指定し、初期化時にmemcpy()するということであっていますでしょうか?
    また、FLASHを書き換えリブートするという手順については現在検討中になります。

    #13631 返信
    Ge
    Ge
    従業員

    ご連絡ありがとうございます。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()については、アップデートをする前に行えば問題ございません。

    尚、基本的な動作は全て上記のサンプルプロジェクトに含まれておりますので、アップデートしたいタイミングで、上記のプロジェクトのコードが走るようにしていただければ、実現可能となります。

    また不明点が御座いましたらお問い合わせください。

    以上、よろしくお願いいたします。

     

    #13632 返信

    zen135
    参加者

    ご回答ありがとうございます。
    記載頂いているようにアプリケーションを一時停止してアップデートを想定しております。
    サンプルのご紹介ありがとうございます。
    こちらのサンプルについてご質問がございます。
    サンプルのリンカーコマンドファイルはRAMブートとなっておりますが、最終的にはFLASHブートとし、サンプルのコードをRAMにmemcpy()するという理解でよろしいでしょうか?

    #13633 返信
    Ge
    Ge
    従業員

    ご連絡ありがとうございます。

    こちらのサンプルについてご質問がございます。
    サンプルのリンカーコマンドファイルはRAMブートとなっておりますが、最終的にはFLASHブートとし、サンプルのコードをRAMにmemcpy()するという理解でよろしいでしょうか?

    ご理解のとおりとなります。サンプルプロジェクトをFLASH上に配置するように変更いただき、プログラム内でmemcpy()を使用しRAMにコピーし使用します。

    また不明点が御座いましたらお問い合わせください。

    以上、よろしくお願いいたします。

    #13655 返信

    zen135
    参加者

    サンプルプロジェクトのSCI部を独自プロトコルに変更するようにしてデバッグを行っているのですが、動作がいまいちつかめない状況です。
    何かお心当たりがあればアドバイスを御願いいたします。
    作成したdatファイルを読み込みFLASHに書き込んでいる箇所をモニタすると、書込み開始アドレスが80002からではなくエントリポイントのアドレス設定されている次のセクター88000からとなります。
    これは正しいのでしょうか?
    開始アドレスは何によって決まるのでしょうか?
    また、mapファイルで確認したusedサイズと出力したdatファイルのサイズを比べるとdatファイルがかなり大きいサイズとなっております。(datファイルはバイナリエディタで確認)
    これも正しいのでしょうか?
    以上よろしくお願いいたします。

    #13656 返信

    zen135
    参加者

    作成したdatファイルを読み込みFLASHに書き込んでいる箇所をモニタすると、書込み開始アドレスが80002からではなくエントリポイントのアドレス設定されている次のセクター88000からとなります。
    これは正しいのでしょうか?
    開始アドレスは何によって決まるのでしょうか?

    と記載しましたが、エントリポイントのアドレスは無関係でした。

    また、RAM展開する関数ですが、こちらは関数内で使用しているサブ関数も定義する必要がございますでしょうか?

    #13657 返信
    Ge
    Ge
    従業員

    情報ありがとうございます。

    また、RAM展開する関数ですが、こちらは関数内で使用しているサブ関数も定義する必要がございますでしょうか?

    RAM上で使用する関数は全て定義する必要がございますので、サブ関数も定義する必要がございます。

    以上、よろしくお願いいたします。

    #13658 返信

    zen135
    参加者

    ありがとうございます。
    一括で定義する方法等はございますでしょうか?
    やはり個別に定義しないといけないでしょうか?

    #13659 返信
    Ge
    Ge
    従業員

    一括で定義する方法等はございますでしょうか?
    やはり個別に定義しないといけないでしょうか?

    複数の関数を一括で定義する方法はございませんので、お手数ではございますが個別に定義いただけますでしょうか。

    以上、よろしくお願いいたします。

    #13675 返信

    zen135
    参加者

    ありがとうございます。

    新たな問題を抱えております。アドバイスお願いいたします。
    F021_API_F2837xS_FPU32.lib を使用してFLASHのイレースを行っているですが、特定のセクターをイレースすると動作がとまります。
    そのセクターを.mapファイルで確認すると上記.libが使用されている場所のようです。
    動作に必要な関数はCODE_SECTIONにてRAM展開しているのですが、.libはRAM展開の仕方がわからずケアしておりません。
    そのせいで動作が止まっているのではと考えております。
    .libもRAM展開する必要御座いますでしょうか?
    必要な場合はどのようにするかご教授願います。

15件の投稿を表示中 - 1 - 15件目 (全31件中)