古人来者_昌 发表于 2024-8-13 22:23:16

关于改造 8H8K64U的USB Bootloader 问题

最近着手改造 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;   


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







DebugLab 发表于 2024-8-14 09:25:11

没分析出什么原因,建议用USB协议分析仪看看枚举过程

古人来者_昌 发表于 2024-8-14 19:31:54

DebugLab 发表于 2024-8-14 09:25
没分析出什么原因,建议用USB协议分析仪看看枚举过程

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

DebugLab 发表于 2024-8-14 20:18:26

古人来者_昌 发表于 2024-8-14 19:31
因为Bootloader的USB枚举是通过查询方式的,不能用中断方式,估计添加代码后影响时序了。
...

有可能是超时了
页: [1]
查看完整版本: 关于改造 8H8K64U的USB Bootloader 问题