USB2.0学习笔记连载(十四):USB驱动安装及固件程序的编写
在之前的博客中已经讲过,驱动程序最核心的两个文件,一个是xxx.sys文件,一个是xxx.inf文件,主机是寻找xxx.inf文件。
在下面的文件中有相关关于USB驱动的说明。对于用户来说,xxx.sys文件 可以不用修改,用户可以对xxx.inf文件的内容进行相应的修改即可。
下图是《cy_usb》应用手册的名字,可以找到下图手册,查看关于USB驱动相关的内容
下图是当前驱动支持的系统。
下图是支持的VID&PID对,且注意,如果用户修改cyUSB3.inf文件,并加入自己的VID&PID,这样会导致使得设备变成未签名。windows系统不建议使用未签名的驱动。这一点需要格外注意。
当前版本支持特性,兼容2.0,3.0等驱动。
下图是手册中的一段描述,主要是针对用户修改cyUSB3.inf,可以加入设备识别号,替换相应的驱动安装过程中的cypress显示字符,完成驱动自定义向导。GUID对应的序列号是固定的,参看之前的博客。
修改VID&PID名称:
修改strings
手册中有规定,若是不单单只修改目前的VID&PID的内容的话,那么需要用户自己去新建一个xxx.inf文件,将原内容进行修改即可。
那么上述修改VID&PID之后,还要让系统能够针对你修改的VID&PID进行识别。如下图所示:
图上这一部分主要是讲解对于不同的操作系统,需要将设置的ID(VID&PID)都要加入到对应的操作系统目录下,如下图所示:
上述主要是针对《cy_usb》手册中的对于用户需要更改的内容作了讲解,和之前的博客《通用USB驱动程序解析》有类似内容。那么笔者接下来操作是,先利用Cypress自带的驱动,先对笔者设计的板卡进行驱动的安装。如下图所示:
先完成调用cypress 自带固件完成驱动安装。
安装完官方自带驱动如下所示:
这是因为EEPROM里面没有固化程序,所以显示上述信息。
那么如果我们想生成自己的控件信息,那该如何操作呢。
首先声明一点,完整的一个USB系统应该包括,固件程序,驱动 程序,上位机程序,从而形成一个USB系统。那么对于想更改USB的签名,那么必须从固件程序和驱动程序入手(有人问,你这不是废话吗。。。。好吧,好戏在后头)。
USB固件编程是整个设计任务的核心,USB固件程序用于完成USB设备的识别,重列举,设备请求、USB协议处理、外部硬件的功能,负责与USB主机间的数据通信等。所以要想更改签名,先从固件程序入手。在安装完套件中的 firmware文件中,有很多固件程序,如下图所示:
我们可以选择一个固件,比如bulkloop,使用keil软件打开,如下图所示:
注意上图中的dscr.a51这个文件,此文件是USB描述符,里面有设备描述符,设备限定描述符,配置描述符,字符串描述符以及用户描述符。关于描述符的介绍参看相关博客---《USB描述符简介》。
重点来了,刚才已经提到固件程序中包含了设备描述符等相关信息,若是想更改USB签名。首先更改图上的VID,PID,以及version ID(这样更改有可能会使得数字签名失效,这个问题请参看相关的博客---《USB数字签名》)
更改上述的VID和PID如下所示:
字符串更改为如下所示:
//==================================================================
注意!!!!!!
上述操作是对应的固件操作,那么固件的VID和PID对应的是0x52EA,那么在驱动程序里面也要进行相应的操作,如下图所示:
USB2.0学习笔记连载(十四):USB驱动安装及固件程序的编写的更多相关文章
- USB2.0学习笔记连载(四):安装Cypress官网套件
上一篇博客大概讲了一下USB通用驱动程序的解析.笔者使用Cypress官网给定的资料去完成USB驱动开发.官网资料地址:http://www.cypress.com/?rID=14321 下载如下图的 ...
- USB2.0学习笔记连载(十七):keil实现寄存器的配置及相关函数讲解(一)
首先要实现对寄存器的配置,可以参考手册<Development kit User Guide>,如下图所示: 此文件包含在 文件中.上述的应用文档详细介绍了如何利用KEIL实现对固件程序 ...
- USB2.0学习笔记连载(十九):EZ-USB TRM手册重要部分介绍
TRM手册中给出了所有的寄存器配置,在 slave fifo模式或者 GPIF模式等,所以对于用到的各种寄存器配置需要查看此手册,当然还可以配合着应用手册<AN61345>. ...
- USB2.0学习笔记连载(三):通用USB驱动程序解析
对于USB驱动的开发,读者可以使用Windows DDK.DriverStudio等多种开发工具来实现USB的驱动,但是驱动程序的开发过程都比较复杂,而且很容易致使USB主机内存泄露而死机.那么对于笔 ...
- USB2.0学习笔记连载(二):USB基础知识简介
USB接口分为USB A型.USB B型.USBmini型.USBmicro型.USB3.0其中每种都有相应的插座和插头. 图1 图2 上图是USBA型接口,图1为插座,图2为插头.插座指向下行方向, ...
- USB2.0学习笔记连载(一):CY7C68013特性简介
上一篇博客已经给出了整个视频板卡架构,那么对于USB接口部分需要着重理解和学习. 对于目前来说,若是利用FPGA去模拟USB2.0内核,难度还是挺大的,整个状态的收发都不好控制.现在目前都在使用桥接芯 ...
- USB2.0学习笔记连载(六):USB2.0硬件设计需要注意事项
笔者在设计USB2.0时找到了一个官方给的硬件设计正确设计指南,其中有些内容还挺nice的.不单单只是USB的设计,其中有些思想可以应用到其他的场合中. 对于USB2.0而言,全速状态下可以达到480 ...
- USB2.0学习笔记连载(十八):keil实现寄存器的配置及相关函数讲解(二)
其实之前也有提及过,Cypress公司提供的官方文件和应用手册真的可以解决很多问题.做的也很人性化,操作也及其简单,几乎只要在 TD_int()里面配置一些常用的参数即可,其他都可以不用操作. 作为一 ...
- USB2.0学习笔记连载(十):关于WIN8及以上系统哈希值问题
笔者上一篇博客讲解了关于驱动的安装,笔者使用的系统是win8.1系统,那么对于win8系统及以上系统,会对外部设备,没有在windows系统中进行签名过的,都是不允许在windows系统中进行安装的, ...
随机推荐
- 使用MySQL Proxy和MySQL Replication实现读写分离
MySQL Replication可以将master的数据复制分布到多个slave上,然后可以利用slave来分担master的读压力.那么对于前台应用来说,就要考虑如何将读的压力分布到多个slave ...
- 深入理解Linux内核-定时测量
定时测量:由基于固定频率振荡器和计数器的几个硬件电路完成的. 记时体系概貌: 内核中与时间相关的任务: 硬件设备: 实时时钟(RTC):1.Real Time Clock ,独立于CPU和所有芯片,每 ...
- 顺时针旋转打印n阶矩阵(内测第0届第4题)
题目要求 问题描述:顺时针旋转打印n阶矩阵 样例输入:4 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 样例输出:1 2 ...
- 每天一个linux命令(2):file 命令
作用:查看文件类型信息 格式:file[OPTIONS...] [FILE...] 主要参数: --help 显示帮助信息 -v,--version 输出版本信息并退出 -b,--brief ...
- 【linux排错】"error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: lcw: error : cannot open shared object file: No such file ...
- 【Java】Java复习笔记-第四部分
反射 反射: 在运行时动态分析或使用一个类进行工作. java.lang.Class类:描述类信息的类. 类对象:描述一个类信息的对象,当虚拟机加载类的时候,就会创建这个类的类对象并加载该对象,Cla ...
- GreenDAO - primary key on multiple columns
转:http://stackoverflow.com/questions/15250609/greendao-primary-key-on-multiple-columns Does GreenDAO ...
- 【转】解决Lost connection to MySQL server during query错误方法
初步判断是MySQL可能挂掉了,在系统服务里面查看MySQL的进程并没有停止. 最开始考虑是数据库结构不对,但是我是通过Navicat for MySQL的备份和恢复备份导入数据,应该表结构都在备份文 ...
- 【Python】京东商品价格监控
import requests,json,re,winsound,time class Stock(object): def __init__(self): self.province_dict={v ...
- Android开发(七)——判断网络状态
项目中难免会出现使用网络的情况,使用网络前得进行网络判断,看网上的网友一般有多种实现版本. 第一种: // 是否有网络连接 public static boolean isNetworkConnect ...