您现在的位置是: 首页 > U盘系统 U盘系统
usb驱动详解_usb驱动开发流程
tamoadmin 2024-09-07 人已围观
简介1.用DriverStudio开发USB驱动程序2.怎么搞MTPusb驱动3.USB type C中CC端的工作原理流程是怎样的4.怎样写linux下的USB设备驱动程序5.如何在Windows下创建一个可启动USB驱动器此操作流程如下:1、开发板自带串口下载电流,配合上位机可实现一键ISP下载,不需要修改开发板上的BOOT设置。2、安装USB转串口驱动:STM32开发板用的USB转串口的驱动芯片
1.用DriverStudio开发USB驱动程序
2.怎么搞MTPusb驱动
3.USB type C中CC端的工作原理流程是怎样的
4.怎样写linux下的USB设备驱动程序
5.如何在Windows下创建一个可启动USB驱动器
此操作流程如下:
1、开发板自带串口下载电流,配合上位机可实现一键ISP下载,不需要修改开发板上的BOOT设置。
2、安装USB转串口驱动:STM32开发板用的USB转串口的驱动芯片是CH340,要实验串口得先在电脑中安装USB转串口驱动—CH340版本,驱动可在网上搜索下载。
3、硬件连接:用USB线连接电脑和开发板的USB转串口接口:USBTO UART,给开发板上电。
4、开始下载。
用DriverStudio开发USB驱动程序
vivo x6 plus怎么在电脑上安装手机USB驱动程式
方法是:
一、要先开启“USB除错”。
进入“设定”——“更多设定”——“核心版本号”,连续快速点选“核心版本号”多次,就可看见“开发者选项”了,进入“开发者选项”,就可找到“USB除错”,开启“USB除错”。
二、安装 豌 豆 荚 软体,搜寻安装手机驱动。
分别在电脑和手机下载安装 豌 豆 荚 软体,用USB线将手机与电脑连线,电脑中的 豌 豆 荚会自动在网上搜索并安装适合你手机的驱动,在手机弹出的USB选项中选手第二项“媒体装置(MTP)”和“允许USB除错”,确认与电脑连线了。安装豌 豆 荚以后,还可选择Wifi连线方式,可通过wiFi实现无线连线,不需USB线。
vivo x9怎么在电脑上安装手机USB驱动程式1,在电脑上安装360手机助手,当然如果你的电脑安装了360卫士的话就会自动安装360手机助手。
2,把手机用资料线和电脑连线
3,360手机助手会自动检测您手机的型号然后下载安装驱动程式。
vivo xplay5怎么在电脑上安装手机USB驱动程式方法是:
一、必须要先开启“USB除错”。
进入“设定”——“更多设定”——“核心版本号”,连续快速点选“核心版本号”多次,就可看见“开发者选项”了,进入“开发者选项”,就可找到“USB除错”,开启“USB除错”。
二、安装 豌 豆 荚 软体,搜寻安装手机驱动。
分别在电脑和手机下载安装 豌 豆 荚 软体,用USB线将手机与电脑连线,电脑中的 豌 豆 荚会自动在网上搜索并安装适合你手机的驱动,在手机弹出的USB选项中选手第二项“媒体装置(MTP)”和“允许USB除错”,确认与电脑连线了。安装豌 豆 荚以后,还可选择Wifi连线方式,可通过wiFi实现无线连线,不需USB线。
金立M5 plus怎么在电脑上安装手机USB驱动程式你先在电脑上安装一个驱动人生,然后手机连线到电脑,驱动人生会自动安装手机驱动的,你在它的外设驱动里面可以找到
htc 820怎么在电脑上安装USB驱动程式教你一个快捷的方法: 1,在电脑上安装360手机助手 2,把手机用资料线和电脑连线 3,360手机助手会自动检测您手机的型号然后下载安装驱动程式。
魅蓝max怎么在电脑上安装手机USB驱动程式
使用者在手机的设定——功能——开发者选项里,点选开启USB模式,然后连线电脑选择MTP模式,电脑就会自动安装驱动的。
htc one a9怎么在电脑上安装手机USB驱动程式A9000连线电脑需要使用S换机助手软体,具体操作方法:
1.电脑中安装S换机助手软体,在页面中间位置根据电脑的作业系统选择Windows版本下载/MAC OS版本下载;
2.手机直接与电脑相连,连线资料线后下滑通知栏,选择已连线为媒体装置(MTP)即可。
注:如手机设定了萤幕锁,请解除萤幕锁后连线,否则无法连线。
锤子手机怎么在电脑上安装USB驱动程式开启 u *** 除错,用资料线连上电脑,在电脑上安装碗豆荚或者应用宝一类的程式,会自动安装u *** 驱动。
怎么搞MTPusb驱动
DriverStudio不要vc环境吧,用DriverStudio就好了。
先理解什么是驱动。
windows为了保证安全性,稳定性不能直接操作I/O设备,比如USB设备,但是很多应用又需要与外部I/O通讯,那怎么办呢?所以微软搞了个驱动,通过驱动就能操作设备比如USB设备,因为驱动是内核模式下的。为什么不能用vc直接开发驱动呢?因为vc的函数都是用户级的,不是内核级的。
找本教程边看边实验。
USB type C中CC端的工作原理流程是怎样的
如果是手机连接电脑,需要MTPusb驱动,不管它,建议你按下面方法:
一、必须要先打开“USB调试”。
进入“设置”——“关于手机”——“版本号”或“内核版本”,连续快速点击“版本号”或“内核版本”多次,就可看见“开发者选项”了,进入“开发者选项”,就可找到“USB调试”,开启“USB调试”。
二、安装 豌 豆 荚(或360)手机管理软件,搜索安装手机驱动。
分别在电脑和手机下载安装 豌 豆 荚(或360)手机管理软件,用USB线将手机与电脑连接,电脑中的 豌 豆 荚会自动在网上搜索并安装适合你手机的驱动,在手机弹出的USB选项中选手第二项“媒体设备(MTP)”和“允许USB调试”,确认与电脑连接了,手机就可当作U盘使用,在手机与电脑之间传输数据和文件了。通过豌 豆 荚软件,还可以将手机中的通讯录、短信、照片、导出到电脑上保存。
怎样写linux下的USB设备驱动程序
USB type-C接口支持多种OEM产品定制模式,以扩展设备功能。在CC信道上通过协商实现信号重分配,接口可分为外设模式和替代模式两种模式,要进入模式,将在CC通道上执行简单的逻辑检查,以确定需要哪种模式。
为了进入替代模式,CC信道将使用双向通信的双相标记码(BMC)来正确设置链路,在这个协商过程中,两端的设备需要在进行任何更改之前就信号再分配达成共识,所有USB类型C接口都要求能够在非替代模式或非外设模式下用作USB兼容接口。
扩展资料:
USB是一种外部总线标准,用于规范计算机与外部设备之间的连接和通信,USB接口即插即用和热插拔功能,USB接口可连接鼠标、键盘等127个设备,USB是英特尔等公司于1996年于1994年底推出的,它成功地取代了串行口和并行口,成为计算机与大量智能设备之间的必要接口。
USB版本经历了多年的发展,现已发展到3.0版本,对于大多数工程师来说,开发USB2.0接口产品的主要障碍是,面对复杂的USB2.0协议,编写自己的USB设备驱动程序,熟悉单片机的编程这不仅需要VC编程经验,还需要能够编写USB接口硬件(固件)程序。
所以大多数人放弃开发自己的USB产品,为了简化复杂的问题,西安大泰电子专门设计了USB2.0协议转换模块,Usb20d模块可以看作是USB2.0协议的转换器,它将计算机的USB2.0接口转换成透明的并行总线,就像单片机总线一样。
百度百科-USB接口
百度百科-USB Type-C
如何在Windows下创建一个可启动USB驱动器
写一个USB的驱动程序最 基本的要做四件事:驱动程序要支持的设备、注册USB驱动程序、探测和断开、提交和控制urb(USB请求块)
驱动程序支持的设备:有一个结构体struct usb_device_id,这个结构体提供了一列不同类型的该驱动程序支持的USB设备,对于一个只控制一个特定的USB设备的驱动程序来说,struct usb_device_id表被定义为:
/* 驱动程序支持的设备列表 */
static struct usb_device_id skel_table [] = {
{ USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) },
{ } /* 终止入口 */
};
MODULE_DEVICE_TABLE (usb, skel_table);
对 于PC驱动程序,MODULE_DEVICE_TABLE是必需的,而且usb必需为该宏的第一个值,而USB_SKEL_VENDOR_ID和 USB_SKEL_PRODUCT_ID就是这个特殊设备的制造商和产品的ID了,我们在程序中把定义的值改为我们这款USB的,如:
/* 定义制造商和产品的ID号 */
#define USB_SKEL_VENDOR_ID 0x1234
#define USB_SKEL_PRODUCT_ID 0x2345
这两个值可以通过命令lsusb,当然你得先把USB设备先插到主机上了。或者查看厂商的USB设备的手册也能得到,在我机器上运行lsusb是这样的结果:
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 002: ID 1234:2345 Abc Corp.
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
得到这两个值后把它定义到程序里就可以了。
注册USB驱动程序:所 有的USB驱动程序都必须创建的结构体是struct usb_driver。这个结构体必须由USB驱动程序来填写,包括许多回调函数和变量,它们向USB核心代码描述USB驱动程序。创建一个有效的 struct usb_driver结构体,只须要初始化五个字段就可以了,在框架程序中是这样的:
static struct usb_driver skel_driver = {
.owner = THIS_MODULE,
.name = "skeleton",
.probe = skel_probe,
.disconnect = skel_disconnect,
.id_table = skel_table,
};
探测和断开:当 一个设备被安装而USB核心认为该驱动程序应该处理时,探测函数被调用,探测函数检查传递给它的设备信息,确定驱动程序是否真的适合该设备。当驱动程序因 为某种原因不应该控制设备时,断开函数被调用,它可以做一些清理工作。探测回调函数中,USB驱动程序初始化任何可能用于控制USB设备的局部结构体,它 还把所需的任何设备相关信息保存到一个局部结构体中,
提交和控制urb:当驱动程序有数据要发送到USB设备时(大多数情况是在驱动程序的写函数中),要分配一个urb来把数据传输给设备:
/* 创建一个urb,并且给它分配一个缓存*/
urb = usb_alloc_urb(0, GFP_KERNEL);
if (!urb) {
retval = -ENOMEM;
goto error;
}
当urb被成功分配后,还要创建一个DMA缓冲区来以高效的方式发送数据到设备,传递给驱动程序的数据要复制到这块缓冲中去:
buf = usb_buffer_alloc(dev->udev, count, GFP_KERNEL, &urb->transfer_dma);
if (!buf) {
retval = -ENOMEM;
goto error;
}
if (copy_from_user(buf, user_buffer, count)) {
retval = -EFAULT;
goto error;
}
当数据从用户空间正确复制到局部缓冲区后,urb必须在可以被提交给USB核心之前被正确初始化:
/* 初始化urb */
usb_fill_bulk_urb(urb, dev->udev,
usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointAddr),
buf, count, skel_write_bulk_callback, dev);
urb->transfer_flags |= URB_NO_TRANER_DMA_MAP;
然后urb就可以被提交给USB核心以传输到设备了:
/* 把数据从批量OUT端口发出 */
retval = usb_submit_urb(urb, GFP_KERNEL);
if (retval) {
err("%s - failed submitting write urb, error %d", __FUNCTION__, retval);
goto error;
}
当urb被成功传输到USB设备之后,urb回调函数将被USB核心调用,在我们的例子中,我们初始化urb,使它指向skel_write_bulk_callback函数,以下就是该函数:
static void skel_write_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
struct usb_skel *dev;
dev = (struct usb_skel *)urb->context;
if (urb->status &&
!(urb->status == -ENOENT ||
urb->status == -ECONNRESET ||
urb->status == -ESHUTDOWN)) {
dbg("%s - nonzero write bulk status received: %d",
__FUNCTION__, urb->status);
}
/* 释放已分配的缓冲区 */
usb_buffer_free(urb->dev, urb->transfer_buffer_length,
urb->transfer_buffer, urb->transfer_dma);
}
有时候USB驱动程序只是要发送或者接收一些简单的数据,驱动程序也可以不用urb来进行数据的传输,这是里涉及到两个简单的接口函数:usb_bulk_msg和usb_control_msg ,在这个USB框架程序里读操作就是这样的一个应用:
/* 进行阻塞的批量读以从设备获取数据 */
retval = usb_bulk_msg(dev->udev,
usb_rcvbulkpipe(dev->udev, dev->bulk_in_endpointAddr),
dev->bulk_in_buffer,
min(dev->bulk_in_size, count),
&count, HZ*10);
/*如果读成功,复制到用户空间 */
if (!retval) {
if (copy_to_user(buffer, dev->bulk_in_buffer, count))
retval = -EFAULT;
else
retval = count;
}
usb_bulk_msg接口函数的定义如下:
int usb_bulk_msg(struct usb_device *usb_dev,unsigned int pipe,
void *data,int len,int *actual_length,int timeout);
其参数为:
struct usb_device *usb_dev:指向批量消息所发送的目标USB设备指针。
unsigned int pipe:批量消息所发送目标USB设备的特定端点,此值是调用usb_sndbulkpipe或者usb_rcvbulkpipe来创建的。
void *data:如果是一个OUT端点,它是指向即将发送到设备的数据的指针。如果是IN端点,它是指向从设备读取的数据应该存放的位置的指针。
int len:data参数所指缓冲区的大小。
int *actual_length:指向保存实际传输字节数的位置的指针,至于是传输到设备还是从设备接收取决于端点的方向。
int timeout:以Jiffies为单位的等待的超时时间,如果该值为0,该函数一直等待消息的结束。
如果该接口函数调用成功,返回值为0,否则返回一个负的错误值。
usb_control_msg接口函数定义如下:
int usb_control_msg(struct usb_device *dev,unsigned int pipe,__u8 request,__u8requesttype,__u16 value,__u16 index,void *data,__u16 size,int timeout)
除了允许驱动程序发送和接收USB控制消息之外,usb_control_msg函数的运作和usb_bulk_msg函数类似,其参数和usb_bulk_msg的参数有几个重要区别:
struct usb_device *dev:指向控制消息所发送的目标USB设备的指针。
unsigned int pipe:控制消息所发送的目标USB设备的特定端点,该值是调用usb_sndctrlpipe或usb_rcvctrlpipe来创建的。
__u8 request:控制消息的USB请求值。
__u8 requesttype:控制消息的USB请求类型值。
__u16 value:控制消息的USB消息值。
__u16 index:控制消息的USB消息索引值。
void *data:如果是一个OUT端点,它是指身即将发送到设备的数据的指针。如果是一个IN端点,它是指向从设备读取的数据应该存放的位置的指针。
__u16 size:data参数所指缓冲区的大小。
int timeout:以Jiffies为单位的应该等待的超时时间,如果为0,该函数将一直等待消息结束。
如果该接口函数调用成功,返回传输到设备或者从设备读取的字节数;如果不成功它返回一个负的错误值。
这两个接口函数都不能在一个中断上下文中或者持有自旋锁的情况下调用,同样,该函数也不能被任何其它函数取消,使用时要谨慎。
我们要给未知的USB设备写驱动程序,只需要把这个框架程序稍做修改就可以用了,前面我们已经说过要修改制造商和产品的ID号,把0xfff0这两个值改为未知USB的ID号。
#define USB_SKEL_VENDOR_ID 0xfff0
#define USB_SKEL_PRODUCT_ID 0xfff0
还 有就是在探测函数中把需要探测的接口端点类型写好,在这个框架程序中只探测了批量(USB_ENDPOINT_XFER_BULK)IN和OUT端点,可 以在此处使用掩码(USB_ENDPOINT_XFERTYPE_MASK)让其探测其它的端点类型,驱动程序会对USB设备的每一个接口进行一次探测, 当探测成功后,驱动程序就被绑定到这个接口上。再有就是urb的初始化问题,如果你只写简单的USB驱动,这块不用多加考虑,框架程序里的东西已经够用 了,这里我们简单介绍三个初始化urb的函数:
usb_fill_int_urb :它的函数原型是这样的:
void usb_fill_int_urb(struct urb *urb,struct usb_device *dev,
unsigned int pipe,void *transfer_buff,
int buffer_length,usb_complete_t complete,
void *context,int interval);
这个函数用来正确的初始化即将被发送到USB设备的中断端点的urb。
usb_fill_bulk_urb :它的函数原型是这样的:
void usb_fill_bulk_urb(struct urb *urb,struct usb_device *dev,
unsigned int pipe,void *transfer_buffer,
int buffer_length,usb_complete_t complete)
这个函数是用来正确的初始化批量urb端点的。
usb_fill_control_urb :它的函数原型是这样的:
void usb_fill_control_urb(struct urb *urb,struct usb_device *dev,unsigned int pipe,unsigned char *setup_packet,void *transfer_buffer,int buffer_length,usb_complete_t complete,void *context);
这个函数是用来正确初始化控制urb端点的。
还有一个初始化等时urb的,它现在还没有初始化函数,所以它们在被提交到USB核心前,必须在驱动程序中手工地进行初始化,可以参考内核源代码树下的/usr/src/~/drivers/usb/media下的konicawc.c文件。
估计你是想装系统吧?
抱去电脑店装机需要30---50元,虽然钱不多但是麻烦,不如用30---50元买个U盘自己装系统,知识也学了机器也装了,主要是方便了,而且自己又落个U盘,呵呵,何乐而不为。
以下是用U盘装机流程,自己看看,学会不求人,而且自己更方便。
U盘装系统:是把U盘装个PE系统后,插在电脑上,可以用主板带动U盘启动,然后做系统用,主要是方便又可以更好的操作。
具体方法:去买个2.0U盘(3.0U盘要有驱动才行,装机会容易失败。),按下边的去做即可自己装系统了。
以下是U盘装机流程: 以大pe或是老毛桃pe为例,都一样。
以下是U盘装机流程: 以大为例
准备未储存文件的空U盘(建议使用8G以上U盘,注意:制作PE系统时会把U盘格式的),下载大U盘装机系统软件,如果自己的电脑可用,就在自己的电脑上把U盘装成PE系统,如果不好用到别的机器上制作成‘大’PE安装软件的U盘,即可开始装机,把U盘插到电脑上后开机。
注意!此处很重要: U盘做好后首先要做的是: 电脑正常时或是到PE桌面时,要 备份电脑上重要文件,(主要有:桌面上的重要文件和我的文档里的重要文件,拷到D盘里。)然后开始执行以下事情:
注意!如果电脑内存是4GB以上,则必须选择64位系统版本,因为32位Win7系统最大只支持4GB内存。
建议你,重装系统前把C盘格式化一下再装系统可解决硬盘有逻辑坏道问题。
1,先把WINXP、 WIN 7或是WIN10镜像下载到硬盘里或是预先做个GHO文件保存在U盘里,然后在除C盘以外的盘或者U盘根目录里新建一个GHO文件夹,也可以在D盘根目录下建一个GHO文件夹,然后把WIN7镜像用UltarISO或者WinRAR解压释放到GHO文件夹中。
注意:切记注意不要在C盘中建GHO文件夹,那样会再安装过程中把GHO文件清掉而安装失败。
2,把启动U盘插在电脑上,然后开机:
如果是新式UEFI BIOS,一般可以直接按F12进入到快捷启动菜单,在菜单中选择U盘名称,即可从U盘启动。
如果是老式BIOS,那必须按Del或F2等进入BIOS,然后在Advanced BIOS Features项目下,或者Boot,或者Startup下,找到First Boot Device或1st Boot Device等,进入后把USB-HDD或U盘名称设为第一启动,
具体方法看主板的说明书,或到网上搜索。
启动U盘后,进入到这个U盘PE界面,选择“运行Windows PE(系统安装)”。
3,进入大PE 或是老毛桃PE桌面后,选择"WIN系统安装器"这个桌面快捷图标,双击运行。
4,弹出NT6快捷安装器,首先就是要找到先前下载解压出来的系统文件,所以按“打开”按钮。
5,打开一个文件选择框,找到先前在D盘建立的GHO文件夹,然后找到其子文件夹Sources,然后再在Sources文件夹下找到install.wim这个文件,这个就是安装文件,选出好后按“打开”按钮。
6,然后选择安装分区,一般会默认为C盘,如果需要安装到其它盘,那就要手动调整,如果是新手,最好不要去调整它,因为系统分区必须是主分区,而且必须是激活的,所以,如果不了解这些,最好不要去碰这个。
7,在这里,弹出安装前最后一个确认窗口,仔细看一看,如果确定都选择好了,就可以点按“确定”,安装开始。
8,这时会将GHO中的系统文件复制到C盘,复制几个G的文件会需要一定时间,请耐心等一等。
9,等复制完成后,弹出提示”请重启动计算机进入安装阶段“,点”是“,电脑马上重启,这时就可以拔出U盘了,如果是UEFI BIOS,会仍从硬盘启动,如果是老式BIOS,就必须进入BIOS中,把从U盘启动改为从硬盘启动。
10,重新从硬盘启动后,进入电脑,就会开始安装系统,如配置开始菜单,注册组件等等,整个安装过程所需要的时间会更长,一定要耐心等待。