STM32/STM8技术论坛
直播中

苏畅

7年用户 247经验值
私信 关注
[问答]

STM32f103xx USB HID做IAP功能,USB列举失败

小弟最近遇到很頭痛的問題,
從IAP區跳轉至APP區USB通訊都正常,
但是當從APP區跳轉回IAP區時,USB列舉卻失敗,導致IAP區無法做USB通訊,也有試過IAP區不初始化USB,但中斷卻無效,
我很確定的是我IAP區與APP區都有重新設置RCC跟NVIC中斷向量
在IAP區的NVIC是NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);在APP區的NVIC是NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000);在APP區中的options IROM1我也有改成0x8004000,
跳轉到IAP區就是沒辦法做USB通訊,請問各位大大是甚麼問題啊???????????





回帖(16)

凌流浪

2018-11-5 08:59:54
我不明白的是,ST官方给的USB示例里边,不是有个DFU的例子吗? 就是用来USB升级的,当做IAP。
你为什么还自己使用HID写个,多费神。。再官方给的例子上改下就变成自己需要的了。
举报

王颖

2018-11-5 09:12:08
用过ST的DFU,就知道多难用了。
举报

陈炜

2018-11-5 09:28:54
那你意思是说IAP和APP里各有相应的USB服务程序?
举报

苏畅

2018-11-5 09:44:18
引用: huazhe 发表于 2018-11-5 07:59
那你意思是说IAP和APP里各有相应的USB服务程序?

是的, IAP與APP裡都各有USB服務程序,但功能是一樣的,還是我只需要在一區使用USB服務程序就好?
举报

苏畅

2018-11-5 10:02:39
引用: jufenyi 发表于 2018-11-5 07:42
用过ST的DFU,就知道多难用了。

沒錯, 還是自己寫IAP比較快,因我是做產品需要在軟體上即時做韌體更新, 跟DFU差很多
举报

苏畅

2018-11-5 10:09:43
引用: 充电搜索 发表于 2018-11-5 07:30
我不明白的是,ST官方给的USB示例里边,不是有个DFU的例子吗? 就是用来USB升级的,当做IAP。
你为什么还自己使用HID写个,多费神。。再官方给的例子上改下就变成自己需要的了。

大大, 需求不一樣啊, DFU一定要用他自己的協議還有他自己的檔案格式,又不能及時使用自己寫的軟體做更新, 請問不自己用HID寫IAP要怎麼做??
举报

凌流浪

2018-11-5 10:17:25
"不能及時使用自己寫的軟體做更新", 不明白这句话。

使用DFU可以将自己生成的HEX,BIN,S19格式的文件,官方有提供一个转化工具可以转化为DFU格式,就可以升级了,随时可以把自己的软件生成的烧录文件烧录到到MCU内。

且DFU做IAP的代码是开源的,自己可以做随意修改和二次开发。至于DFU的类定义,这也是遵循USB标准类定义0xFE,0x01,可以到u***.org官网上查看。通讯协议代码为0x02,DFU mode protocol也是标准的,u***.org官网上可以查看,给个链接吧:http://www.u***.org/developers/docs/devclass_docs/DFU_1.1.pdf

但话说,是什么通讯协议重要么?

总而言之,使用DFU的IAP是对于固件升级是完全可以满足的,且开源,只不过你对其不够了解罢了。
举报

凌流浪

2018-11-5 10:37:06
对了,PC端的所有软件都是开源的。
举报

陈炜

2018-11-5 10:51:46
引用: ywyrywer 发表于 2018-11-5 08:14
是的, IAP與APP裡都各有USB服務程序,但功能是一樣的,還是我只需要在一區使用USB服務程序就好?

这个要看你的需求。
问题应该出在从APP到IAP跳转那个地方。
举报

苏畅

2018-11-5 11:09:12
引用: 充电搜索 发表于 2018-11-5 09:07
对了,PC端的所有软件都是开源的。

不能及時使用自己寫的軟體更新->意思是產品已經售出在使用者手上, 我需要直接用軟體方式進行韌體更新, 所以這時MCU在APP區收到更新訊息, 需跳至IAP區做bootloader, 總不可能還用按按鍵的方式?

DFU可以做到這樣?
举报

赵明

2018-11-5 11:24:49
你IAP是做跳转APP用的,你APP里面程序放在USB里面,你程序在APP里面跑,检测到USB升级了,把数据写到知道的一块FLASH里面,写入完成后,写一个标识,系统复位进入IAP,你IAP里面写一个读升级标识,如果有标识说明需要跳转APP,你直接映射就可以了,IAP里面完全不用使用USB
举报

凌流浪

2018-11-5 11:43:12
引用: ywyrywer 发表于 2018-11-5 09:39
不能及時使用自己寫的軟體更新->意思是產品已經售出在使用者手上, 我需要直接用軟體方式進行韌體更新, 所以這時MCU在APP區收到更新訊息, 需跳至IAP區做bootloader, 總不可能還用按按鍵的方式?

DFU可以做到這樣?

这样就可以了,我用DFU实现完全没有问题的。
举报

凌流浪

2018-11-5 11:59:20
引用: qq29955 发表于 2018-11-5 09:55
你IAP是做跳转APP用的,你APP里面程序放在USB里面,你程序在APP里面跑,检测到USB升级了,把数据写到知道的一块FLASH里面,写入完成后,写一个标识,系统复位进入IAP,你IAP里面写一个读升级标识,如果有标识说明需要跳转APP,你直接映射就可以了,IAP里面完全不用使用USB ...

本帖最后由 任风吹吹 于 2016-6-3 17:39 编辑

是的,就是这样,这里就只需要一个IAP和APP都可以访问的升级标志而已,要么在备份域寄存器,要么在FLASH或外挂存储东东。 我使用的是软件复位,所以就用了软件复位标志来作为升级标志而已。
至于在IAP中是不是用USB没有任何关系,在APP中只是需要一个触发升级的信号而已,是不是用USB也没多大的关系,关键是要在实际产品中可以用的触发信号。

DFU只是一种通过USB进行升级的IAP并符合USB升级标准的程序,怎么使用的看使用者。
举报

苏畅

2018-11-5 12:13:25
引用: 充电搜索 发表于 2018-11-5 10:30
本帖最后由 任风吹吹 于 2016-6-3 17:39 编辑

是的,就是这样,这里就只需要一个IAP和APP都可以访问的升级标志而已,要么在备份域寄存器,要么在FLASH或外挂存储东东。 我使用的是软件复位,所以就用了软件复位标志来作为升级标志而已。

謝謝您熱心的回應與幫助,我在這幾天已經完成我的線上韌體更新程序了,你們所說的我先前很早就寫進去了,我的問題其實很單純,就只是APP區與IAP區的跳轉USB重新列舉問題,我將每次跳轉前都重新reset USB裝置>等同於模擬手動插拔USB的動作,之後都能成功跳轉且USB都正常工作,總之謝謝你們的熱心回復^^
举报

苏畅

2018-11-5 12:33:04
引用: 充电搜索 发表于 2018-11-5 10:13
这样就可以了,我用DFU实现完全没有问题的。

沒錯關鍵就是要call這個程序->HAL_NVIC_SystemReset();
举报

龚文杰

2019-8-20 21:29:01
可是DFU也是有驱动的安装的不是吗??用户需要的最好是免驱
举报

更多回帖

发帖
×
20
完善资料,
赚取积分