- 打卡等级:偶尔看看III
- 打卡总天数:48
- 最近打卡:2026-03-25 09:38:33
中级会员
- 积分
- 353
|
发表于 2026-3-21 07:59:03
|
显示全部楼层
不是的,写flash没有问题,是在isp下转写不对
在isp中
case DFU_CMD_ERASE:
addr = 0;
while (addr < 0xf000)
{
iap_erase_page(addr);
addr += 0x200;
}
初始化的地址是从0x0开始
addr = *(WORD *)&UartRxBuffer[4];
case DFU_CMD_PROGRAM:
while (size--)
{
if (!iap_write_byte(addr, *ptr))
{
status = STATUS_PROGRAMERR;
break;
}
addr++;
ptr++;
}
写入的地址也是从0x0开始
BYTE iap_read_byte(WORD addr)
{
return *(BYTE code *)(addr + LDR_SIZE);
}
但是为什么读取的地址就要从0x1000开始了?
iap_addr=0;
iap_erase_page(iap_addr);
//从flash里读16个字节出来
SPI_Read_Nbytes(flash_addr, flash_data, 16);
for(i = 0; i < 16; i++)
{
if(iap_write_byte(iap_addr + i, flash_data[i]))
printf("iap_write_byte OK %x %bx \r\n",iap_addr + i,flash_data[i]);
else
printf("iap_write_byte Error %x %bx \r\n",iap_addr + i,flash_data[i]);
}
我就算在程序里直接在0x0写入16个字节也写不成功,都是Error
|
|