USB上位机开发指南
周立功USBCAN-II上位机开发(MFC)
周⽴功USBCAN-II上位机开发(MFC)使⽤的USB转CAN的设备是周⽴功的USBCAN-II,在购买的时候,会有上位机⼆次开发的库⽂件、例程和API⽂档等材料,可以参考。
1、库函数的调⽤⾸先,把库函数⽂件都放在⼯作⽬录下。
库函数⽂件总共有三个⽂件:ControlCAN.h、ControlCAN.lib、ControlCAN.dll和⼀个⽂件夹kerneldlls。
VC调⽤动态库的⽅法(1) 在扩展名为.CPP的⽂件中包含ControlCAN.h头⽂件。
如:#include “ControlCAN.h”(2) 在⼯程的连接器设置中连接到ControlCAN.lib⽂件。
如:在VC7环境下,在项⽬属性页⾥的配置属性→连接器→输⼊→附加依赖项中添加ControlCAN.lib中间换了⼀台电脑,出现电脑丢失ControlCAN.dll的问题,将ControlCAN.dll拷到了可执⾏⽂件的⽂件夹中即可2、基本操作2.1 连接设备我这⾥每次连接都会重新开启接收数据的线程,创建⼀次接收数据的txt⽂档void CTest_OilDlg::OnBnClickedButtonConnect(){//⾸先判断CAN是否打开,,如果已经打开,则先复位及重启CAN--1.8//关闭程序前必须点击断开连接按钮,否则报错if(m_connect == 1){m_connect = 0;//isShow = 0;Sleep(500);GetDlgItem(IDC_BUTTON_CONNECT)->SetWindowTextW(_T("连接"));VCI_CloseDevice(m_deviceType,m_deviceIndex);showListInfo(_T("断开设备成功"));//结束⾃发⾃收测试的定时器KillTimer(0);//结束当前线程if(m_pThread != NULL){//::WaitForSingleObject(m_pThread->m_hThread,INFINITE);//该函数会造成死锁//https:///silvervi/article/details/5874212 将上⾯函数修改成如下,以避免上⾯函数阻塞对话框主线程的消息队列DWORD dwRet = 0;MSG msg;while(true){//等待处理数据线程结束,和等待消息队列中的任何消息dwRet = MsgWaitForMultipleObjects(1,&m_pThread->m_hThread,false,INFINITE,QS_ALLINPUT);//dwRet = WaitForSingleObject(m_pThread->m_hThread,50);switch (dwRet){case WAIT_OBJECT_0:break;case WAIT_OBJECT_0 + 1://get the message from Queue and dispatch it to specific windowPeekMessage(&msg,NULL,0,0,PM_REMOVE);DispatchMessage(&msg);continue;default:break;}break;}//CloseHandle(m_pThread->m_hThread);delete m_pThread;m_pThread = NULL;//不太懂}//关闭存储数据的⽂件for(int i = 0;i < 4;i++){//判断⽂件是否打开,若打开了关闭if(m_waveDataFile[i].m_hFile != CFile::hFileNull){m_waveDataFile[i].Close();}}GetDlgItem(IDC_BUTTON_START)->SetWindowTextW(_T("开始⼯作"));return;}//------------打开设置---------------------////设备类型m_deviceType = VCI_USBCAN2;//设备索引号,只有⼀个设备,索引号为0m_deviceIndex = 0;//第0路CAN--只有⼀路,⽤户选择CString canNum;m_selectCANNum.GetWindowTextW(canNum);m_canNumA = _ttoi(canNum);if(VCI_OpenDevice(m_deviceType,m_deviceIndex,0) != STATUS_OK)//m_deviceType:设备类型号;m_deviceIndex:设备索引号;最后⼀个是保留参数,⼀般为0 {MessageBox(_T("打开设备失败!",_T("警告"),MB_OK|MB_ICONQUESTION));showListInfo(_T("打开设备失败"));SetHScroll();return ;}else{showListInfo(_T("打开设备成功"));SetHScroll();}///-------------对CAN进⾏初始化------------------////对CAN进⾏初始化VCI_INIT_CONFIG init_config;init_config.AccCode = 0x00000000;init_config.AccMask = 0xffffffff;//表⽰全部接收,(全部接收,AccMask:0xffffffff;AccCode:0x00000000---这块可以通过测试软件中的滤波设置功能中计算)init_config.Mode = 0;//正常模式;1:表⽰只听模式(只接收,不影响总线)init_config.Timing0 = 0x00;init_config.Timing1 = 0x14;//相当于波特率1000kbpsif(VCI_InitCAN(m_deviceType,m_deviceIndex,m_canNumA,&init_config) != STATUS_OK){MessageBox(_T("初始化CAN失败!"),_T("警告"),MB_OK|MB_ICONQUESTION);VCI_CloseDevice(m_deviceType,m_deviceIndex);showListInfo(_T("初始化CAN失败"));SetHScroll();return ;}else{showListInfo(_T("初始化CAN成功"));SetHScroll();}m_connect = 1;GetDlgItem(IDC_BUTTON_CONNECT)->SetWindowTextW(_T("断开"));//创建存储数据的⽂件CTime time0 = CTime::GetCurrentTime();CString fileName = _T("WaveData");if(!PathIsDirectory(fileName)){::CreateDirectory(fileName,NULL);}fileName.Format(_T("WaveData/%d-%d %dh%dm%ds"),time0.GetMonth(),time0.GetDay(),time0.GetHour(),time0.GetMinute(),time0.GetSecond());if(!PathIsDirectory(fileName)){::CreateDirectory(fileName,NULL);}CString fileName0 = fileName;for(int i = 0;i < 4;i++){CString i0;i0.Format(_T("/%dth"),i+1);fileName = fileName0 + i0;fileName += _T(".txt");m_waveDataFile[i].Open(fileName,CFile::modeWrite|CFile::modeCreate|CFile::modeNoTruncate);//若⽂件存在,则清空}//开启接收数据的线程m_pThread = AfxBeginThread(ReceiveThread,this,0,CREATE_SUSPENDED,NULL);m_pThread->m_bAutoDelete = false;}2.2 接收数据UINT CTest_OilDlg::ReceiveThread(void *param){CTest_OilDlg *dlg = (CTest_OilDlg*)param;VCI_CAN_OBJ frameInfo[5000];//⼀次性从缓冲区获取50个帧VCI_ERR_INFO errInfo;int len = 1;//获取到的CAN帧的个数int i = 0;CString str,tmpstr;while(1){Sleep(1);if(dlg->m_connect == 0){break;}//获取缓冲区的长度int lenBuf = VCI_GetReceiveNum(dlg->m_deviceType,dlg->m_deviceIndex,dlg->m_canNumA);//获取到的数据的个数,如果缓冲区⼤于5000,则取出5000,否则将缓冲区全部取出len = VCI_Receive(dlg->m_deviceType,dlg->m_deviceIndex,dlg->m_canNumA,frameInfo,5000,400);//每次从缓冲区获取50帧,等待200ms⽆响应后结束if(len <= 0){//注意:如果没有读到数据则必须调⽤此函数来读取出当前的错误码//千万不能省略这⼀步(即使你可能不想知道错误码是什么)DWORD error = VCI_ReadErrInfo(dlg->m_deviceType,dlg->m_deviceIndex,dlg->m_canNumA,&errInfo);//返回值为1 表⽰操作成功if((errInfo.ErrCode & 0x0000) == 0x0000){//表⽰错误码是0x0000}}else{for(i = 0;i < len;i++){str = _T("数据:\n");if(frameInfo[i].DataLen > 8)frameInfo[i].DataLen = 8;//原始数据----但是这⾥没有保存for(int j = 0; j < frameInfo[i].DataLen;j++){tmpstr.Format(_T("%04x \n"),frameInfo[i].Data[j]);str += tmpstr;}::SendMessage(dlg->GetSafeHwnd(),WM_WAVEFORM,WPARAM(&frameInfo[i]),NULL);//TRACE(_T("receive\n"));}}}return0;}这⾥的数据处理是通过发送⾃定义消息的⽅法实现的,因为这些数据同时也要画成曲线显⽰在界⾯上,需要对界⾯进⾏更新操作,这时候需要给界⾯的主线程发消息去实现界⾯更新2.3 发送数据void CTest_OilDlg::OnBnClickedButtonSend(){//-----------------发送井下仪器⼯作模式命令-------------------//if(m_connect == 0)return ;VCI_CAN_OBJ frameInfo;//设置发送重发超时时间,建议不⼩于1500ms,默认4000msVCI_SetReference(m_deviceType,m_deviceIndex,m_canNumA,4,&m_sendTimeout);frameInfo.ID = 0x84444444;//需要再确定frameInfo.SendType = 0;//正常发送frameInfo.RemoteFlag = 0;//数据帧frameInfo.ExternFlag = 1;//扩展帧frameInfo.DataLen = 3;//⼀个字节frameInfo.Data[0] = 0x04;frameInfo.Data[1] = 0xff;//01仪器待机;02:仪器⾃检;03:仪器定时开关机;04:仪器测试;05:仪器连续⼯作frameInfo.Data[2] = m_selectMode.GetCurSel() + 1;int ret = VCI_Transmit(m_deviceType,m_deviceIndex,m_canNumA,&frameInfo,1);if(ret == 1){showListInfo(_T("命令发送成功"));SetHScroll();}else{showListInfo(_T("命令发送失败"));SetHScroll();}}View Code3、问题做到现在,程序⾃发⾃收可以,接收下位机数据能接受5个左右的循环就接不到了,后来把数据的操作都屏蔽掉,只接收,发现也接不到,缓冲区内的数据个数为0.这个问题还没解决。
USB应用与开发
a=val(str) 这段程序代码执行后a的值为整数457
画正弦波
串口操作
右键单击工具箱 空白处,选择部件
双击窗体, 进入程序初 始化程序编
输入 输入 输出 输出 输出 输入 输入 输入 0x38 0 0 0 1 0 0 0 0 0x10
打 下印 载机 线接
口
用C语言开发的第一个程序
让实验板上中间的 LED 发光
#include <mega8> main() {
DDRC = 0x38; PORTC =0x10; while(1); }
RS-232-C传输的数据格式
一帧包含以下信息
一位起始位,以发送一个逻辑“0”表示 n位数据位(n=5,6,7,8),先发送数据最低位 一位奇偶校验位(可有可无) 一位至两位停止位,以逻辑“1”表示 例:画出8个数据位 11110000,无校验位,一 位停止位的时序图。
闲
起
停
始
数
止
置
位
据
位
异步串行通讯的波特率
USB接口特点
稳定、便宜、高速(480Mbits/s) 协议规范(USB1.0 USB2.0) 可通过集线器扩展其接口数量 自带5V电源(在小于500mA的情况下使用) 操作系统的支持(W98以上) 外围设备的支持(例如CP2102)
缺点:协议的复杂性
USB接口开发步骤
1、初步决策
USB
PC机
数据交换
是指美国电子工业协会(EIA)正式公布的标准 标准规定了串口的电气连接方式和数据格式 采用标准的25针接口 PC机上有一个9针接口,是该标准的一个子集
基于Labview的USB接口上位机设计
基于LabVIEW的USB接口上位机设计一、数据传输USB模块1.1概述CH375是一个 USB总线的通用接口芯片,支持USB-HOST 主机方式和 USB-DEVICE/SLAVE 设备方式。
在本地端,CH375 具有 8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机/DSP/MCU/MPU 等控制器的系统总线上。
在USB 主机方式下,CH375还提供了串行通讯方式,通过串行输入、串行输出和中断输出与单片机/DSP/MCU/MPU 等相连接。
CH375 的 USB 设备方式与 CH372 芯片完全兼容,CH375 包含了 CH372 的全部功能。
本手册中没有提供CH375在USB设备方式下的说明,相关资料可以参考 CH372 手册CH372DS1.PDF。
CH375的 USB主机方式支持常用的USB全速备,外部单片机可以通过CH375按照相应的 USB 协议与 USB 设备通讯。
CH375 还内置了处理 Mass-Storage 海量存储设备的专用通讯协议的固件,外部单片机可以直接以扇区为基本单位读写常用的USB 存储设备。
1.2特点●低速和全速USB-HOST 主机接口,兼容USB V2.0,外围元器件只需要晶体和电容。
●低速和全速USB设备接口,完全兼容 CH372 芯片,支持动态切换主机与设备方式。
●主机端点输入和输出缓冲区各64字节,支持 12Mbps 全速 USB 设备和 1.5Mbps 低速设备。
●支持USB 设备的控制传输、批量传输、中断传输。
●自动检测USB设备的连接和断开,提供设备连接和断开的事件通知。
●内置控制传输的协议处理器,简化常用的控制传输。
●内置固件处理海量存储设备的专用通讯协议,支持 Bulk-Only传输协议和 SCSI、UFI、RBC 或等效命令集的USB存储设备(包括 USB 硬盘/USB 闪存盘/U 盘/USB 读卡器)。
●通过U 盘文件级子程序库实现单片机读写USB 存储设备中的文件。
STM32自定义USB设备开发详细流程讲解及全套资料源码下载
11
0xE0,
/* bmAttributes: Bus powered */
12
/*Bus powered: 7th bit, Self Powered: 6th bit, Remote wakeup: 5th bit, reserved: 4..0 bits */
13
0xFA,
/* MaxPower 500 mA: this current is used for detecting Vbus */
10 {
11
CUSTOMHID_SIZ_STRING_VENDOR, /* Size of Vendor string */
12
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType*/
13
// Manufacturer: "STMicroelectronics"
03 {
04
CUSTOMHID_SIZ_STRING_LANGID,
05
USB_STRING_DESCRIPTOR_TYPE,
06
0x09,
07
0x04
08 }; /* LangID = 0x0409: U.S. English */
09 const uint8_t CustomHID_StringVendor[CUSTOMHID_SIZ_STRING_VENDOR] =
18
0x00,
/* bInterfaceNumber: Number of Interface */
19
0x00,
/* bAlternateSetting: Alternate setting */
20
STM32自定义USB设备开发详细流程讲解及全套资料源码下载
25
/******************** endpoint descriptor ********************/
26
/* 18 */
27
0x07,
/* endpoint descriptor length = 07H */
28
USB_ENDPOINT_DESCRIPTOR_TYPE, /* endpoint descriptor type = 05H */
03 {
04
CUSTOMHID_SIZ_STRING_LANGID,
05
USB_STRING_DESCRIPTOR_TYPE,
06
0x09,
07
0x04
08 }; /* LangID = 0x0409: U.S. English */
09 const uint8_t CustomHID_StringVendor[CUSTOMHID_SIZ_STRING_VENDOR] =
USB_ENDPOINT_DESCRIPTOR_TYPE, /* endpoint descriptor type = 05H */
41
0x82,
/* endpoint 2 IN */
42
0x02,
/* bulk transfer = 02H */
43
0x40,0x00, /* endpoint max packet size = 0040H */
22 uint8_t CustomHID_StringSerial[CUSTOMHID_SIZ_STRING_SERIAL] =
23 {
24
CUSTOMHID_SIZ_STRING_SERIAL,
USB开发基础:USB设备的开发流程
USB开发基础:USB设备的开发流程
USB设备的开发一般包括主机端(上位机)驱动程序的开发(如果您的USB设备符合某一标准设备类且主机端已经提供了此类设备的驱动程序的话,则可以省掉此步骤)和USB设备端驱动程序的开发,有时还可能包括主机端
应用程序的设计工作。
1、设备系统需求分析
设备系统需求分析是进行USB设备设计的第一步,通过对USB设备功能特性和USB主机端操作系统的分析,可以获得实现该USB设备的软硬件设计需求。
在该阶段,设计者需要充分了解该设备的应用环境(如USB主机的软件、
硬件平台),这样以用来确定是否需要提供USB主机端相关软件工作,以便该设备能得到广泛地应用。
为了提供合理的软硬件设计方案,设计者还需要充分了解市场上的USB接口芯片,不同的USB接口芯片在USB协议上有着不同程度的支持,比如,对数据包地址的硬件自动识别、CRC16和CRC5的自动生成等等。
当然,在确定具体的软硬件需求时,产品的开发费用和开发周期也是必须考虑的因素。
2、设备硬件需求
通过设备系统需求分析,以及对市场上USB接口芯片的充分了解,设计者
必须确定相应的设备硬件结构以及可能采用的硬件。
在选择器件时,需要考虑到器件体积、功耗等,因为,小的设备功耗,有利于采用总线供电模式。
必须通过设备系统的功耗来确定是否需要提供本地电源。
3、设备软件需求
在确定了设备的硬件结构以后,该设备的软件结构就会同时产生。
不同的硬。
stm32的USB自定义HID与上位机通信
stm32的USB⾃定义HID与上位机通信简介1.由来通常我们使⽤stm32与pc通信的⽅式分为⽆线和有线,⽆线⽅式⽤wifi或蓝⽛模块,我使⽤过程中⼀直⽆法接受这样的连接因为这样很不稳定,常常需要重启下位机或者上位机重新连接。
⽽有线⽅式我们会⽤到URAT,或是USB的虚拟串⼝,这两种⽅式中UART需要再接CH340类似的模块,并且两种⽅式都需要pc安装驱动。
于是我打算做⼀个不需要转接模块,也不需要上位机额外安装驱动的基于USB-HID的连接通信。
2.⼯具1.硬件采⽤stm32F407ZGT6的usb外设,做从机,使⽤⾃定义HID类。
2.软件使⽤stm32cubeide⽣成代码编写业务代码,上位机配置java环境,使⽤java的JNA技术调⽤系统HID接⼝驱动HID设备。
3.注意1.stm32的usb外设可选⾼速的USB2.0,和全速的USB1.0,由于stm32F4不⾃带usb的⾼速PHY,使⽤⾼速模式需要外接USB3300之类的模块,这⾥我们不要求通信速度,于是使⽤全速模式。
usb集线器向下兼容,全速模式可接⼏乎所有的usb扩展⼝。
B主机在D+,D-线都会接15k的下拉电阻,⽽USB全速模式的从机需要在D+线上接1.5k的上拉电阻,USB集线器正是通过差分线的上下拉状态来选择与设备通信⽅式的,也可以解决热拔插的问题。
使⽤时需要检查开发板原理图是否有上拉,⼀般购买的开发板都会做好这些,⽤⼀个GPIO打开开关管即可实现上拉。
下位机实现1.cubeide代码⽣成⾸先创建项⽬,在内置的cubemx配置中,SYS下配置debug⽅式,可以是swd或jtag,这取决于硬件连接。
使能内外部晶振,配置时钟树,主频在168Mhz,usb外设48MHz。
在project manager中勾选以.c/.h为外设⽣成⽂件。
开启usb外设,作为从机,选择device_only,配置参数默认即可。
开启中间件USB_DEVICE,选择usb类为⾃定义HID(custom HID),BINTERVAL为响应主机发送数据的延时时间,尽量越⼩越好。
我在做usb上位机驱动过程中做的笔记VC6+DDK xp+DS3.2
我在做usb上位机驱动过程中做的笔记驱动程序安装成功后,应用程序的设计VC6+DDK xp+DS3.2驱动程序安装好后,应用程序要通过安装的驱动程序与设备的通信,但是应用程序怎么才能找到对应用的驱动程序呢?通过设备的GUID找到设备路径。
在windows操作系统环境下,设备通常被当作特殊文件处理。
要打开设备,就要知道该设备的路径,要找到设备的路径,要使用GUID来查找。
设备在安装时,windows安装器和相应设备的驱动程序负责将相应的设备与对应的GUID联系起来,并将GUID写入注册表,这样通过GUID(接口类GUID)就可以找到对应设备。
对于HID设备,因为它的驱动已经集成在操作系统中,在同一系统中GUID是一样的,但通常这个值在不同的系统下也许会不一样所以一般不直接使用这个GUID,而是使用一个API函数来获取(函数是void _stdcall HidD_GetHidGuid(Out LPGUID HidGuid)). 而我们自己做的嵌入式设备,因为驱动是自己写的,所以GUID肯定不一样,而且这个GUID不会因为设备用在不同的操作系统上而改变,因为这个GUID在生成设备驱动的时候已经生成,就对应这个设备了,这个设备类GUID可以在每个驱动的interface.h文件中看到。
我们就是要用这个文件中的GUID宏定义来查找已连接上设备,把系统中查到的设备列举出来,然后检查它的VID,PID以及设备版本号,看是不是要访问的设备,如果是,就可以对设备进行各种操作了,不是的话就循环下一个设备,直到找到或遍历完为止。
1.下面这个函数用来获取所有与ClassGuid指定的GUID相同的设备,当然对于HID设备在同一个pc机上可能会检测到多个,但是我们自己做的嵌入式设备,一般都是一个,要找到我们要的设备通过VID,PID以及设备版本号。
该函数返回HDEVINFO句柄,这个句柄指向ClassGuid指定的所有设备的一个信息集合。
USB开发手册
PowerPC and and the PowerPC logo are trademarks of International Business Machines Corporation, used under license therefrom. Simultaneously published in the United States and Canada.
Chapter 2
Working With USB Device Interfaces 21
Using USB Device Interfaces 21 Accessing a USB Device 22 Definitions and Global Variables 23 The main Function 23 Working With the Raw Device 26 Working With the Bulk Test Device 30 Working With Interfaces 32
Chapter 2
Working With USB Device Interfaces 21
Listing 2-1 Listing 2-2 Listing 2-3 Listing 2-4 Listing 2-5 Listing 2-6 Listing 2-7 Listing 2-8 Listing 2-9 Definitions and global variables 23 The main function 24 Accessing and programming the raw device 26 Releasing the raw device objects 28 Configuring a USB device 28 Two functions to download firmware to the raw device 29 Accessing the bulk test device 31 Finding interfaces on the bulk test device 32 Two asynchronous I/O completion functions 36
上位机编程实现与USB—HID设备通信
上位机编程实现与USB—HID设备通信【摘要】在上位机中,通过人机交互界面,利用Windows提供的API函数,实现应用程序对HID设备的访问。
指出调用API函数的过程和方法,并提供了实现方法的具体实例。
【关键词】上位机;USB_HID;Visual C++;人机接口设备1.引言USB全称为Universal Serial Bus(通用串行总线),是一种快速、灵活的总线接口。
在USB出现之前,计算机接口在传输速度方面都存在速度偏低,容易产生I/O冲突,中断不够用等缺点。
人机接口设备(HID)主要是指一些人与计算机进行交互的设备,如键盘、鼠标、游戏杆等;但是HID设备不一定非要是这些人机交互设备,只要符合HID 设备定义规范要求的都可以认为是HID设备。
HID设备有以下主要特点:(1)交换的数据存储在报告的结构内,设备必须支持HID报告格式。
(2)每笔事务可以携带小量或中量的数据。
低速设备每笔事务最大为8字节,全速设备每笔最大为64字节,高速设备最大为1024字节;(3)有最大传输速度的限制。
低速设备最快10ms一笔事务,最高速度为800B/s;全速设备最快1ms一笔事务,最高速度为64KB/s;高速设备最快125μs 一笔事务,最高速度为24.576MB/s。
如何在应用程序中对HID类设备进行访问呢?在Windows环境下,不允许用户在应用程序中直接访问硬件设备,应用程序必须通过一个中间桥梁才能访问硬件设备,这个中间桥梁就是设备驱动程序。
从Windows98操作系统开始,为HID类设备提供了通用的驱动程序,所以只要按照HID设备类的规范编写设备的固件程序,就能够让Windows系统自动识别设备,省去了复杂的驱动程序编写过程。
2.Visual C++介绍应用基于MFC AppWizard的应用程序。
MFC(Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
USBCPLD开发板使用手册
第二版USB CPLD 开发板使用手册一、开发板简介简介:板载大容量ALTERA MAXII 系列CPLD芯片EPM1270,和USB2.0 高速CY7C68013A 芯片和ISSI61V25616 SRAM存储器,构成完美的逻辑和数据传输系统。
CPLD的所以管脚全部引出,而且在板子丝印层上全部标出管脚的编号,方便实际使用。
68013芯片外部扩展了大容量的24LC64 EEPROM存储芯片,足够CY7C68013A用于存储程序。
CPLD的管脚大部分都已经扩展出去,排针上扩展了80个IO口,足够与外部其他板卡连接。
第二版在设计上比第一版更加完善。
板上主要芯片:USB芯片:CY7C68013A-56PVXCALTERA MAXII CPLD : EPM1270T144C5NEEPROM芯片:24LC64CPLD外扩SRAM存储器:ISSI61V25616-103.3V电源LDO:ASM1117-3.3有源时钟:48MHZ全钽电容电源滤波本电路板适合人群:1.学习USB2.0通信技术的开发者2.学习CPLD学习开发者3.高速数据采集开发应用者4.8051单片机学习者二、CY7C68013与EPM1270连接管脚定义表三、其它管脚定义说明1.板卡背面有源晶振连接CPLD PIN 20 时钟输入管脚。
2.两个LED灯连接CPLD PIN27,PIN28管脚,在板子的丝印层已经标出。
3.EEPROM相关R8是给EEPROM 的A0脚上拉,R9是给A0脚下拉,我们板子上使用24LC64芯片,所以焊接R8,针对24LC00,24LC02,24LC04芯片,请去掉R8电阻,将R9短路。
P4的4个针脚是IIC总线的信号线,我们将3,4短路,则EEPROM连接至IIC总线上,如果断开,则跟总线断开。
1,2脚分别是IIC总线的SCL,SDA信号。
使用的时候,如果你将板卡的EEPROM里面烧写了数据,不能被EZUSB CONTROL PANNEL识别,那么请将3,4断开,安装EEPROM恢复步骤来擦除24LC64里面的内容。
usb开发指导内部资料
USB开发指导内部资料Version 2.0北京中天致远科技有限公司 未经本公司书面许可,不得翻印拷贝分发该资料,版权所有,违者必究上篇 知识篇第一部分 USB协议第二部分 硬盘结构与文件系统下篇 应用篇第三部分 系统架构第四部分 编程手记第五部分 客户问答第二部分 硬盘结构与文件系统第10章 磁盘结构与FAT文件系统FAT 文件系统的组织结构1. 软盘数据的逻辑存储软盘无须低级格式化和分区操作,只需用FORMAT 命令做高级格式化即可。
经过格式化操作之 后,系统将在软磁盘上建立以下的数据结构:(1) 引导记录(DBR):位于0 面0 道1 扇区,说明磁盘结构信息。
(2) 文件分配表(FAT):用于记录磁盘空间的分配情况,指示硬盘数据信息存放的柱面及扇区的信息指针。
其表项可以是以下四种表示方式之一:A.一个数字,代表指向另一个簇的指针。
B.数字0,表示一个未使用的簇C.一个坏扇区标记D.文件结束标记符EOF(3) 文件根目录表FDT:一个指示以存入数据信息的索引。
记录磁盘上存储文件的大小,位置,日期和时间等数据。
(4) 数据区:存放数据信息。
2. 硬盘中的数据组织刚刚从厂商处购来的新硬盘既无任何数据,也不能写入任何数据,必须先进行低级格式化,FDISK 分区,FORMAT 高级格式化后方可使用。
对硬盘的这一系列初始化工作,称之为 硬盘准备。
过程如下:低级格式化---------------FDISK 分区-------------------FORMAT 高级格式化(1)低级格式化:对硬盘划分磁道和扇区,在扇区的地址域上标注地址信息,并剔出坏磁 道。
(2)FDISK:允许整个物理硬盘在逻辑上划分成多个分区(最多4 个),以实现多个操作系 统共享硬盘空间。
如果将整个物理盘全部划归DOS/WINDOWS 管理,则FDISK 分区的作用是将一 个物理盘划分一个主分区和一个扩展分区,然后再将扩展分区划分成一个或多个逻辑盘。
SoEZ-USB开发板使用说明(必读)
SoEZ-USB开发板使⽤说明(必读)CY7C68013A 开发板使⽤说明顾客您好,很荣幸您能选购本开发板,在您使⽤本开发板前,请先阅读此使⽤说明。
⼀、开发板介绍1、本开发板采⽤EZ-USB FX2LP系列的CY7C68013A-100AXC芯⽚:内带增强型8051内核,主频48Mhz,16KB的RAM,480Mbps⾼速传输协议标准,符合USB2.0规范,向下兼容USB1.1;2、完整的在线仿真调试⽅案,通过全窗⼝化开发环境Keil,不需要仿真器只需要⾃带的串⼝就能进⾏仿真调试,对于学习者来讲是个福⾳(注:本开发板已经集成串⼝转换芯⽚,可以直接通过串⼝线连接PC机进⾏仿真,极⼤的⽅便⼤家使⽤)。
3、完整的在系统编程⽅案,板载提供16K字节(24LC128)⼤容量程序存储器(EEPROM),⽤做存放VID/PID或USB固件,满⾜CY7C68013A 16KB内存的程序空间需求;4、板载标准40pin A TA(IDE)插座,利⽤该芯⽚的GPIF技术,实现(IDE 硬盘)移动硬盘功能。
5、所有的IO⼝均经过2.54mm标准排针引出来,同时排针有引出3.3V和5V电源,地线,极⼤的⽅便学习者⾃⾏扩展设计;6、提供⼤量实验⼯程(均在本开发板上验证过)如:端点批量环路测试、上位机控制按键和数码管、基于HID的USB键盘⿏标、EZ_Loader固件下载驱动程序设计、内存测试等;7、⽀持GPIF及slave FIFO⾼速通信模式⼆、硬件资源1、CY7C68013A-100AXC主芯⽚;2、24LC128 16KB的EEPROM;3、板载24MHZ晶振;4、各种短路端⼦5、RS-232转换模块,只需⼀根串⼝线即可完成仿真6、2个连接到GPIO按键;7、USB芯⽚上电复位模块;8、5个LED;9、⼀个A TA接⼝可接A TA/A TAPI设备,如硬盘、光驱等;(本开发板提供相应驱动)10、总线供电电源转换模块11、外扩IO接⼝三、开发板图解图2、EZ-USB 开发板图解(1)IDE 硬盘接⼝:连接普通IDE 硬盘,以实现移动硬盘功能。
串口USB接口的上位机软件设计
II
重庆大学本科学生毕业设计(论文)
目录
目录
摘
要 .................................................................................................................................... I
2.3.2 USB2.0 接口特点 .................................................................................................... 7
2.4 方案的选取 ....................................................................................................................... 8
This paper is based on Visual Studio 2010 platform, on c # language for the upper machine software developing design; and it is based on Keil2 for the firmware design of CY7C68013A chip, which achieves the configuration of USB chip and upper machine for communications; and Based on Visual Studio C++6.0 and DriverStudio , which helps to design out the USB driver for CY7C68013A. Thereby they make host computer and lower machine communicate successfully.
(简易USB驱动)开发指导
实验七(2)设备驱动开发指导块设备种类多,使用广泛,其驱动程序的开发也比字符设备复杂。
通过本实验,大家要开发一个实际块设备(U盘)的驱动程序,将能够更深入地掌握块设备驱动程序的开发方法。
Linux下已经有一个通用的U盘驱动程序usb-storage.o,其源程序放在目录drivers\usb\storage下(相对于内核源码根目录)。
但这个驱动的实现相当复杂,本实验希望开发一个相对简单些的U盘驱动程序,不求高性能,只求结构明朗、清晰易懂,主要是让大家掌握一个实际块设备的驱动方式,从而加深理解。
事实上,本实验开发的驱动程序应该能够适用于所有基于Bulkonly传输协议的USB大容量存储设备(USB Mass Storage),比如USB移动硬盘和USB外置光驱,USB闪存盘(U 盘)只是其中的一种。
由于USB大容量存储设备具有容量大、速度快、连接灵活、即插即用、总线供电等优点,它们得到了广泛使用,掌握这类设备驱动程序的开发技术无疑具有很强的实用性。
实验内容编写一个U盘驱动程序myudisk,只要求能够驱动某个型号的U盘,能够支持U盘的常规操作,如命令hexdump、mke2fs和mount等。
同时,要求在系统内核日志中显示出U盘的容量。
若有余力,可增加多分区支持功能。
实验基础和思路在教材中P130,讲解了如何编写一个Ramdisk块设备驱动程序(sbull.c),称为radimo;在文献《Linux Device Drivers》讲解了如何编写一个USB设备驱动程序,并以Linux源代码中的usb-skeleton.c为例。
虽然前者驱动的并不是一个实际的块设备,且后者又只是针对usb字符设备,但是它们提供了一个不错的基础,通过合并我们就能基本得到一个支持usb块设备的驱动程序。
之所以说基本得到,是因为合并后只是有了块设备、USB设备的驱动支持框架,但还缺一样:对U盘(USB块设备)的实际访问操作。
STM32之USB固件升级 IAP USB程序升级 上位机软件操作
STM32之USB固件库IAP升级(以下全部为实际操作所得)最近做了STM32通过USB程序升级功能,也就是所谓的DFU,所使用的程序为ST公司提供的例子程序(位置为:安装目录/ARM/Examples/ST/STM32F10xUSBLib/Demos/Device_Firmware_Upgrade),此文件夹包含多两个工程,project文件夹存放的是用来升级的程序-IAP,binary文件夹存放的是用户程序—APP。
一、USB升级程序打开Project里面的工程(用什么软件打开就不用我讲了吧),如果你电脑上有Source Insight就更好了,方便查阅。
从MAIN里面我们可以知晓,程序先判断某个按键是否按下(这个可以根据你的实际电路设计来修改),如果按下则进入升级功能程序,否则就跳转到APP程序,也就是用户程序。
不多说了,直接上程序。
i f (DFU_Button_Read() == 0x00)//如果未按下1{ /* Test if user code is programmed starting from address 0x8003000 */if (((*(vu32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) 2{ /* Jump to user application */JumpAddress = *(vu32*) (ApplicationAddress + 4); 3Jump_To_Application = (pFunction) JumpAddress; 4/* Initialize user application's Stack Pointer */__MSR_MSP(*(vu32*) ApplicationAddress); 5Jump_To_Application(); 6}} /* Otherwise enters DFU mode to allow user to program his application */1、判断按键是否按下,如果未按下,则准备进入用户程序区,是准备哦,因为后面还有判断语句。
USB设备应用开发套件 для Windows Embedded CE 6.0 用户指南说明书
USB Device Application Kit for WindowsEmbedded CE 6.0User's ManualDigi document reference number: 90000926_A© Digi International Inc. 2008. All Rights Reserved.The Digi logo is a registered trademark of Digi International, Inc.All other trademarks mentioned in this document are the property of their respective owners. Information in this document is subject to change without notice and does not represent a commitment on the part of Digi International.Digi provides this document “as is,” without warranty of any kind, expressed or implied, including, but not limited to, the implied warranties of fitness or merchantability for a particular purpose. Digi may make improvements and/or changes in this manual or in the product(s) and/or the program(s) described in this manual at any time.This product could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes may be incorporated in new editions of the publication.Digi International Inc.11001 Bren Road EastMinnetonka, MN 55343 (USA)+1 877 912-3444 or +1 952 912-34442Contents1Introduction (6)1.1Features (6)2Requirements (7)2.1BSP requirements (7)2.2Microsoft Windows® CE OS Configuration (7)3Installation (9)4Integration (10)4.1Integration overview (10)4.2Integration process (10)4.3Driver starts (12)5Using the USB Device functionality (13)5.1Serial USB Function Client (13)5.2Mass Storage USB Function Client (17)6Uninstallation (18)3USB Device Application Kit for Windows Embedded CE 6.0 - User's Manual4Conventions used in this manualHere is a list of the typographical conventions used in this manual:StyleNew terms and variables in commands, code, and other input. Style In examples, to show the contents of files, the output fromcommands. In, text the C code.Variables to be replaced with actual values are shown in italics.Style For menu items, dialogs, tabs, buttons, and other controls.In examples, to show the text that you enterMenu name > optionA menu followed by one or more options; for example, File >New.This manual also uses these frames and symbols:This is a warning. It helps solve or avoid common mistakes or problems.This is a hint. It contains useful information about a topic.> This is a host computer session> Bold text indicates what must be entered .> This is a target session > Bold text indicates what must be entered .USB Device Application Kit for Windows Embedded CE 6.0 - User's Manual5AbbreviationsASCIIAmerican Standard Code for Information Interchange CPUCentral Processing Unit ESD Electrostatic DischargeGPIO General Purpose Input/Output OS Operating SystemPC PersonalComputer RAMRandom Access Memory ROOTFSRoot File System TFTPTrivial File Transfer Protocol TTY TeletypewriterUSBUniversal Serial BusUSB Device Application Kit for Windows Embedded CE 6.0 - User's Manual1IntroductionThe USB Device Application Kit is a product that brings the USB Device physical interface to your Digi Development board or JumpStart board.The USB Device Application Kit hardware board connects to the Development or JumpStart board via the USB Application Header and the provided 16-pin flat cable. It basically mounts a USBPHY and USB B female connector.The USB Device Application Kit software contains the driver needed to support the USB DeviceController in a Microsoft Windows® Embedded CE 6.0 OS Design.This User's Manual assumes that the reader is able to create, compile and download a kernel image.1.1FeaturesThe following are the main features of the USB Device Application Kit:•USB 2.0 Full Speed (Low speed not supported)•Board is powered from Development or JumpStart board•Operation modes: serial and mass storage,•±15kV ESD protection6USB Device Application Kit for Windows Embedded CE 6.0 - User's Manual2RequirementsHost System requirementsThe development system has to meet the following requirements:•x86 PC with 500 MHz Pentium III or faster processor; 2 GHz Pentium 4 or equivalent recommended•Microsoft Windows® 2000 Professional with Service Pack 4 or Windows XP Professional with Service Pack 1.•Microsoft Windows® CE 6.0 with Service Pack 1 installed and updates•Serial port•Ethernet network card2.1BSP requirementsDisplay interface support recommended for development purposes, but not required.2.2Microsoft Windows® CE OS Configuration2.2.1Required componentsGo to the Catalog and expand Device Drivers > USB Function > USB Function Clients.Then include this element:USB Function Clients:• Mass Storage• serialWhen using ActiveSync the components from Core OS > CEBASE > Applications – EndUser > ActiveSync must be included into the Windows CE project.Then include this element:ActiveSync:• File SyncFurthermore, the component from Core OS > CEBASE > Communication Services andNetworking > Networking – Wide area Network (WAN) must be included into the Windows CE projectThen include this element:Telephony API (TAPI 2.0):•Unimodem Support7USB Device Application Kit for Windows Embedded CE 6.0 - User's Manual2.2.2Recommended catalog componentsOther recommended networking utilities and services are:Core OS > CEBASE > Communication Services and Networking: • Networking Generalo Network Utilities• Serverso FTP Servero Telnet Server8USB Device Application Kit for Windows Embedded CE 6.0 - User's Manual93 InstallationThis release is installed by executing Setup.exe.The installer wizard will guide you in all required steps.After installation has finished, the following components will be on your PC:%ProgramFiles%\Digi\AppKits\USB_Device_AppKit :• Uninstaller : Executable to uninstall this release.• Release Notes and License Agreements.%_WINCEROOT%\OTHERS\Digi\AppKits\USBFN\src\driver:• Sources of the driver.%ProgramFiles% is an environment variable of your system that provides the path to your Program Files directory (usually C:\Program Files)%_WINCEROOT% is an environment variable of your system that provides thepath to your Microsoft Windows® CE root directory (usually C:\WINCE600).USB Device Application Kit for Windows Embedded CE 6.0 - User's Manual4Integration4.1Integration overviewThe USB Device Application Kit integration described in this chapter assumes that you havealready performed the following steps. These steps are fairly general as they are highly dependant on the customer BSP and the Microsoft Windows® CE version used:Before completing these steps, you will need to have the following applications already installed: •Windows Embedded as described in Chapter 2, and• a BSP corresponding with the hardware that will be used.4.2Integration processThe source code of the driver is also available and can be integrated into a Windows Embedded CE6.0 project as a subproject of it.After you have completely built your Project,it’s time to add a new subproject for theUSB_Device_AppKit Module.Open the Solution Explorer and right-click over the Subprojects. Choose Add ExistingSubproject:Navigate to %_WINCEROOT%\OTHERS\Digi\AppKits\USBFN\src\driver directory and select USBFN.pbpxml:10Now you can see the parameter files and the source files.Right click over USBFN and select Rebuild and then right click over the project and select Make Run-Time Image.The driver build should be rebuilt and included in the final nk.bin image, together with the necessary registry entries.4.3Driver startsVerify that the ns9360_usbfn.dll is inside the new image and that the correct registry entries are placed in the final registry file (reginit.ini).Once the project has been built, download it to the target device and start it up.If you have the USB Device Application Kit connected to the peripheral application header of the target, it should be automatically detected, and you should see a console message similar to thefollowing:[UfnPdd_Init]: Loading USB Device Driver… OK.More information may be shown depending on the debug level established in thedriver.In the console an error message will show up telling that an IOCTL isn’tsupported by the driver. That message can be ignored because that IOCTL onlyreceives some interface information that are not important to the functionality ofthe driver5Using the USB Device functionalityThe USB Device driver provides the functionality upon which the USB function client driverswork. The USB function client drivers implement one or more "functions", each providing adifferent capability to the USB host. In this document we'll see two of these function client drivers: •Serial USB Function Client•Mass Storage USB Function Client5.1Serial USB Function ClientFor both serial profiles standard serial support is necessary within the Windows CE image. Thatcomponent can be found at Core OS > CEBASE > Core OS Services > Serial PortSupport.5.1.1Selecting the ActiveSync profileMake the following change in your USBFN.reg file, you need to uncomment the Serial_Class and comment the rest (“;”).[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers];"DefaultClientDriver"="Mass_Storage_Class""DefaultClientDriver"="Serial_Class";"DefaultClientDriver"="USBSER_Class"Now you can build the project with the profile selected.Right click over USB_Device_AppKit and select Rebuild and then right click over the project and select Make Run-Time Image.5.1.2Using the profile for ActiveSyncOn the PC side (Host) ActiveSync 4.x or higher must have been installed previously.To use ActiveSync some additional components are necessary. Refer to chapter2.2.1 and include the listed components.If the components have been includedafter building the project a SYSGEN must be done again.After building and deploying successfully the Windows CE image a ActiveSync connection might be necessary to be created on the target side. This is only necessary if more than one serial port is enabled on the target device.Following the steps that are necessary to create on the target side a new direct connection that can be used later by ActiveSync.From the Start menu select Settings -> Network and Dial-up Connections and create a new Direct Connection selecting the Make New Connection option. Select on the next page the serial port that was setup by the system for the USB function interface and close the dialog. The information on the following picture is only an example and that value might be different on other platforms.Now the new connection to use the USB function driver is created. The next step is to use that connection as the default configuration for ActiveSync. Select from the Start menu Settings -> Control Panel and open the PC connection item.Click on the Change button and select the new created direct connection from the list of available connections. Confirm both dialogs with OK and now when connecting the USB function device to the PC ActiveSync should automatically start.5.1.3Selecting the Serial profileMake the following change in your USBFN.reg file, you need to uncomment the Serial_Class and comment the rest (“;”).[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers];"DefaultClientDriver"="Mass_Storage_Class";"DefaultClientDriver"="Serial_Class""DefaultClientDriver"="USBSER_Class"Now you can build the project with the profile selected.Right click over USB_Device_AppKit and select Rebuild and then right click over the project and select Make Run-Time Image.5.1.4Using the Serial profileWhen using the serial profile no additional components are necessary to expose a serial port to the Host.On the PC side (Host) the standard USB serial driver (usbser.sys) need to be installed. Afterbuilding and deploying successfully the Windows CE image connect the USB cable with the device connector to the target and with the host connector to a PC or Laptop. The first time the host willinstall the corresponding driver and the device will be available for use. In the Device Manager the COM number assigned to the serial port can be found and normal serial communication can beused between the target and the connected PC.5.1.5Installing the USB Serial driver under WindowsIn case the USB serial driver isn’t installed on the used Windows machine the usbser.sys file comes with various versions of Windows. It can be found on Windows XP typically inC:\WINDOWS\Driver Cache\i386\driver.cabWhen the generic serial driver is loaded and the USB device connected to the Windows host with a USB cable, Windows should recognize the generic serial device and ask for a driver. IndicateWindows to find the driver in the folder that contains usbser.inf and usbser.sy s.The usbser.inf is included in the Kit as an example and can be found atC:\Program Files\Digi\AppKits\USB_Device_AppKit\infOn Windows XP, when the generic serial device is first plugged in, the "Found New HardwareWizard" starts up. Select "Install from a list or specific location (Advanced)", on the next screen select "Include this location in the search" and enter the path or browse to the folder containingusbser.inf and usbser.sys.Windows will complain that the Generic Serial driver has not passed Windows Logo testing, but select "Continue anyway" and finish the driver installation. In the "Device Manager" (under"Control Panel", "System", "Hardware") on Windows XP expand the "Ports (COM & LPT)" entry and you should see Generic Serial Port listed as the driver for one of the COM ports.5.1.6Uninstalling the USB Serial driver under WindowsTo uninstall the Windows XP driver for Generic Serial Port, right click on the Generic Serial Port entry in the "Device Manager" and select "Uninstall".5.2Mass Storage USB Function Client5.2.1Selecting the profileMake the following change in your USBFN.reg file that is part of the subproject, you need to uncomment the Mass_Storage_Class and comment the rest (“;”).[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers]"DefaultClientDriver"="Mass_Storage_Class";"DefaultClientDriver"="Serial_Class";"DefaultClientDriver"="USBSER_Class"Now you can build the project with the profile selected.Right click over USB_Device_AppKit and select Rebuild and then right click over the project and select Make Run-Time Image.5.2.2Using the profileTo use the Mass Storage profile a block device like CF, SD card or USB Memory stick is necessary to make the profile working correctly. Following some examples how some of these block devices need to be added to the Windows CE project.Exposing a USB memory stick from the target to a PC (Host) the components USB Mass Storage Function client, USB Host support and USB Storage class driver are necessary. Using any otherWhen connecting the USB cable to the Host it might take some time till thestorage device is represented .6UninstallationThe USB Device Application Kit can be uninstalled separately using Windows Control Panel.Add or Remove Programs:•USB Device Application Kit for Windows Embedded CE 6.0。
Python3+PCAN-USB基于PCAN-Basic二次开发实现上位机功能
Python3+PCAN-USB基于PCAN-Basic⼆次开发实现上位机功能⼀、环境搭建1.概述本⽂主要是通过Python3与CAN总线⼯具PCAN-USB基于官⽅PCAN-Basic库实现CAN总线消息读写功能。
2.PCANBasic.py和PCANBasic.dll下载地址3.Python安装下载地址:⼆、项⽬展⽰1.⽂件⽬录2.xmt⽂件内容3.CAN消息读取截图4.CAN消息发送截图三、完整代码#!/usr/bin/python# _*_ coding:utf-8 _*_from PCANBasic import *from queue import *import threading, time, osclass PcanOperate(PCANBasic, threading.Thread):def__init__(self):super().__init__() # 继承⽗类的init⽅法result = self.Initialize(PCAN_USBBUS1, PCAN_BAUD_500K) # 总线初始化if result != PCAN_ERROR_OK:print(self.GetErrorText(result)) # 发⽣错误,获取错误信息else:print("PCAN-USB 已初始化")def ProcessMessage(self, msg, timestamp):"""CAN消息处理⽅法"""msg_dict = {}msg_id = hex(msg.ID)if len(msg_id[2:]) == 7:msg_dict["CANID"] = '0' + msg_id[2:].upper()else:msg_dict["CANID"] = msg_id[2:].upper()msg_dict["MSGTYPE"] = msg.MSGTYPEmsg_dict["LEN"] = msg.LENdata = ''for i in range(8):if len(hex(msg.DATA[i])[2:]) == 1:d = '' + '0' + hex(msg.DATA[i])[2:].upper()else:d = '' + hex(msg.DATA[i])[2:].upper()data += dmsg_dict["DATA"] = data[1:]timestamp_dict = {}timestamp_dict['millis'] = listimestamp_dict['millis_overflow'] = lis_overflowtimestamp_dict['micros'] = timestamp.microstime_sum = timestamp.micros + 1000 * lis + 0x100000000 * 1000 * lis_overflow return msg_dictdef PutQueue(self):"""从总线中读取CAN消息及其时间戳,并放⼊队列。
USB上位机开发指南
USB上位机开发指南第10章上位机程序开发在USB设备开发中,上位机程序是⽤于与⽤户进⾏接⼝的。
上位机程序通过USB设备驱动程序和外部的USB硬件进⾏通信,USB固件程序执⾏所⽤的硬件操作。
⼀般来说,根据选择开发平台的不同,可以使⽤Visual C++、Visual C#和LabVIEW 等开发上位机程序。
本章⾸先介绍了Visual C++中控制USB设备的相关函数,接着介绍了Visual C#中读写USB设备的主意函数,最后介绍了在LabVIEW中如何读写USB设备。
本章内容包括:Visual C++读写USB设备;Visual C#读写USB设备;LabVIEW读写USB设备。
10.1 Visual C++读写USB设备在USB设备开发过程中,上位机程序可以采⽤⼴泛应⽤的Visual C++来实现。
对于Cypress公司的EZ-USB系列芯⽚,其提供了全⾯的CY3684开发包。
在该开发包中,可以使⽤CYIOCTL控制函数类和CyAPI控制函数类来实现Visual C++环境下对USB 设备的读写。
10.1.1 CYIOCTL控制函数类CYIOCTL控制函数类为Cypress公司的EZ-USB FX2LP系列USB接⼝芯⽚,提供了简单的控制接⼝。
在使⽤Cypress公司提供的驱动程序基础上,只需在主机Visual C++程序中加⼊头⽂件cyioctl.h,然后便可以调⽤相应的控制函数。
为了能够使⽤这些函数,主机程序必须⾸先获得USB设备的控制句柄。
可以通过以下的代码在程序中获得连接到主机的USB 设备句柄。
CCyUSBDevice *USBDevice = new CCyUSBDevice(); //USB设备HANDLE hDevice = USBDevice->DeviceHandle(); //打开设备句柄其中,hDevice即为获得的USB设备句柄。
在退出程序的时候,需要释放该USB设备句柄,使⽤如下的语句即可:delete USBDevice;在主程序获得USB设备的控制句柄后,便可以调⽤CYIOCTL控制函数类提供的接⼝控制函数,下⾯分别进⾏介绍。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第10章 上位机程序开发在USB设备开发中,上位机程序是用于与用户进行接口的。
上位机程序通过USB设备驱动程序和外部的USB硬件进行通信,USB固件程序执行所用的硬件操作。
一般来说,根据选择开发平台的不同,可以使用Visual C++、Visual C#和LabVIEW等开发上位机程序。
本章首先介绍了Visual C++中控制USB设备的相关函数,接着介绍了Visual C#中读写USB设备的主意函数,最后介绍了在LabVIEW中如何读写USB设备。
本章内容包括:Visual C++读写USB设备;Visual C#读写USB设备;LabVIEW读写USB设备。
10.1 Visual C++读写USB设备在USB设备开发过程中,上位机程序可以采用广泛应用的Visual C++来实现。
对于Cypress公司的EZ-USB系列芯片,其提供了全面的CY3684开发包。
在该开发包中,可以使用CYIOCTL控制函数类和CyAPI控制函数类来实现Visual C++环境下对USB设备的读写。
10.1.1 CYIOCTL控制函数类CYIOCTL控制函数类为Cypress公司的EZ-USB FX2LP系列USB接口芯片,提供了简单的控制接口。
在使用Cypress公司提供的驱动程序基础上,只需在主机Visual C++程序中加入头文件cyioctl.h,然后便可以调用相应的控制函数。
为了能够使用这些函数,主机程序必须首先获得USB设备的控制句柄。
可以通过以下的代码在程序中获得连接到主机的USB设备句柄。
CCyUSBDevice *USBDevice = new CCyUSBDevice(); //USB设备HANDLE hDevice = USBDevice->DeviceHandle(); //打开设备句柄其中,hDevice即为获得的USB设备句柄。
在退出程序的时候,需要释放该USB设备句柄,使用如下的语句即可:delete USBDevice;在主程序获得USB设备的控制句柄后,便可以调用CYIOCTL控制函数类提供的接口控制函数,下面分别进行介绍。
1.中止I/O端点的请求接口IOCTL_ADAPT_ABORT_PIPE中止I/O端点的请求接口IOCTL_ADAPT_ABORT_PIPE用于中止I/O端点的请求,其使用示例代码如下:DWORD dwBytes = 0;=0x82;//地址AddressUCHARDeviceIoControl(hDevice, IOCTL_ADAPT_ABORT_PIPE, //DeviceIoControl函数&Address, sizeof (UCHAR),151NULL, 0,&dwBytes, NULL);这里在DeviceIoControl函数中,参数hDevice表示当前USB设备的句柄,参数IOCTL_ADAPT_ABORT_PIPE表示使用该接口进行通信,参数Address为通信的端点号及传输方向。
2.断开USB设备接口IOCTL_ADAPT_CYCLE_PORT断开USB设备接口IOCTL_ADAPT_CYCLE_PORT用于将EZ-USB设备从USB总线上断开,并进行重连接。
其使用代码示例如下:DWORD dwBytes = 0;DeviceIoControl(hDevice, IOCTL_ADAPT_CYCLE_PORT, //DeviceIoControl函数NULL, 0,NULL, 0,&dwBytes, NULL);其中,参数hDevice表示当前USB设备的句柄,参数IOCTL_ADAPT_CYCLE_PORT表示使用该接口进行通信。
3.获得设备地址接口IOCTL_ADAPT_GET_ADDRESS获得设备地址接口IOCTL_ADAPT_GET_ADDRESS用于重新获得EZ-USB设备的地址,其使用示例代码如下:DWORD dwBytes = 0;UCHAR DevAddr;DeviceIoControl(hDevice, IOCTL_ADAPT_GET_ADDRESS, //DeviceIoControl函数&DevAddr, sizeof (UCHAR),&DevAddr, sizeof (UCHAR),&dwBytes, NULL);其中,参数hDevice表示当前USB设备的句柄,参数IOCTL_ADAPT_GET_ADDRESS表示使用该接口进行通信,DevAddr为返回的USB设备地址。
4.获取替换接口IOCTL_ADAPT_GET_ALT_INTERFACE_SETTING获取替换接口IOCTL_ADAPT_GET_ALT_INTERFACE_SETTING用于获得当前EZ-USB设备的可替换接口设置,其使用示例代码如下:DWORD dwBytes = 0;UCHAR intfc = 0;UCHAR alt;DeviceIoControl(hDevice, IOCTL_ADAPT_GET_ALT_INTERFACE_SETTING, //DeviceIoControl函数&intfc, sizeof (alt),&alt, sizeof (alt),&dwBytes, NULL);其中,参数hDevice表示当前USB设备的句柄,参数IOCTL_ADAPT_GET_ALT_INTERFACE_SETTING表示使用该接口进行通信。
5.获取字符串接口IOCTL_ADAPT_GET_DEVICE_NAME获取字符串接口IOCTL_ADAPT_GET_DEVICE_NAME用于获得连接的EZ-USB设备的产品描述字符串,其使用示例代码如下:DWORD dwBytes = 0;ULONG len = 256;UCHAR *buf = new UCHAR[len];DeviceIoControl(hDevice, IOCTL_ADAPT_GET_DEVICE_NAME, //DeviceIoControl函数·152·buf, len,buf, len,&dwBytes, NULL);delete[] buf;其中,参数hDevice表示当前USB设备的句柄,参数buf为返回的字符串,参数IOCTL_ADAPT_GET_DEVICE_NAME表示使用该接口进行通信。
6.获取电源接口IOCTL_ADAPT_GET_DEVICE_POWER_STATE获取电源接口IOCTL_ADAPT_GET_DEVICE_POWER_STATE用于获得EZ-USB设备的电源状态,其使用示例代码如下:DWORD dwBytes = 0;UCHAR pwrState;DeviceIoControl(hDevice, IOCTL_ADAPT_GET_DEVICE_POWER_STATE, //DeviceIoControl函数&pwrState, sizeof (pwrState),&pwrState, sizeof (pwrState),&dwBytes, NULL);其中,参数hDevice表示当前USB设备的句柄,参数pwrState为返回的字符串,参数IOCTL_ADAPT_GET_DEVICE_POWER_STATE表示使用该接口进行通信。
7.获取版本接口IOCTL_ADAPT_GET_DRIVER_VERSION获取版本接口IOCTL_ADAPT_GET_DRIVER_VERSION用于获得EZ-USB驱动的版本,其使用示例代码如下:DWORD dwBytes = 0;ULONG ver;DeviceIoControl(hDevice, IOCTL_ADAPT_GET_DRIVER_VERSION, //DeviceIoControl函数&ver, sizeof (ver),&ver, sizeof (ver),&dwBytes, NULL);其中,参数hDevice表示当前USB设备的句柄,参数ver为返回的版本号,参数IOCTL_ADAPT_GET_DRIVER_VERSION表示使用该接口进行通信。
8.获取替换名称接口IOCTL_ADAPT_GET_FRIENDLY_NAME获取替换名称接口IOCTL_ADAPT_GET_FRIENDLY_NAME用于获得EZ-USB设备的替换名称,其使用示例代码如下:DWORD dwBytes = 0;PUCHAR FriendlyName = new UCHAR[256];DeviceIoControl(hDevice, IOCTL_ADAPT_GET_FRIENDLY_NAME, //DeviceIoControl函数FriendlyName, 256,FriendlyName, 256,&dwBytes, NULL);delete[] FriendlyName;其中,参数hDevice表示当前USB设备的句柄,参数FriendlyName为返回的字符串,参数IOCTL_ADAPT_GET_FRIENDLY_NAME表示使用该接口进行通信。
9.获取端点数接口IOCTL_ADAPT_GET_NUMBER_ENDPOINTS获取端点数接口IOCTL_ADAPT_GET_NUMBER_ENDPOINTS用于获得EZ-USB的端点数,其使用的示例代码如下:DWORD dwBytes = 0;153UCHAR endPts;DeviceIoControl(hDevice, IOCTL_ADAPT_GET_NUMBER_ENDPOINTS, //DeviceIoControl函数NULL, 0,&endPts, sizeof (endPts),&dwBytes, NULL);其中,参数hDevice表示当前USB设备的句柄,参数endPts为返回的端点个数,参数IOCTL_ADAPT_GET_NUMBER_ENDPOINTS表示使用该接口进行通信。
10.获取传输大小接口IOCTL_ADAPT_GET_TRANSFER_SIZE获取传输大小接口IOCTL_ADAPT_GET_TRANSFER_SIZE用于获得EZ-USB的传输大小,其使用的示例代码如下:DWORD BytesXfered;SET_TRANSFER_SIZE_INFO SetTransferInfo;SetTransferInfo.EndpointAddress = Address;DeviceIoControl(hDevice, IOCTL_ADAPT_GET_TRANSFER_SIZE, //DeviceIoControl函数&SetTransferInfo, sizeof (SET_TRANSFER_SIZE_INFO),&SetTransferInfo, sizeof (SET_TRANSFER_SIZE_INFO),&BytesXfered, NULL);LONG transferSz = SetTransferInfo.TransferSize;其中,参数hDevice表示当前USB设备的句柄,使用了SET_TRANSFER_SIZE_INFO结构,参数IOCTL_ADAPT_GET_TRANSFER_SIZE表示使用该接口进行通信。