热度 14
2012-7-23 20:51
2791 次阅读|
0 个评论
最近遇到一个有关USB驱动的问题,解决之后简单记录下,希望可以给遇到同样问题的朋友提供帮助。 总的来说,遇到的问题是:有一个比较早一点的TI评估板,其中TI提供了一个PC端的控制软件通过USB接口配置板上各芯片的工作模式,可遗憾的是它提供的USB驱动无法支持win7,也无法支持64位系统。 起先在TI的官网中找解决办法,很遗憾没有什么有用的信息,可能是这块评估板用的人的确不多……于是只能自己寻求办法了,首先想到的是只能迎合TI的要求,换成32位的XP系统,可是这样做太不甘心了,坚决要克服掉这个困难。 首先,来看看TI所使用的USB配置板上芯片采用的方案。给出原理图: 可见,板上使用了FT245RL这颗芯片,用过FTDI公司产品的朋友肯定不会陌生,这个芯片是常用的USB转串口时用到的芯片。使用FTDI的芯片有个最大的好处在于,它给用户提供了一个USB驱动,而这个驱动的功能就是把USB接口在PC上虚拟成一个串口!! 这样,我们便找到解决问题的关键了。其实我们可仔细分析分析这样一种模式,可能在前几年USB还不是那么盛行的时候,大多用PC来配置设备都是采用串口来进行的。如今,大多用户提出希望使用即插即用的USB模式,为了减去USB接口开发的复杂度,使用FTDI芯片这样的一种模式是十分值得借鉴的。简单概括下,如上图,由一个USB接口+FT245RL芯片,即把USB串行信号转换成了并行的8bit信号,而在PC端,FTDI提供了一个USB驱动把USB转换成了一个虚拟串口,对于PC的软件开发可不需要任何改动即可。 好了,找到关键后,问题就好解决了,我们先到FTDI官网上下个可支持win7-64位的驱动。 http://www.ftdichip.com/Drivers/VCP.htm 由于我们需要的是一个虚拟串口的驱动,所以选择VCP driver。从中下载windows-64位版本: 解压后可以看到,其中包含了两个驱动,一个是ftdibus,一个是ftdiport。在这里,我们安装的是ftdibus。 可惜的是,在我们遇到的这个问题上,依旧没能安装成功。 于是我们查看到所连接上设备的硬件ID信息,如下图: 我们可以看到设备的VID=0001而PID=5682,这里笔者一看便能知道TI肯定修改了VID和PID,为什么这么说呢?很简单,VID=0001这肯定是厂家自定义的,而PID=5682刚好与板上TI的DAC芯片信号一致,所以TI肯定是修改了FTDI设定的VID和PID,所以我们之前使用FTDI的驱动没法安装成功。 我们先简单介绍介绍VID和PID。 USB 规范的规定,所有的USB设备都有供应商ID(VID )和产品识别码(PID ),主机通过不同的VID和PID来区别不同的设备,VID和PID都是两个字节长。 其中,供应商ID(VID)由供应商向USB执行论坛申请,每个供应商的VID是唯一的,PID由供应商自行决定。VID和PID通常情况下有两种存储方式,第一种是主控生产商的VID和PID,存储在主控的bootcode中;第二种是设备生产商的VID和PID,该VID和PID存储在主控外部的非易失性存储设备中(EEPROM 或Flash ) 的设备固件中,当USB设备连接主机时,如果固件中有设备生产商的VID和PID,会将该VID和PID报告给主机,而忽略主控生产商的VID和PID。 这里可看出,TI使用的是FTDI的USB驱动设备芯片,所以主控生产商是FTDI,而TI作为设备生产商,又对VID和PID进行了修改,所以我们使用FTDI的驱动程序没能安装上。之后,我们只要对FTDI提供的驱动程序进行修改就好了。