プログラムROMへの書き込みを行うプログラムをしています。サンプルを見ると、 ①ブロック消去 ②ループで書き込みという方式になっています。初心者の質問で恐縮ですが、以下について教えてください。・消去バイト数 消去開始位置はどうなるのでしょうか? データフラッシュのブロック1は、E000~EFFFまでなので この方式の場合、E000~EFFEまで消去されるのでしょうか 任意の場所から消去する事は可能でしょうか? E100~EFFEまで消去というのは可能でしょうか?・最大書き込みバイト数 サンプルでは、*addr = *(data + 1);を指定し、2バイトを 書き込みしているように見えます。 1回で書き込みが可能バイト数はいくつでしょうか?
すみませんが、ご教授ください。よろしくお願いします。
ターゲットとなるマイコンは何でしょうか。ブロック消去や書き込む単位はハードウェアマニュアルに説明があると思いますが。
わわいです
ターゲットがわからないんで一般的なflashROMとして回答しますと、、
消去ブロックはそのすべての領域が消去されます。途中からとか一部だけの消去はできません
ブロック書き込みの一回あたりの書き込み量はデバイスごとに違いますんで、そいつのハードウエアマニュアルを参照ください。
んで、FlashROMは消去中、データ書き込み中はデータ読み出しができません。
これがどういうことかというと、プログラムROM上のプログラムから消去、書き込みを行おうとすると、プログラムが暴走する、ってことになります。
これをど~するかというと、ROM以外の場所から消去、書き込みをすればいいという話になります。
具体的には、RAMにプログラムを転送してそこから実行する、ってことをやります。
これまたセクション割当てが楽しくなりそーですが、がんばってください
fujita nozomu 様、わわい 様
返信、遅れまして申し訳ありません。
ターゲットCPUは、M16C/5Mになります。
調べる限りは64k単位でしたので、64kとして考えています。
わわい 様
そのセクションについて教えてください。
セクション指定前が、以下でしたので、F0000以降は未使用になっていました。
# (2) SECTION INFORMATION #
program REL CODE 0E0100 000005 2 fvector
(割愛)
interrupt REL CODE 0E0478 0000D1 2 initsct
fvector ABS ROMDATA 0FFFDC 000024 fvector
# (3) GLOBAL LABEL INFORMATION #
_start 0e054a
_sub_main 0e0418
_write_record 000480
sub_mainにセクションを設定し、リンカのセクション配置で0xf0000を指定しました。
----- Cの編集 -----
#pragma SECTION program submain
void sub_main()
{
}
結果、以下になってしまいました。
interrupt REL CODE 0E0476 0000D1 2 initsct
submain REL CODE 100000 000001 2 r01an0395_src
_start 0e0548
_sub_main 100000
指定位置にならないのですが、設定方法がわかあればご教授ください。
> データフラッシュのブロック1は、E000~EFFFまでなので
> この方式の場合、E000~EFFEまで消去されるのでしょうか
> ターゲットCPUは、M16C/5Mになります。
> 調べる限りは64k単位でしたので、64kとして考えています。
『M16C/5M、M16C/57グループ ユーザーズマニュアル ハードウェア編』の「29. フラッシュメモリ」を確認すると 0E000 以降に配置されるデータフラッシュの説明として「表 29.1 フラッシュメモリの仕様概要」に
> データフラッシュ 2分割(各4Kバイト)
とあります。
セクション云々でまた別の話をされてるようですが、上記マニュアルをよく読まれることをお勧めします。
SECTIONの記述がおかしいようなので見直してください。
んで、これを合わせても思うようには動作はしないとおもわれます。
プログラムをRAMのアドレスにするだけでは動作しません。
実際にどう配置され、どう実行されるのかをよく考えましょう
fujita nozomuさんのアドバイスの繰り返しになりますが、BltInBgnさんの質問に回答すると、
・ハードウエアマニュアルの29.フラッシュメモリの29.1概要にある通りイレーズ方式はブロック消去なのでブロックの一部だけを消去することはできないです。
・29.8.6.4プログラムを見る限りでは2ワード(4バイト)単位書き込みのみしかコマンドは無いように思えます。
です。
「調べる限りは64k単位でしたので、64kとして考えています。」に関してfujita nozomuさんの回答に補足すると「図 29.1フラッシュメモリのブロック図」が分かりやすいかも?ブロックA(4Kバイト)+ブロックB(4Kバイト)です。
「プログラムROMへの書き込みを行うプログラムをしています」は、CPU書き換えモードのEW1モードでプログラムROM1のアプリケーションプログラムを書き換えるプログラムROM2のユーザブートプログラムを作成しているということですよね?その後にデータフラッシュの質問になってしまうので少し混乱します。まさかとは思いますが、標準シリアル入出力モードパラレル入出力モードの専用シリアルライタを作成しているとかではないですよね?少し前のリプロに関するスレッドと同じですが、誰が、いつ、何のために、どのようなツールを使ってアプリケーションプログラムを書き換えるのかでユーザブートプログラムは異なってきます。
>プログラムROMへの書き込みを行うプログラム
面倒ですよね、私も以前作成しようとしたことがありますが、調整が大変で、そのうちFDTなるものを探して、これを手放せません、少し書き込むのに苦労することないです、人の作ったものを使いましょう。
皆様のお手を煩わせて申し訳ありません。
マイコンのプログラムをはじめから作成するのは初めてなので、いろいろパニックになっています。
皆様に意見を参考に考え直してみます。
IKUZO様
FDTというのは何でしょうか?
可能ならご教授ください。