サイズが 28 kb のフラッシュの「.hex」ファイルを、サイズが 32 kb の内部フラッシュ ROM に書き込みたいと考えています。上記の質問は、フラッシュ ROM を初期化するためのものです。そのファイルとコードを書くために私がしていることは以下のとおりです。
- At91(8051) マイクロコントローラの内部 FlashROM を読み書きする必要がある Intel hex 形式の .hex ファイルがあります。
- 「rb+」モードで .hex ファイルを開きます。
- ファイルの長さを取得し、ポインターを開始アドレス (0 番目のアドレス) に設定します。
- そのファイルをページごとに書き込む必要があり、私の場合のページサイズは 256 バイトであるため、ファイルを 256 で除算しました。
- その後、そのファイルを書き込もうとしました。
どこが間違っているのか教えてください。コードを以下に示します。
int a,b; int size,last_chunk; FILE *file; char *buffer1,name[20]; unsigned long fileLen;
file = fopen("flashROM.hex", "rb+");
if (!file)
{
fprintf(stderr, "Unable to open file %s", name);
return;
}
fseek(file, 0, SEEK_END);
fileLen=ftell(file);
printf("the file length is:%d\n",fileLen);
fseek(file, 0, SEEK_SET);
//Allocate memory
buffer1 =(char *)malloc(fileLen+1);
if (!buffer1)
{
fprintf(stderr, "Memory error!");
fclose(file);
return;
}
//Read file contents into buffer
fread(buffer1, fileLen, 1, file);
/* We have to divide the entire file into chunks of 256 bytes*/
size = fileLen/256;
printf("\nsize = %d\n",size);
last_chunk = fileLen%256;
printf("\nlast chunk = %d bytes\n",last_chunk);
address = 0x0000;
printf("File upgradation should start from :%.4x",address);
for(a=0;a<=size;a++)
{
write(fd,&buffer1,size);
printf("Iteration=[%d]\t Data=[%x]\n",a,*buffer1);
usleep(5000);
}
for(b=0;b<=last_chunk;b++)
{
write(fd,&buffer1,1);
usleep(5000);
}
上記のプログラムのバイナリを実行した後、私の結果は以下のとおりです。
Writing upgrade file
the file length is:30855
size = 120
last chunk = 135 bytes
File upgradation should start from :0000
Iteration=[0] Data=[3a]
Iteration=[1] Data=[3a]
Iteration=[2] Data=[3a]
Iteration=[3] Data=[3a]
Iteration=[4] Data=[3a]
Iteration=[5] Data=[3a]
Iteration=[6] Data=[3a]
Iteration=[7] Data=[3a]
データが常に「3a」である理由はわかりません。明確ではありません。プログラミングでどこが間違っているか教えてください。