|
想写个软件用JlinkARM的动态库直接刷写flash程序,但出现了以下问题:
使用JLINKARM_WriteMem和JLINKARM_WriteU32或者JLINKARM_WriteU16 或者JLINKARM_WriteU8这几个函数都不能往flash(芯片内自身flash)中写数据。
但是使用JLINKARM_ReadMemU8或者JLINKARM_ReadMemU32又可以读取flash中的内容。
觉得非常怪异!
CString m_sFileName;
FILE *fbin;
U8 data[1024*40];
U32 readdata[1024*40];
U8 readbyte[1024*40];
U8 * pdata;
U32 dataLenth;
U32 flashAddress;
U8 pStatus;
//JLINKARM_Reset();
//JLINKARM_Halt();
JLINKARM_Open();
//flashAddress = JLINKARM_GetId();
//JLINKARM_Go();
JLINKARM_Halt();
CString sFilter="HEX文件(*.bin)|*.bin||";
CFileDialog dlgFileLoad(TRUE,"bin","Project",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,sFilter,NULL);
if(dlgFileLoad.DoModal()==IDOK) //读取文件
{
m_sFileName=dlgFileLoad.GetPathName();
UpdateData(FALSE);
}
UpdateData(FALSE);
fbin = fopen(m_sFileName, "rb");
if (0==fbin)
{
MessageBox("file open error!" , NULL , MB_OK);
return ;
}
fseek(fbin,0,SEEK_END); //文件指针到文件尾
dataLenth = ftell(fbin); //读取文件长度
pdata = data;
//读取文件到分配的内存
fseek(fbin,0,SEEK_SET); //文件指针到文件头
fread(pdata,1,dataLenth,fbin); //读取文件到申请的内存中
fclose(fbin);
pdata = data;
flashAddress = 0x08000000;
U32 temp;
U32 tempData;
for(int i= 0 ;i< 8; i++)
{
JLINKARM_WriteMem(flashAddress,1,&data);
JLINKARM_ReadMemU8(flashAddress,1,&readbyte,&pStatus);
fbin ++;
flashAddress ++;
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|