rooky123 发表于 2026-3-20 15:27:31

4G升级进入isp后写入不了

已经搞定了,升级了4G cat1的透传模块来发送消息和通讯,当有需要升级的程序时,服务器下发到flash中保存,然后进入isp,保存进iap里,然后就可以了
hex转bin可以随便找个工具就好了,在服务器中处理的时候前面1000不要
还有就是生产的时候烧录,需要把2个hex合并
最好是自己做个小工具,可以转换ap程序,也可以合并程序
当然stc官方能做进去就最好了




rooky123 发表于 2026-3-20 15:29:52

我的想法是使用4G通讯升级,把BIN文件下载后放到w25q16里,然后重启后升级,进入了升级,但是写IAP写入不了,相同的函数是串口就可以

狂热主宰 发表于 2026-3-20 16:29:56

rooky123 发表于 2026-3-20 15:29
我的想法是使用4G通讯升级,把BIN文件下载后放到w25q16里,然后重启后升级,进入了升级,但是写IAP写入不了 ...

如果使用其它通信可以
但是使用4G通讯有问题
可能download的数据异常

rooky123 发表于 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;

    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]
查看完整版本: 4G升级进入isp后写入不了