4G升级进入isp后写入不了
已经搞定了,升级了4G cat1的透传模块来发送消息和通讯,当有需要升级的程序时,服务器下发到flash中保存,然后进入isp,保存进iap里,然后就可以了hex转bin可以随便找个工具就好了,在服务器中处理的时候前面1000不要
还有就是生产的时候烧录,需要把2个hex合并
最好是自己做个小工具,可以转换ap程序,也可以合并程序
当然stc官方能做进去就最好了
我的想法是使用4G通讯升级,把BIN文件下载后放到w25q16里,然后重启后升级,进入了升级,但是写IAP写入不了,相同的函数是串口就可以 rooky123 发表于 2026-3-20 15:29
我的想法是使用4G通讯升级,把BIN文件下载后放到w25q16里,然后重启后升级,进入了升级,但是写IAP写入不了 ...
如果使用其它通信可以
但是使用4G通讯有问题
可能download的数据异常 不是的,写flash没有问题,是在isp下转写不对
在isp中
case DFU_CMD_ERASE:
addr = 0;
while (addr < 0xf000)
{
iap_erase_page(addr);
addr += 0x200;
}
初始化的地址是从0x0开始
addr = *(WORD *)&UartRxBuffer;
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))
printf("iap_write_byte OK %x%bx\r\n",iap_addr + i,flash_data);
else
printf("iap_write_byte Error %x%bx\r\n",iap_addr + i,flash_data);
}
我就算在程序里直接在0x0写入16个字节也写不成功,都是Error
页:
[1]