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

关于改造 8H8K64U的USB Bootloader 问题

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-04-27 06:53:22

12

主题

54

回帖

611

积分

高级会员

积分
611
发表于 2024-8-13 22:23:16 | 显示全部楼层 |阅读模式
最近着手改造 8H8K64U的USB BootLoader,出现了个意向不到的问题。

主要实现以下功能:
1: APP代码接收到升级命令后,进入BootLoader功能,从而实现客户远程升级。
2: 想在BootLoader代码中添加其它功能,实现固件加密方面功能,从而达到客户需要特定的秘钥才可以升级。
在while(1)主循环加入简单的LED控制后,APP接收到命令后可以进入BootLoader,固件升级一切正常。
但在加上个识别APP跳转过来的标志后,BootLoader不能正常识别USB了,目前使用Bushound发USB数据,在Bushound中可以看到USB枚举少一项。
论坛里有谁碰过这个问题吗?是否USB的枚举被那两行代码破坏了? 该如何解决呢?
while(1)循环代码如下:

    WatchDogOn();
    while (1)
    {         
        usb_isr();
        dfu_events();
                WatchDog();
                LEDTime++;
                if( LEDTime > LED_FLASH_TIME )
                        {
                                LED_PIN = ~LED_PIN;
                                LEDTime = 0;
                        }               

                if( DFUFlagOn == 1 )     //添加这两行代码后,USB无法正确枚举
                        LEDTime++;
    }

DFUFlagOn 置位的代码:

    if((DfuFlag != DFU_TAG) && (*(BYTE code *)(LDR_SIZE) == 0x02) && (*(WORD code *)(LDR_SIZE + 1) >= LDR_SIZE + 3))
        {
            P3M1 |= 0x08;
           P3PU = 0x00;
           ((void (code *)())(LDR_SIZE))();
        }
   
    P3M1 |= 0x08;
    P3PU  = 0x00;
    //DfuFlag = 0;
    DFUFlagOn = 1;   


下图红色框是前后的区别,上边枚举不完整,下边枚举完整。







截图202408132217147961.jpg
截图202408132218336130.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-8-14 09:25:11 | 显示全部楼层
没分析出什么原因,建议用USB协议分析仪看看枚举过程
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-04-27 06:53:22

12

主题

54

回帖

611

积分

高级会员

积分
611
发表于 2024-8-14 19:31:54 | 显示全部楼层
Debu*** 发表于 2024-8-14 09:25
没分析出什么原因,建议用USB协议分析仪看看枚举过程

因为Bootloader的USB枚举是通过查询方式的,不能用中断方式,估计添加代码后影响时序了。

点评

有可能是超时了  详情 回复 发表于 2024-8-14 20:18
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-8-14 20:18:26 | 显示全部楼层
古人来*** 发表于 2024-8-14 19:31
因为Bootloader的USB枚举是通过查询方式的,不能用中断方式,估计添加代码后影响时序了。
...

有可能是超时了
DebugLab
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:09 , Processed in 0.114003 second(s), 69 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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