Windows下USB驱动,能不能直接使用?

sunjane2 2008-12-18 01:31:40
想控制USB设备,Windows下USB驱动,能不能直接使用?
哪位大侠有拿windows下的直接使用过么?比如读写USB设备的descriptor,HardwardID,等等
...全文
190 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
babycathq2000 2008-12-19
  • 打赏
  • 举报
回复
我还是不太明白,你的应用需求是什么?
只要硬件厂商不是故意隐藏硬件连接,连接设备完全没有问题。可是即便你已经联通了设备,你知道设备通讯的数据结构和通讯指令集吗?如果你不知道这些信息,如何正常与设备通讯,完成应用需求呢?
sunjane2 2008-12-19
  • 打赏
  • 举报
回复
我的目的是:
用南桥的USB port0 作为debug port(类似于RS232串口).
连接方式如下: 目标机(南桥USB port0) <====>USB cable <====> 主机console. 通过主机端下命令给目标机,最终达到调试目标机的目的.
ARM和desktop通常都带有RS232,但是notebook 没有RS232,所以想用USB port 来调试目标机上自己开发的BIOS(不靠BIOS 的port 80来debug).
sunjane2 2008-12-18
  • 打赏
  • 举报
回复
windows 的USB driver,不知道可否用如上的方法使用? 其它方法也行?
不知道大家明白我提的问题了么?

另外intel 的南桥USB port0 是一个debug port?可以像UART 一样使用?哪位高手可否指点指点?
sunjane2 2008-12-18
  • 打赏
  • 举报
回复
下面这个连接是介绍的DOS下利用一个driver(dosusb.com),帮我们来读写和访问USB设备的.
http://www.georgpotthast.de/usb/dosusb.htm
执行完这个driver呼叫完之后,在dos 下帮我们完成一个INT65 的function call.

使用起来填一张表(URB),再呼叫INT65就可以 in/out USB 设备了.
参考代码
/* ENUM.C -- retrieves the device descriptor of a USB device
using the DOSUSB driver.

Done with an old Borland C compiler to be able to use
FP_SEG and FP_OFF. DOSUSB needs real mode segment/offset address.
*/

#include <stdio.h>
#include <dos.h>

union REGS regs;

struct urbtype {
char transaction_token;
char chain_end_flag;
char dev_add;
char end_point;
char error_code;
char status;
unsigned int transaction_flags;
unsigned int buffer_off;
unsigned int buffer_seg;
unsigned int buffer_length;
unsigned int actual_length;
unsigned int setup_buffer_off;
unsigned int setup_buffer_seg;
unsigned int start_frame;
unsigned int nr_of_packets;
char int_interval;
char error_count;
unsigned int timeout;
unsigned int next_urb_off;
unsigned int next_urb_seg; /* reserved */
} ;

struct setuptype {
char bmRequestType;
char bRequest;
unsigned int wValue;
unsigned int wIndex;
unsigned int wLength;
};

void main()
{
struct urbtype urb;
struct setuptype device_request ;
unsigned char buffer[9] = "*********";
int i;

/* get device descriptor
device_request.bmRequestType = 0x80;
device_request.bRequest = 6;
device_request.wValue = 0x100;
device_request.wIndex = 0;
device_request.wLength = 8; */

/* get interface description
device_request.bmRequestType = 0x80;
device_request.bRequest = 6;
device_request.wValue = 0x400;
device_request.wIndex = 0;
device_request.wLength = 9;
*/

/* set up request */
urb.transaction_token=0x69;
urb.chain_end_flag=0;
urb.dev_add=2; //update to 2 for 2nd usb device
urb.end_point=2; // update from 0 to 1
urb.error_code=0;
urb.status=0;
urb.transaction_flags=0;
urb.buffer_seg=FP_SEG(&buffer);
urb.buffer_off=FP_OFF(&buffer);
urb.buffer_length=9;
urb.actual_length=9;
urb.setup_buffer_seg=FP_SEG(&device_request);
urb.setup_buffer_off=FP_OFF(&device_request);
urb.start_frame=0;
urb.nr_of_packets=0;//1. plan to change to 64
urb.int_interval=0;
urb.error_count=0;
urb.timeout=0;
urb.next_urb_seg=0;
urb.next_urb_off=0;

/* DS does not need to be set here */
regs.x.dx = FP_OFF(&urb);
int86(0x65, ®s, ®s); /* call DosUHCI */

/* printf ("Buffer: %s\n",buffer); */
for (i=0 ; i<9; ++i)
{
printf ("%d ",buffer[i]);
}

printf("\nURB errorcode%s",urb.error_code);
/*
printf("\n\nConfigration Descriptor:");
printf("\nConfigration Descriptor Length: %02X hex",buffer[0]);
printf("\nbDescriptor Type: %02X hex",buffer[1]);
printf("\nwTotal Length: %02X%02X hex",buffer[3],buffer[2]);
printf("\nbNumInterface: %02X hex",buffer[4]);
printf("\nbConfiguration Value: %02X hex",buffer[5]);
printf("\niConfiguration : %02X hex",buffer[6]);
printf("\nbmAttributes: %02X hex",buffer[7]);
printf("\nbMaxPower: %02X hex",buffer[8]);

printf("\n\nInterface Descriptor:");
printf("\nInterface Descriptor Length: %02X hex",buffer[0]);
printf("\nbDescriptorType: %02X hex",buffer[1]);
printf("\nbInterfaceNumber: %02X hex",buffer[2]);
printf("\nbAlternateSetting: %02X hex",buffer[3]);
printf("\nbNumEndpoints: %02X hex",buffer[4]);
printf("\nnInterfaceClass: %02X hex",buffer[5]);
printf("\nbInterfaceSubClass: %02X hex",buffer[6]);
printf("\nbInterfaceProtocol: %02X hex",buffer[7]);
printf("\niInterface: %02X hex",buffer[8]);
*/
}
babycathq2000 2008-12-18
  • 打赏
  • 举报
回复
要是u盘没问题。
要是其他的usb设备的话,你想做什么样的控制呢?
仅仅是识别应该没问题,找到guid就行了。但是要想读取/写入等,你知道他的指令集和通讯数据结构吗?
lbh2001 2008-12-18
  • 打赏
  • 举报
回复
不是吧,最简单的是用它提供的SDK来控制

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧