我的程序 ISP + App 两部分,首地址分别为0x0800000,0x08003000,先判断是否有ISP请求(如某个IO口为低),无就进入App. 这部分参考ST的DFU例程, 在ISP和App中分别实现USB-HID协议,这部分参考st的coustmer-hid例程,实现64byte, endpoint1 IN/OUT传输。然后在次基础上建立自己的硬件通讯协议(在ISP中)和通讯控制协议(在App中)。在上位机上做了对应的硬件升级软件,当发出升级命令时,下位机App中会相应此命令,就是我3楼贴出的程序片段,下位机由App转入ISP中运行,开始硬件更新。选用hid主要看中了无需驱动比较方便,isp都是自己的一套,便于加密。 ISP和App都有自己独立的HID程序部分,当初也想过共用ISP中的就可以了,可以省空间,但可能对以后App程序扩展性造成不利影响,独立出来后在进行App->ISP切换,USB要重新进行初始化,就是我上面说得 重启usb.
|