器件选择
选择是带USB接口的单片机还是单片机加USB接口,偏向带USB接口的单片机,前者麻烦、可靠性弱 单片机内部自带了收发器?SIE 串行接口引擎?高速缓冲和处理 是作为主机还是从机(设备) 像手机作为一个U盘,那么是一个从设备 想直接插上U盘读取数据,是一个主设备 什么速度,full speed是12Mbps,high speed是480Mbps PIC18f系列USB单片机只能作为从设备 没有见单独主机功能的 24f系列的OTG功能,既可作为主机又可作为从机
简化开发,根据不同应用选择固件
人机接口HID human interface,人工输入命令传送到电脑的,如键盘 control+interrupt模式 MSD Mass Storage device 大容量存储设备 如U盘 快速传输;要连接存储卡 CDC commu device class通讯设备 如USB网卡 Vender class 客户定制类 如ICD2 音箱: control+同步模式 USB设备类 USB主机类 CDC 通讯类 虚拟成串口,如USB以太网适配器等,最大速率80kbps(串口9600bps?),标准驱动加inf(驱动的说明) CDC = virtual COM PORT. Great for replacing legacy serial (RS232) devices. Requires no drivers other than what is already built in to the OS. USB devices present as a COM PORT. (Like an FTDI chip.) In the PIC USB firmware you can either consume and create data or you can simply pass it through to the UART and create a USB-RS232 converter. HID 人机接口设备,如USB键盘 控制+中断方式 ,实时性yes,完整性yes 但不适合传输大量数据,最大速率64kbps,可使用Windows通用驱动程序,Win32 API HID - Human Interface Device. Used for keyboards, mouse, game controllers and things that may require human interaction. However the HID class is also suitable and popular for general purpose devices. For example there are PIC programmers that use the GENERIC HID class. (PICKIT 2&3). Tha advantage of HID is that it requires no driver as like CDC the support is built in to the OS. Disadvantage is the bandwidth is limited to 64kB per second. Still good enough for many devices. MSD 大容量存储设备,如U盘 控制+批量,Ctrl+批量 速度no 完整性 yes,适合传输大量数据 可使用标准windows驱动 Audio 如USB喇叭 控制加同步, ctrl+同步 速度yes 完整性 no 实时性要求好,但是不保证完整性,可能损失数据 Printer 控制+批量,数据量大,不求实时性 MCHPUSB是microchip提供的USB库 Microchip provides a generic driver called MCHPUSB.sys that allows most of the device controlling functionality to be in the application. Unfortunatly, this driver isn’t signed and it isn’t supported in Vista. I also found it to be alittle querky. A common option is to implement a CDC class device. The disadvantage of CDC is that the application doesn’t have a good way to find the com port of the device and it creates alittle more work for the framework code. My understanding is that most apps that use CDC require the user to configure the port, do port banging to see if anything interesting happens, or search the registry in an unsupported way. WinUSB Vista includes a generic USB driver called WinUSB which is very similar to MCHPUSB.sys. It’s installed out of the box in Vista, and a redistributable package for XP is included in the Vista WDK. WinUSB allows each device to specify a device GUID in the INF so that all of your devices of a given type can be easily found from the SetupAPIs. MCHPUSB.sys has a hardcoded GUID for all devices so to use MCHPUSB.sys you need to restrict the search farther perhaps by quering the VID/PID from the device descriptor. usbconfig: 在 TPL (目标外围设备列表) VID其实是Vendor ID,而PID则是Product ID,分别代表生产商的编号和生产商内部的产品编号。原则上说一个USB设备必须有PID和VID,属于USB接口芯片的可选设置,但是现在貌似很多生产商都是随意写的,哈哈
开发过程
利用提供的样例固件程序,做一些修改 应用程序库,包含固件、驱动等 —-比如函数 ① main.c:系统的主程序,包括InitializeSystem()和USBTasks(void)两个子程序,主要完成系统的初始化以及其他各种子程序的调用。 ② usb9.c:实现的是USB协议第9章的功能,包括枚举总线的接口和核心功能,以及USB的中断服务程序。它处理由USB用户所产生的所有的中断。在这个程序中,主要实现对描述符的枚举以及休眠、复位功能,主要包括USBCheckStdRequest(void)、USBStdGetDscHandler(void)和USBStdFeatureReqHandler(void)等5个子程序。 ③ usbctrltrf.c:主要实现USB控制传输所需的各种功能,主要由USBCtrlTrfSetupHandler(void)、USBCtr-lEPServiceComplete(void)和USBPrepareForNextSetup-Trf(void)等8个子程序组成。 ④ usbdrv.c:主要实现与USB驱动相关的功能,包括检查总线状态、USB模块使能、USB模块挂起、远程唤醒等功能;主要由USBSuspend(void)、USBModuleEnable(void)、USBSoftDetach(void)和USBDriverService(void)等12个子程序组成。 ⑤ usbdsc.c:主要是对该系统的描述,包括厂商、产品号等的描述。 ⑥ usbgen.c:对USB设备类的配置(在这里把它配置为通用USB类),主要包括USB通用类的初始化端点和读写,由USBGenInitEP(void)、USBGenRead(byte*buffer,byte len)和USBGenWrite(byte*buffer,bytelen)三个子程序组成。 ⑦ usbmmap.c:主要用于检查USB在通信过程中,端点号与BDT(缓冲器描述符表)之间的匹配。 ⑧ user.c:直接面向用户的应用程序,可以帮助用户完成自己的初始化配置、处理数据的读/写、I/O口的处理,设备的请求等。本设计中下位机的大部分功能都是由这个程序来实现的,比如A/D转换及其数据的读取、1MHz的PWM波形产生等。它主要包括UserInit(void)、BlinkUSBStatus(void)、ServiceRequests(void)、ProcessIO(void)、ResetTempLog(void)和ReadPOT(void)六个子程序。 如果要制作桌面端的软件,可利用提供的驱动和API函数
附 概念 特点
Universal Serial Bus USB大容量存储设备通常使用一个USB接口引擎和MCU(微控制器) 总线供电,但耗电大需要外部供电 支持热插拔 奥秘所在 自动检测和配置hot attach and detach 以前的鼠标 键盘需要关机 重新启动才能使用 热插拔 plug and play 即插即用 这样很方便 不必像以前的每插一个硬件就得重新启动一次 可以最多接127个外设 USB1.1 低速 1.5Mbps low spead;全速 full spead 12mbps; 高速 USB2.0中 high spead 480mbps 将设备之间的数据传输速度增加到了480Mbps 接线端子: 1 VBUS Red 2 D- White 3 D+ Green 4 GND Black 传输方式:USB具有四种传输方式 控制方式(Control mode)、 中断传输方式(Interrupt mode)、 批量传输方式(Bulk mode) 批量 保证完整性 等时传输方式(Iochronous mode) 做声音的应使用这个 不保证完整性 但要求时间性 协议 www.usb.org
usb on the go:
OTG = USB on the go,可作为主机也可作为从机 OTG解决了什么 原来情形:假设将照相机里面的照片转到另外一个U盘里面,或者假设相机通过打印机打印照片,都需要借助电脑转一下,无法相互传输 现在的情形:USB OTG设备之间可相互传输数据 OTG技术就是实现在没有Host的情况下,实现从设备间的数据传送。 例如数码相机直接连接到打印机上,通过OTG技术,连接两台设备间的USB口,将拍出的相片立即打印出来;也可以将数码照相机中的数据,通过OTG发送到USB接口的移动硬盘上,野外操作就没有必要携带价格昂贵的存储卡,或者背一个便携电脑。 USB OTG是USB On-The-Go的缩写,是近年发展起来的技术,2001年12月18日由USB Implementers Forum公布,主要应用于各种不同的设备或移动设备间的联接,进行数据交换。特别是PDA、移动电话、消费类设备。改变如数码照相机、摄象机、打印机等设备间多种不同制式连接器,多达7种制式的存储卡间数据交换的不便。 USB技术的发展,使得PC和周边设备能够通过简单方式、适度的制造成本将各种数据传输速度的设备连接在一起,上述我们提到应用,都可以通过USB总线,作为PC的周边,在PC的控制下进行数据交换。但这种方便的交换方式,一旦离开了PC,各设备间无法利用USB口进行操作,因为没有一个从设备能够充当PC一样的Host。 On-The-Go,即OTG技术就是实现在没有Host的情况下,实现从设备间的数据传送。例如数码相机直接连接到打印机上,通过OTG技术,连接两台设备见的USB口,将拍出的相片立即打印出来;也可以将数码照相机中的数据,通过OTG发送到USB接口的移动硬盘上,野外操作就没有必要携带价格昂贵的存储卡,或者背一个便携电脑。 在OTG产品中,增加了一些新的特性: * 新的标准,适用于设计小巧的连接器和电缆; * 在传统的周边设备上,增加了Host能力,适应点到点的连接; * 这种能力可以在两个设备间动态地切换; * 低的功耗,保证USB可以在电池供电情况下工作 使用OTG后,不影响原设备和PC的连接,但使得在市场上已有超过10亿个USB接口的设备,也能通过OTG互联。 USB OTG Controller
其他
MCP2200 USB转UART适合应用在什么场合?
参考资料:microchip
usb.org官网, 含USB相关规范 usb overview.PDF USB 2007masters _cn.pdf 嵌入式主机上的USB大容量存储设备类.PDF Generic Client Driver for a USB Embedded Host.PDF USB 嵌入式主机栈编程指南.PDF 在嵌入式主机上使用 USB闪存驱动器.PDF 嵌入式设备上的USB大容量存储设备类.PDF 嵌入式设备上的 USB HID 类.PDF 嵌入式设备上的USB CDC类.PDF