这段时间一直在做LabVIEW与USB设备通信的试验,对象是一台固伟的数字示波器,GDS-815C。LabVIEW提供了两个USB接口函数,usb control in.vi和usb control out.vi,但这两个只能用于和USB设备的0 endpoint 通信,而且其参数与USB标准文档上的并不完全一样,所以实际上用这两个函数与USB设备的0 endpoint通信并不方便,加上LabVIEW只对测试和测量类的USB设备提供了即插即识别的支持,将其放到USB INSTR类型里,对其他的设备全部归纳到USB RAW类型中,实际通信仍通过VISA来进行。而且VISA必须升级到3.2版本以上才能与USB设备进行通信。对于USB RAW类型的设备,必须使用VISA Driver Development Wizard安装设备驱动以告诉LabVIEW和Windows有这么一个设备在。前提只需知道设备的VID和PID号,这两个号可以从设备提供的驱动程序中找到。实际中并不需要也不能安装厂商提供的驱动,安装了厂商提供的设备驱动在LabVIEW中反倒无法与设备进行通信。因为按照USB技术文档规定,厂商可以自定义第三层协议,LabVIEW中自然无法获得相关数据。
由于固伟没有提供USB的指令集,只提供了一个示例程序,且只能显示当前的波形数据,所以我采用了USB Sniffer来截取USB数据包,以此来获得相关指令。在使用USB Sniffer的时候犯了一个错误,就是没有注意到它在对USB数据包进行编号的时候将上行和下行对应的数据包用一个编号代表,并使用down和up来进行区分,而它所显示的数据包总数则将其分开统计,也就是说,当Sniffer暂停在844这个包的时候,实际上对应的应当是422(当然也有可能是附近的某个数据包,应为可能存在只有上行或只有下行数据包的情况,比如在使用中断方式通信的时候,有比如相应数据包很晚才接收到,都会造成实际对应的不是422的结果。)因此,开始的时候我一直在844附近找相关指令,当然是找不到了。当发现这个情况时才真正找到了指令。这时通过VISA与设备进行通信。
由于固伟没有提供USB的指令集,只提供了一个示例程序,且只能显示当前的波形数据,所以我采用了USB Sniffer来截取USB数据包,以此来获得相关指令。在使用USB Sniffer的时候犯了一个错误,就是没有注意到它在对USB数据包进行编号的时候将上行和下行对应的数据包用一个编号代表,并使用down和up来进行区分,而它所显示的数据包总数则将其分开统计,也就是说,当Sniffer暂停在844这个包的时候,实际上对应的应当是422(当然也有可能是附近的某个数据包,应为可能存在只有上行或只有下行数据包的情况,比如在使用中断方式通信的时候,有比如相应数据包很晚才接收到,都会造成实际对应的不是422的结果。)因此,开始的时候我一直在844附近找相关指令,当然是找不到了。当发现这个情况时才真正找到了指令。这时通过VISA与设备进行通信。