CH58X使用USB HID进行IAP注意事项——笔记

本文介绍了使用CH58X单片机通过USBHID进行IAP升级的方案2,强调了遇到的困难,如跳转APP失败和中断处理。作者分享了如何解决这些问题,包括避免在写入过程中触发中断以及设置正确的APP位置和代码区域。
摘要由CSDN通过智能技术生成

CH58X使用USB HID进行IAP注意事项——笔记

一、背景

  1. 基础
    单片机使用CH582M,并使用USB HID进行IAP升级。
  2. 方案
    方案1:APP+BOOT方案,可以只安装APP就可以运行,APP中后续安装BOOT程序和后面更新也方便。
    方案2:经典IAP方案,BOOT+APP,烧录BOOT后,再通过自己的上位机烧录APP。这样就可以保证只要不删除BOOT,可以一直不崩。上述程序如果烧录中断,导致APP出错需要ISP下载。同样,这种方案需要APP跳转BOOT,但是APP需要删除中断,很麻烦。
  3. 决定,采用方案2

二、踩坑

  1. 可以通过HID写入APP数据,但是,跳转APP程序一直失败。

三、注意事项

  1. 官方说,BOOT程序最好不要有中断。如果有中断,需要在跳转前,或者APP初始化时钟后马上删除中断标志位。因此,在循环中运行USB_DevTransProcess();
  2. 边erase边写是有问题的。开始想着不断写入,2048的位置自动erase后写入即可。但是后来发现,第一个pase写入后,数据还是和erase之后一样的数据,最终无法跳转成功。最终修改成单独的指令进行erase,在erase全部之后,再进行写入,最后进行跳转。
  3. 需要在LD文件中,设置合理的APP位置。
  4. 需要在BOOT程序中,程序前加入__HIGH_CODE标志,让其运行在ram中。
// 设置iap标志位并进入iap模式
int16_t hid_iap_set_flag(void)
{
    uint32_t irq_status;
    u8 dat = KB_PAD_UDT_LOAD;
    int16_t k = kv_write_dat(KV_PAD_UDT, (u8 *)&dat, 1);
    SYS_DisableAllIrq(&irq_status);     // 必须清除所有标志位
    jumpIap();
    return k;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值