フォーラムへの返信
-
投稿者投稿
-
そこで、ブート用に関わるプログラムとアップデートされるであろうプログラムの領域をFLASHのセクターで分離し、動作させることは可能でしょうか?
可能となります。ただし、サンプルプログラムなどは無いので、2つのプロジェクトが干渉しないようにユーザーにてプロジェクトを作成頂く必要がございます。
以上、よろしくお願いいたします。
ご連絡ありがとうございます。
また不明点が御座いましたらお問い合わせください。お問い合わせありがとうございます。
Fapi_issueProgrammingCommand()は一度に128bit(16bit word x8)をプログラムすることができますが、これは開始アドレスが、128bit境界にある場合のみとなります。0x87E64は128bit境界にないので、128bitの書き込みに失敗し、0x87E60は128bit境界になるので、正常に書き込みが行えているものと思います。
参考情報:
https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/373542この問題を回避するには、リンカコマンドファイルで、Flashに割り当てるセクションに”ALIGN(8)”を付ける必要がございます。この記述で 16bit x 8 の境界にアラインされます。
~(省略)~
.text : >> FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0, ALIGN(8)
.const : > FLASHF, PAGE = 0, ALIGN(8)
~(省略)~以上、よろしくお願いいたします。
RAM展開できたとのことで安心いたしました。
また不明点が御座いましたらお問い合わせください。お問い合わせありがとうございます。
CCS使用時にデフォルトでGelファイルというものが使用されます。こちらのファイルが、CCSでのリセット、リスタートなどの際に、ハードウェアを初期化しています。これによりCLAのクロックが有効化されます。
Gelファイルについては、以下のリンクの説明が参考になると思いますので、こちらをご参考ください。このGelファイルはCCSを使用している場合にのみ使用されるので、スタンドアローンでの動作の際にはCLAが自動で有効化されません。
また不明点が御座いましたらお問い合わせください。
以上、よろしくお願いいたします。
お問い合わせありがとうございます。
トピックのタイトルとご質問の内容が異なるため、以下のスレッドを新たに作成し、こちらに回答させていただきました。以下のリンクで回答をご確認いただけますでしょうか。
以上、よろしくお願いいたします。
zen135様
お問い合わせありがとうございます。
ご認識の通り、F021_API_F2837xS_FPU32.libもRAMへ展開する必要がございます。
一例ですが、cmdファイルに以下のように記述することでlibファイルをRAMへ展開することが可能です。
==================================
GROUP
{
.TI.ramfunc
{ -l F021_API_F2837xS_FPU32.lib}} LOAD = FLASHD,
RUN = RAMLS03,
LOAD_START(_RamfuncsLoadStart),
LOAD_SIZE(_RamfuncsLoadSize),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
RUN_SIZE(_RamfuncsRunSize),
RUN_END(_RamfuncsRunEnd),
PAGE = 0==================================
C2000wareの以下のサンプルプロジェクトでも、このlibファイルの展開を行っていますので、こちらも併せてご参考ください。
C:\ti\c2000\C2000Ware_3_03_00_00\device_support\f2837xs\examples\cpu1\flash_programming
以上、よろしくお願いいたします。
一括で定義する方法等はございますでしょうか?
やはり個別に定義しないといけないでしょうか?複数の関数を一括で定義する方法はございませんので、お手数ではございますが個別に定義いただけますでしょうか。
以上、よろしくお願いいたします。
情報ありがとうございます。
また、RAM展開する関数ですが、こちらは関数内で使用しているサブ関数も定義する必要がございますでしょうか?
RAM上で使用する関数は全て定義する必要がございますので、サブ関数も定義する必要がございます。
以上、よろしくお願いいたします。
ご連絡いただきありがとうございます。
問題が解決されたとのことで安心いたしました。
また不明点が御座いましたらお問い合わせください。ご連絡ありがとうございます。
C2000wareにCLAを使ったFLASH用のプロジェクトがございます。こちらのプロジェクトを使用した場合には正常に動作しますでしょうか。正常に動作する場合には、こちらのプロジェクトとの差分をご確認いただきたく思います。
C2000WARE
C:\ti\c2000\C2000Ware_3_03_00_00\device_support\f2806x\examples\c28\cla_adc_fir_flash上記で問題点が把握できなかった場合には、御社の問題を再現可能な、Cソースコード、cmdファイル、CLAソースコードをお送りいただけますでしょうか。これらのファイルをベースに調査させていただきます。
※.cmd、.claは添付できませんので、拡張子を.txt等に変更し添付をお願いいたします。以上、よろしくお願いいたします。
お問い合わせありがとうございます。
以前、memcpy()を実行するタイミングの問題で、似た現象が起きておりました。
以下のリンクを参考に、memcpy()のコール箇所をご確認いただけますでしょうか。
https://emb.macnica.co.jp/forums/topic/13464/上記で問題が解決しない場合には、再度お問い合わせいただけますでしょうか。
以上、よろしくお願いいたします。
ご連絡ありがとうございます。
こちらのサンプルについてご質問がございます。
サンプルのリンカーコマンドファイルはRAMブートとなっておりますが、最終的にはFLASHブートとし、サンプルのコードをRAMにmemcpy()するという理解でよろしいでしょうか?ご理解のとおりとなります。サンプルプロジェクトをFLASH上に配置するように変更いただき、プログラム内でmemcpy()を使用しRAMにコピーし使用します。
また不明点が御座いましたらお問い合わせください。
以上、よろしくお願いいたします。
ご連絡ありがとうございます。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()については、アップデートをする前に行えば問題ございません。尚、基本的な動作は全て上記のサンプルプロジェクトに含まれておりますので、アップデートしたいタイミングで、上記のプロジェクトのコードが走るようにしていただければ、実現可能となります。
また不明点が御座いましたらお問い合わせください。
以上、よろしくお願いいたします。
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以上、よろしくお願いいたします。
-
投稿者投稿