找回密码
 立即注册
查看: 58|回复: 3

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

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:48
  • 最近打卡:2026-03-25 09:38:33

5

主题

9

回帖

353

积分

中级会员

积分
353
发表于 2026-3-20 15:27:31 | 显示全部楼层 |阅读模式
已经搞定了,升级了4G cat1的透传模块来发送消息和通讯,当有需要升级的程序时,服务器下发到flash中保存,然后进入isp,保存进iap里,然后就可以了
hex转bin可以随便找个工具就好了,在服务器中处理的时候前面1000不要
还有就是生产的时候烧录,需要把2个hex合并
最好是自己做个小工具,可以转换ap程序,也可以合并程序
当然stc官方能做进去就最好了




回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:48
  • 最近打卡:2026-03-25 09:38:33

5

主题

9

回帖

353

积分

中级会员

积分
353
发表于 2026-3-20 15:29:52 | 显示全部楼层
我的想法是使用4G通讯升级,把BIN文件下载后放到w25q16里,然后重启后升级,进入了升级,但是写IAP写入不了,相同的函数是串口就可以
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2026-04-04 14:50:05
已绑定手机

15

主题

287

回帖

1498

积分

金牌会员

DIY玩家

积分
1498
发表于 2026-3-20 16:29:56 | 显示全部楼层
rook*** 发表于 2026-3-20 15:29
我的想法是使用4G通讯升级,把BIN文件下载后放到w25q16里,然后重启后升级,进入了升级,但是写IAP写入不了 ...

如果使用其它通信可以
但是使用4G通讯有问题
可能download的数据异常
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:48
  • 最近打卡:2026-03-25 09:38:33

5

主题

9

回帖

353

积分

中级会员

积分
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

回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-4 17:46 , Processed in 0.102299 second(s), 55 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表