USB2.0学习笔记连载(十四):USB驱动安装及固件程序的编写
2016-04-05 21:47
477 查看
在之前的博客中已经讲过,驱动程序最核心的两个文件,一个是xxx.sys文件,一个是xxx.inf文件,主机是寻找xxx.inf文件。
在下面的文件中有相关关于USB驱动的说明。对于用户来说,xxx.sys文件 可以不用修改,用户可以对xxx.inf文件的内容进行相应的修改即可。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/2b0b34d057d3c57e4c8c2cdb74b153e2.png)
下图是《cy_usb》应用手册的名字,可以找到下图手册,查看关于USB驱动相关的内容
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/fbea30008a36e61fb85ea2143f289ede.png)
下图是当前驱动支持的系统。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/799fa1da8c7c2d4b72b3dd27650e7bcf.png)
下图是支持的VID&PID对,且注意,如果用户修改cyUSB3.inf文件,并加入自己的VID&PID,这样会导致使得设备变成未签名。windows系统不建议使用未签名的驱动。这一点需要格外注意。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/32a3d1c168d808beb63ae3c55f695150.png)
当前版本支持特性,兼容2.0,3.0等驱动。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/b800a922a2876ca87377ae475d6daca1.png)
下图是手册中的一段描述,主要是针对用户修改cyUSB3.inf,可以加入设备识别号,替换相应的驱动安装过程中的cypress显示字符,完成驱动自定义向导。GUID对应的序列号是固定的,参看之前的博客。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/56be3bd220deefc30a9e87b44b6a7235.png)
修改VID&PID名称:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/42604a86cc5c9b138e9c723ead8af29d.png)
修改strings
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/5288db30237322ad039a2f2a3ccd3b3b.png)
手册中有规定,若是不单单只修改目前的VID&PID的内容的话,那么需要用户自己去新建一个xxx.inf文件,将原内容进行修改即可。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/ba703f691cc442188e4f86ff363c6fed.png)
那么上述修改VID&PID之后,还要让系统能够针对你修改的VID&PID进行识别。如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/a1dcf42848d0159084e473c342ef6bc2.png)
图上这一部分主要是讲解对于不同的操作系统,需要将设置的ID(VID&PID)都要加入到对应的操作系统目录下,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/978dd2ea1ee49e8223ff34b7dff89cc1.png)
上述主要是针对《cy_usb》手册中的对于用户需要更改的内容作了讲解,和之前的博客《通用USB驱动程序解析》有类似内容。那么笔者接下来操作是,先利用Cypress自带的驱动,先对笔者设计的板卡进行驱动的安装。如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/665bdfe02e758ddda7cec69faa55bbdd.png)
先完成调用cypress 自带固件完成驱动安装。
安装完官方自带驱动如下所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/f57e73c1f6447d2c910e93704df89848.png)
这是因为EEPROM里面没有固化程序,所以显示上述信息。
那么如果我们想生成自己的控件信息,那该如何操作呢。
首先声明一点,完整的一个USB系统应该包括,固件程序,驱动 程序,上位机程序,从而形成一个USB系统。那么对于想更改USB的签名,那么必须从固件程序和驱动程序入手(有人问,你这不是废话吗。。。。好吧,好戏在后头)。
USB固件编程是整个设计任务的核心,USB固件程序用于完成USB设备的识别,重列举,设备请求、USB协议处理、外部硬件的功能,负责与USB主机间的数据通信等。所以要想更改签名,先从固件程序入手。在安装完套件中的 firmware文件中,有很多固件程序,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/caa90d9e1e8ae83a3451a760230c4234.png)
我们可以选择一个固件,比如bulkloop,使用keil软件打开,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/dd57fb2dcf918af19ed2f232a7327494.png)
注意上图中的dscr.a51这个文件,此文件是USB描述符,里面有设备描述符,设备限定描述符,配置描述符,字符串描述符以及用户描述符。关于描述符的介绍参看相关博客---《USB描述符简介》。
重点来了,刚才已经提到固件程序中包含了设备描述符等相关信息,若是想更改USB签名。首先更改图上的VID,PID,以及version ID(这样更改有可能会使得数字签名失效,这个问题请参看相关的博客---《USB数字签名》)
更改上述的VID和PID如下所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/8e592d1df587144e72ffa71eb84cfb94.png)
字符串更改为如下所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/f52bb137fcc9611ed5a99f7baeb7a64d.png)
//==================================================================
注意!!!!!!
上述操作是对应的固件操作,那么固件的VID和PID对应的是0x52EA,那么在驱动程序里面也要进行相应的操作,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/b351ac3a8eac97a28a2b909a1d7b351b.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/adc6d258cbf05aaa79681250961867ad.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/6c36dd5aaecb1d83a192999cdc9785fb.jpg)
.png]
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/d7431e282f22e80be8069e4383c50687.png)
在下面的文件中有相关关于USB驱动的说明。对于用户来说,xxx.sys文件 可以不用修改,用户可以对xxx.inf文件的内容进行相应的修改即可。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/2b0b34d057d3c57e4c8c2cdb74b153e2.png)
下图是《cy_usb》应用手册的名字,可以找到下图手册,查看关于USB驱动相关的内容
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/fbea30008a36e61fb85ea2143f289ede.png)
下图是当前驱动支持的系统。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/799fa1da8c7c2d4b72b3dd27650e7bcf.png)
下图是支持的VID&PID对,且注意,如果用户修改cyUSB3.inf文件,并加入自己的VID&PID,这样会导致使得设备变成未签名。windows系统不建议使用未签名的驱动。这一点需要格外注意。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/32a3d1c168d808beb63ae3c55f695150.png)
当前版本支持特性,兼容2.0,3.0等驱动。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/b800a922a2876ca87377ae475d6daca1.png)
下图是手册中的一段描述,主要是针对用户修改cyUSB3.inf,可以加入设备识别号,替换相应的驱动安装过程中的cypress显示字符,完成驱动自定义向导。GUID对应的序列号是固定的,参看之前的博客。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/56be3bd220deefc30a9e87b44b6a7235.png)
修改VID&PID名称:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/42604a86cc5c9b138e9c723ead8af29d.png)
修改strings
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/5288db30237322ad039a2f2a3ccd3b3b.png)
手册中有规定,若是不单单只修改目前的VID&PID的内容的话,那么需要用户自己去新建一个xxx.inf文件,将原内容进行修改即可。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/ba703f691cc442188e4f86ff363c6fed.png)
那么上述修改VID&PID之后,还要让系统能够针对你修改的VID&PID进行识别。如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/a1dcf42848d0159084e473c342ef6bc2.png)
图上这一部分主要是讲解对于不同的操作系统,需要将设置的ID(VID&PID)都要加入到对应的操作系统目录下,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/978dd2ea1ee49e8223ff34b7dff89cc1.png)
上述主要是针对《cy_usb》手册中的对于用户需要更改的内容作了讲解,和之前的博客《通用USB驱动程序解析》有类似内容。那么笔者接下来操作是,先利用Cypress自带的驱动,先对笔者设计的板卡进行驱动的安装。如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/665bdfe02e758ddda7cec69faa55bbdd.png)
先完成调用cypress 自带固件完成驱动安装。
安装完官方自带驱动如下所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/f57e73c1f6447d2c910e93704df89848.png)
这是因为EEPROM里面没有固化程序,所以显示上述信息。
那么如果我们想生成自己的控件信息,那该如何操作呢。
首先声明一点,完整的一个USB系统应该包括,固件程序,驱动 程序,上位机程序,从而形成一个USB系统。那么对于想更改USB的签名,那么必须从固件程序和驱动程序入手(有人问,你这不是废话吗。。。。好吧,好戏在后头)。
USB固件编程是整个设计任务的核心,USB固件程序用于完成USB设备的识别,重列举,设备请求、USB协议处理、外部硬件的功能,负责与USB主机间的数据通信等。所以要想更改签名,先从固件程序入手。在安装完套件中的 firmware文件中,有很多固件程序,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/caa90d9e1e8ae83a3451a760230c4234.png)
我们可以选择一个固件,比如bulkloop,使用keil软件打开,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/dd57fb2dcf918af19ed2f232a7327494.png)
注意上图中的dscr.a51这个文件,此文件是USB描述符,里面有设备描述符,设备限定描述符,配置描述符,字符串描述符以及用户描述符。关于描述符的介绍参看相关博客---《USB描述符简介》。
重点来了,刚才已经提到固件程序中包含了设备描述符等相关信息,若是想更改USB签名。首先更改图上的VID,PID,以及version ID(这样更改有可能会使得数字签名失效,这个问题请参看相关的博客---《USB数字签名》)
更改上述的VID和PID如下所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/8e592d1df587144e72ffa71eb84cfb94.png)
字符串更改为如下所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/f52bb137fcc9611ed5a99f7baeb7a64d.png)
//==================================================================
注意!!!!!!
上述操作是对应的固件操作,那么固件的VID和PID对应的是0x52EA,那么在驱动程序里面也要进行相应的操作,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/b351ac3a8eac97a28a2b909a1d7b351b.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/adc6d258cbf05aaa79681250961867ad.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/6c36dd5aaecb1d83a192999cdc9785fb.jpg)
.png]
![](https://oscdn.geek-share.com/Uploads/Images/Content/201604/d7431e282f22e80be8069e4383c50687.png)