通过Cypress提供的固件框架可以实现自己的固件程序,其中"dscr.a51"文件中定义了新固件程序的各种USB设备描述符,如idVendor、idProduct有多少个接口、设置、端点等信息,然后借助于提供的固件框架,可以在USB设备枚举的时候使USB设备按照"dscr.a51"中定义的描述符来完成枚举工作。
但在下载编译好的固件到USB设备之前需要先下载另外一个hex文件,否则新的固件在枚举的时候不能正常工作,但固件实现的功能确实完整的(目前我也不知道什么原因,有知道的可以留言,不剩感激),在下载真正固件之前需要下载的hex文件在附件中名称为"cy_fix.hex" cy_fix.rar 。
按照之前提供的方法,在CY68013的固件加载驱动中probe函数中,先下载"cy_fix.hex"到USB设备中,然后在下载真正的固件到USB设备中,这时候CY68013会自动断开与主机的连接,然后在重新连接到主机上,按照"dscr.a51"中描述的进行冲枚举。通常在"dscr.a51"中会定义新的idVendor和idProduct则设备在重新枚举之后,将会使用新的标示符连接到USB总线上,这时就需要新的驱动来完成和描述符的匹配工作(参考《Linux USB驱动(2)---probe函数》),之前的CY68013的固件加载驱动就没有用途了。
CY68013的固件加载驱动只是用来下载固件到USB设备中的,当固件加载成功设备重新枚举之后该驱动的工作也就完成了。所以一个CY68013的USB驱动实际是有2个驱动来完成的,第一个称为“固件加载驱动”第二个才是真正的“USB设备驱动”完成USB设备和主机之间的交互。
如果设备不需要新的描述符,则可以在第一个驱动中完成固件的加载和USB设备与主机交互的功能即可,USB设备不会重新枚举。
阅读(953) | 评论(0) | 转发(0) |