关于改造 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;
下图红色框是前后的区别,上边枚举不完整,下边枚举完整。
没分析出什么原因,建议用USB协议分析仪看看枚举过程 DebugLab 发表于 2024-8-14 09:25
没分析出什么原因,建议用USB协议分析仪看看枚举过程
因为Bootloader的USB枚举是通过查询方式的,不能用中断方式,估计添加代码后影响时序了。
古人来者_昌 发表于 2024-8-14 19:31
因为Bootloader的USB枚举是通过查询方式的,不能用中断方式,估计添加代码后影响时序了。
...
有可能是超时了
页:
[1]