打印
[数据传输]

C8051f340 USB HID固件升级问题

[复制链接]
2929|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
summerny_li|  楼主 | 2015-11-16 21:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用户程序采用HID方式和上位机传输数据,现在准备写个bootloader 程序,也采用USB HID方式进行程序下载,硬件上没有做升级按键,  现在的思路是: bootloader 程序首先等待5s(枚举),判断用户程序是否有效,如果用户程序有效,而且上位机没有发送升级命令,则执行用户程序,否则 ,执行下载程序。

bootloader 的USB 枚举是采用查询方式,代码位置在(0xEA00-0XFE00),用户代码放在(0x1200-0xE9FF);
现在的问题是:  bootloader 跳转到用户程序是正常的,但是从用户程序跳转到bootloader,出现枚举失败,不能识别设备。
是不是这种方式不合理,还是需要升级按键来判断是否升级?

相关帖子

沙发
electric浪子| | 2015-11-17 10:28 | 只看该作者
正常模式走HID通道通信,切换到DFU时不是应该是要走另一个DFU驱动吗?

使用特权

评论回复
板凳
summerny_li|  楼主 | 2015-11-18 09:22 | 只看该作者
electric浪子 发表于 2015-11-17 10:28
正常模式走HID通道通信,切换到DFU时不是应该是要走另一个DFU驱动吗?

嗯,用户程序和升级程序是用的相同的VID和PID、输入和输出端口,只是HID报告描述符不同,
现在已经调通了,:)

使用特权

评论回复
地板
electric浪子| | 2015-11-19 16:00 | 只看该作者
summerny_li 发表于 2015-11-18 09:22
嗯,用户程序和升级程序是用的相同的VID和PID、输入和输出端口,只是HID报告描述符不同,
现在已经调通了 ...

楼主,你升级程序也是用的HID通道??我马上也要搞这个固件升级,自己调研了一下,也是准备用户程序直接走HID通道(我的是声卡,本身有UAC驱动,现在附加一个HID驱动,控制声卡命令走HID驱动),固件升级,采用自定义的数据(主要采用标准的DFU_DETACH去切换不行,因为是走HID通道的,HID有自己的requesttype、request.....)通过HID通道下去,下位机收到,则切换成DFU模式,上层重新枚举成DFU设备,此时设备走DFU驱动进行固件升级,升级完后,下位机切换,上位机重新枚举成HID设备。楼主,难道就只需要HID驱动就可以完成DFU吗?楼主说说你的实现好吗,非常感谢了

使用特权

评论回复
5
summerny_li|  楼主 | 2015-12-10 15:52 | 只看该作者
electric浪子 发表于 2015-11-19 16:00
楼主,你升级程序也是用的HID通道??我马上也要搞这个固件升级,自己调研了一下,也是准备用户程序直接 ...

不好意思,很久没有登陆了,我采用的方案是:
设备上电->判断 某个地址内容是否有效:
如果有效,则执行用户程序(HID),用户程序 增加boot跳转命令 ,如果接收到上位机的升级命令,将某个地址内容清空,跳转到boot入口地址。

否则进入boot进行硬件初始化和设备枚举(HID)。  

因为有两次枚举,还要注意延时的设置。


使用特权

评论回复
6
electric浪子| | 2015-12-11 18:40 | 只看该作者
summerny_li 发表于 2015-12-10 15:52
不好意思,很久没有登陆了,我采用的方案是:
设备上电->判断 某个地址内容是否有效:
如果有效,则执行 ...

所以,楼主你还是只采用了一个HID驱动就完成了DFU吗? 跳转到boot入口地址,实际只是你下位机那边做了处理,上位机依然采用HID通道,将数据发到端点0?还是bulk \ interrupt端点

使用特权

评论回复
7
summerny_li|  楼主 | 2015-12-14 11:54 | 只看该作者
electric浪子 发表于 2015-12-11 18:40
所以,楼主你还是只采用了一个HID驱动就完成了DFU吗? 跳转到boot入口地址,实际只是你下位机那边做了处 ...

是采用两个HID驱动(两个project),两个HID 采用相同的输入和输出端点、相同的传输方式,只是报告符的长度不同,上位机那边的改动是用户程序跳转到boot 或 boot跳转到用户 都要重新读取描述符。

使用特权

评论回复
8
electric浪子| | 2015-12-14 15:58 | 只看该作者
summerny_li 发表于 2015-12-14 11:54
是采用两个HID驱动(两个project),两个HID 采用相同的输入和输出端点、相同的传输方式,只是报告符的长 ...

哦,谢谢楼主的回答了哈!按照我现在理解的,楼主应该不是走的标准的DFU流程了哦,而是把自己的文件分包发下去,而下面收到数据将其写入flash即完成固件的升级了?而需要两个project主要是报告符的长度不同,用于每次传输文件的包的大小不同(正常的时候是指定包大小(HID设备描述符中),而DFU时需要改变这个包的大小或是改大这个包,加速传递文件)

使用特权

评论回复
9
gongqing198847| | 2016-3-23 15:21 | 只看该作者
请问楼主的调通了没能私聊么!

使用特权

评论回复
10
gongqing198847| | 2016-3-23 15:22 | 只看该作者
qq:278034016

使用特权

评论回复
11
gongqing198847| | 2016-3-23 15:24 | 只看该作者
qq:278034016

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

14

帖子

0

粉丝