我要实现的功能是:计算机上一个软件,用这个软件把一些数据通过USB接口发送出去。
原来这个软件是使用串口发送数据的,现在要改成通过USB发送数据。
用串口的可以用createfile实现通讯,那么用USB要用什么呢?
是不是还要写驱动什么的?
注:发送的是16进制的数据:00 01 AF之类的

解决方案 »

  1.   

    用DDK吧。也是CreateFile之类的,首先枚举HID设备,获取PID和VID,与你的硬件的PID和VID对比,符合即是你的硬件,这里用到这个结构体:PSP_DEVICE_INTERFACE_DETAIL_DATA,里面的DevicePath成员相当于串口编程里的“COM1”之类的东西。然后就WriteFile和ReadFile了。这是我几年前接触过一些的,现在可能忘记了。只能说这么些了。
      

  2.   

    能介绍得详细点吗?我的硬件的PID和VID是怎么确定的?
      

  3.   

    如果只是通过USB口发送数据,是不是要驱动什么的呢?
      

  4.   

    仍然是createfile,usb通讯有些是需要驱动来做基础的,一些hid, scsi协议的可以无驱。
      

  5.   

    我不确定你的是不是HID设备 根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),主机通过不同的VID和PID来区别不同的设备,VID和PID都是两个字节长,其中,供应商ID(VID)由供应商向USB执行论坛申请,每个供应商的 VID是唯一的,PID由供应商自行决定,理论上来说,不同的产品、相同产品的不同型号、相同型号的不同设计的产品最好采用不同的PID,以便区别相同厂家的不同设备
      

  6.   

    不过好像山寨厂家是随便定VID和PID,他们才不管重复不重复。
      

  7.   

    怎么能确定是不是需要驱动呢?
       比如我现在就是电脑和单片机通讯,是买个USB转232的那种转接头,驱动是在USB转232的转接头里面提供,还是和上位机通讯的那种芯片会提供驱动呢?
      

  8.   


    不是太明白你说的意思,如果你最终想以232来通讯,买个USB转的可以,会提供驱动给你的,如果你想PC与你的设备通过USB连接,那看你的设备是不是HID设备了,不是的话还是写个驱动吧。HID设备windows带有驱动,但你的设备要符合HID的协议
      

  9.   

    我以前做过一个跟你要做的这个一样的东西。我是采用上位机+驱动程序的方法来做的。
    1 在上位机中用writeFile()
    2 在驱动中Write()函数中有这样的函数:
     PURB pUrb=Ep1Out.BuildInterruptTransfer( pBuffer,  //发送数据的缓冲区
                writeSize, //发送数据的数据字节数
                FALSE, //FALSE表示设备传输的字节少数不可以于指定的字节数
                NULL,  //连接下一个传输的URB,这里没有,置为NULL
                NULL,  //指向一个已经存在的URB。置为NULL,分配一个新的URB
                FALSE);  //FALSE表示发送数据
    这个函数用来发送。
    KUsbPipe Ep1Out; // Pipe for USB endpoint address 1, type INTERRUPT如果不明白你可以baidu那个“computer00”的驱动示例程序,适合你。
      

  10.   

    怎么能确定是不是需要驱动呢?
      比如我现在就是电脑和单片机通讯,是买个USB转232的那种转接头,驱动是在USB转232的转接头里面提供,还是和上位机通讯的那种芯片会提供驱动呢?当你写一个用串口来发送数据的程序的时候,而你的电脑又没有串口的时候才用转接头。你现在是要用USB通信, 还要转接什么呀。。
      

  11.   

    我理一理思路:1、开发USB通讯,计算机软件和设备通过USB连接,开发这个软件需要这个设备开发商提供USB驱动,软件中通过使用这些驱动函数,来读取设备的数据、发送数据到设备。
    使用驱动的原因是:设备数据的读写,可能具有某些特定格式,设备商就封装起来,提供函数给我们使用
        上面的话是否正确?2、如果原来的设备提供的是RS485、RS232之类的通讯口,如果购买了USB转RS232、RS485的转换头,是不是可以像使用串口一样,直接用API函数CreateFile直接进行读写?当然前提是安装了这些转换头的驱动软件。
        这些转接头是怎么实现的?虚拟串口?不知道我上面的想法是否正确?
      

  12.   

    1 不正确。
      驱动程序的意义不是你想的这个,驱动程序不是因为特殊格式的数据而存在,而是你要想与硬件打交道,就必须通过应用程序调用驱动程序的方式。
    2 是可以直接用CreateFile直接读写。就像直接操作串口一样。
      对,原理是虚拟串口。即转换头的驱动虚拟出一个串口,然后再把针对该串口的操作转化为对USB的调用。
      

  13.   

    谢谢各位大侠们的解析,由于时间比较紧,所以没有详细的看USB的介绍,想先了解个大概,所以问了些很基础的东西,幸亏大虾们没有嫌弃这类问题,我现在再去查找资料了。没想到这么人帮忙,所以分数不够,大家意思意思吧。再次感谢各位。顺便问下,帖子能最加分数吗?