本帖最后由 na_sh13 于 2011-8-9 16:37 编辑
我用VC写了一个固件烧写软件,下载部分是调用J-Flash ARM里的函数现在的问题是:需要连续烧写多片STM32芯片,当写到第3、4片的时候,就会报错:
JTAG communication error: Unknow error code 63 Communication timed out
正常情况把固件完整的下载进去需要1分钟,而通常在45秒左右的时候报错,然后我用J-Flash把芯片内数据读出,发现差不多写了四分之三,后四分之一没写进去。也就是在下载的过程中出现该错误,这是怎么回事?下面是代码
ConnectJlink(0, 0, JLinkSpeed);
JLINKARM_Reset();
lock &= data_CR[0];
if (lock != 0)//FLASH被锁
{
JLINKARM_WriteU32(Flash_KEYR_Address, Key1);//解锁FLASH
JLINKARM_WriteU32(Flash_KEYR_Address, Key2);
}
JLINKARM_ReadMemU32(Xuanxiangzijie_Address, 4, pdata_CR+5, pdata2);//观察选项字节状态
Mer |= data_CR[0];
JLINKARM_WriteU32(Flash_CR_Address, Mer);//把FLASH_CR的MER位 置1
Mer_watch &= data_CR[0];
if (Mer_watch != 0x4)
{
AfxMessageBox(_T("擦除不成功!硬件未连接或没有重新上电!"));
UpdateData(FALSE);
return;
}
Strt |= Mer;
JLINKARM_WriteU32(Flash_CR_Address, Strt);//把FLASH_CR的STRT位 置1
while (1)
{
JLINKARM_ReadMemU32(Flash_SR_Address, 1, pdata_SR, pdata2);//检查FLASH_SR 的BSY位是否为1
busy &= data_SR[0];
if (busy != 0)//如果BSY位为1 等待
{
for (int temp = 10000; temp >2; temp--)
{;}
}
else
break;
}
JLINKARM_WriteU32(Flash_CR_Address, 1);//将FLASH_CR的PG位 置1
//写入半字(16位)
for(int i = 0; i < x; i++)
{
JLINKARM_WriteU16(flashAddress, xbuffer);//这里写入程序
flashAddress += 2;
}
} |