嵌入式VUSB剖析.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
V-USB 软件模拟USB通信 基于AVR单片机的模拟USB通信技术研究 关于V-USB V-USB是一个开源的基于AVR单片机的,纯软件模拟低速USB设备的实现。它几乎可以应用到所有系列的AVR单片机上,无需任何外加的芯片。 V-USB特点: USB1.1协议兼容的低速USB设备 提供免费的VID/PID对,USB设备的唯一标识 运行在至少有2KB的Flash,128B的RAM,12MHZ的时钟的AVR单片机,仅使用一个外部中断 底层接口以汇编实现,用C语言实现用户 层的程序接口 等等。 关于AVR 与ARM共同点:字母R,RISC(Reduced Instruction Set CPU)精简指令集。 AVR是1997年由ATMEL公司研发出的增强型内置Flash的RISC精简指令集高速8位单片机。 基于哈佛结构,具备1MIPS/MHz的高速运行处理能力,代码执行效率高。 由于以上特点,所以模拟USB通信可以在AVR单片机上实现,在ATMEL的一篇官方应用笔记(AVR309)里详细的介绍了如何使用AVR单片机的普通IO口来模拟USB的硬件端口进行通信,同时介绍了计算机的驱动程序以及计算机上用户程序的编程方法,并提供了全部源码。 关于USB Universal Serial Bus:连接计算机系统与外部设备的一个串口总线标准(接口)。 现在常见的鼠标,键盘,手机MP3等设备都采用USB接口。 USB2.0常见接口及定义 USB信号的传输 USB信号使用标记为D+和D-的双绞线传输,为半双工差分信号(USB1.0中,规定低电平0.3V,3.6V高电平2.8V)。 使用NRZI(非归零反相码)编码方式,当数据为0时,电平翻转;数据为1时,电平不翻转。 USB速度等级 USB1.0 低速Low Speed 带宽1.5Mbps USB1.1 全速Full Speed 带宽12Mbps USB2.0 高速High Speed 带宽480Mbps USB3.0 超高速Super Speed 带宽5Gbps 低速USB设备的速度是1.5M位/秒,而AVR单片机是单指令周期的,在使用12MHZ的时钟频率时,正好是1.5MHZ的8倍。 也就是说,我们的AVR单片机每8条指令就精确完成一个数据位的采集。采用这种方法时,对单片机的时序要求非常严格,所以软件的核心部分代码完全由汇编语言实现。 单片机与电脑USB的连接 电脑通过USB信号传输线上电阻抗来判断USB设备的连接与断开。 作为低速USB从机设备,我们需要在D-信号线上接一个1.5K的上拉电阻到VCC(3.0-3.6V)。 AVR最小系统原理图 AVR下位机程序设计 在Win32环境下,我们使用开源的WinAVR开发工具,它是著名的开源编译器GUN C Compiler的AVR平台移植版。 登录http://www.obdev.at/products/vusb/download.html下载V-USB的驱动包。 在usbconfig.h这个头文件里,我们需要修改一些必要的宏定义,用来配置硬件连接。 配置完成后,调用usbInit()函数进行USB初始化。 然后还要在用户程序的主循环中定期调用USB事件处理函数usbPoll()。USB事件处理函数usbPoll()在没有USB事件需要处理时将直接返回,否则将调用内部函数进行相应的事件处理。 一次USB通信的超时时间一般为50ms。 USB_CFG_DMINUS_BIT USB数据线D-使用的引脚 USB_CFG_DPLUS_BIT USB数据线D+使用的引脚 USB_CFG_CLOCK_KHZ 单片机时钟频率(kHz) 首先,我们在程序要包含必要的头文件。 在主函数里进行调用usbInit(),初始USB设备,其实主要是进行单片机中断的配置。 在main()函数的主循环里定期调用usbPoll()函数,两次调用时间必须小于50ms,否则USB就会不被电脑识别。 调用usbFunctionSetup()函数,负责传递USB请求,可以进行少量数据的USB通信。 VC6.0上位机设计 上位机程序的编程主要包括了驱动程序的设计和用户程序的开发。 驱动程序:在这里我们使用libusb,这是一个很有名的开源USB驱动程序,支持多种操作系统平台,在Windows操作系统下对应的版本是LibUSB-Win32。要想让LibUsb-Win32成为自己开发的USB设备的驱动程序,只需对LibUsb-Win32提供的libusb.inf设备信息文件(INF)的内容按照其中的注释给出的说明进行适当的修改即可。其中最重要的修改是对VID/PID的修改,将文件中的VID/PID值替换为自己开发的USB设备

文档评论(0)

四月 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档