你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

USB通用串行总线是近年兴起的一种通信方式

[复制链接]
gaosmile 发布时间:2020-4-10 13:10

1、引言

+ b; b# I, W9 A. E$ N5 e; k' g; T

        USB通用串行总线是近年兴起的一种通信方式。USB协议1.1版规定了低速(1.5Mb/s)和全速(12Mb/s)两种速率,目前大部分USB器件支持该协议。2000年USB2.0白皮书出台后,其速度最高可达480Mb/s。该总线是由Compaq、IntelMicrosoft、NEC四公司共同提出,并得到了众多厂商的支持。USB接口具有安装方便、高速、灵活、低成本、易扩展,支持热插拔等优点,已经逐渐成为现代数据传输的发展趋势。

, Q4 V) H: D5 G0 e7 o: \

        2 、USBN9604

4 ~/ w) u! f$ _

       


6 M. m- H7 u  N( e! K/ R3 z

        USBN9604是NatiONalSemiconductor公司设计生产的一款较新型的专用USB通信控制芯片,是US-BN9602的改进产品,同时在时钟产生电路的复位机制上又较USBN9603有所改进。USBN9604支持全速传输,可满足USBl.0和1.1协议。它具有8位并行接口,可支持DMA、MICROWIRE/PLUS。图1是US-BN9604的结构框图。其主要特点如下:

/ I. e$ v. @  s  p

        工作频率为48MHz,但外部只需接24MHz晶振,因为芯片内部有倍频电路,因而可得到48MHz时钟。

; P6 j* [8 k" y; T; K

        可由编程时钟发生器编程产生不同的频率时钟,以作为外部器件(如CPU)的时钟信号。


! `: d) G  C3 K- n# l$ q8 Z

        带有串行引擎接口(SⅢ),可实现USB物理层和信号层协议的转换,主要有CRC校验/产生、PID校验/产生、位填充/解除填充、地址识别、握手评估/产生、并串转换等。


) @. E; ?5 X* C# b5 S$ m  p$ U0 ^

        带有7个端点的USB功能控制器,每个端点对应一个FIFO。其中端点0是双向控制端点(FIFO 8字节深),另有3个发送端点:EPl(16)、EP3(16)和EP5(64)以及3个接收端点EP2(16)、EP4(16)和EP6(64)。


+ j- H/ ]0 X2 }2 i

        USBN9604内部有64个映射到内存的寄存器,主要有主控制寄存器(MCNTRL)、时钟配置寄存器(CCONF)、主事件寄存器(MAEV)、转换事件寄存器ALteV)、接收发送事件寄存器(RXEV、TXEV)以及各端点的控制寄存器和收发数据及状态寄存器等。固件的大部分功能就是完成对此寄存器组的读写,实现对接口的配置、接口状态的转换以及数据在外设和计算机之间的传输等。

7 w" E5 H. h2 u% I: E

        3、 USB接口的硬件实现


6 i5 O0 y8 b  k" m

        51单片机与USBN9604的并行连接有两种方式,即非复用方式和复用方式。它们可通过设置引脚MODE0、MODEl来选择。在非复用方式时,可用控制引脚CS、RD、WR、地址引脚A0和双向数据线D[7:0]实现相应的地址读写。而在复用方式时,则使用控制引脚CS、RD、WR、地址存信号ALE和双向数据线D[7:01实现其地址读写。本设计采用复用方式进行数据交换。


8 Z/ x5 A: M7 F# _3 |- M

       

* d. ]" H  h% }; b' K

        图2所示是89C51单片机和USBN9604的接口电路,该电路由一片89C51单片机、USBN9604、时钟振荡电路以及相应的外围电路组成。其中USBN9604通过外部中断INT0与89C51单片机进行通信。


( ]6 U5 ~( B4 y2 w* v

        4 、USB接口的软件实现

1 O* T2 h" J" a3 J

        设备固件是设备运行的核心,可采用C语言设计。其主要功能是控制USBN9604接受并处理USB驱动程序的请求(如各种标准请求)、接收/_k传数据。当主程序完成CPU和USBN9604的初始化后,可用while循环等待外部中断。中断处理程序可在给出中断人口后跳出中断。所有的USB事物处理都在函数USB-ISR中完成。图3所示是USB-ISR程序框图。在USB-ISR中,通过程序可读取USBN9604中的主事件寄存器(MAEV),并判断中断原因,包括收发事件的发生、总线状态的改变以及握手信号的产生等,同时可根据不同原因进入相应函数。另外也可通过函数具体实现各种USB标准的请求、端点0的接收和发送以及其它端点的收发和总线状态的改变等。


; }9 ?, K1 B0 t' n2 f4 P1 |$ Z

       

7 I: _5 I  R# X

        5、 设备驱动程序

7 w/ x# |- i. X+ K- f3 M# a+ Z

        目前较流行的驱动程序编写软件主要有DDK、VtoolsD和WinDriver等,其中WinDfiver相对比较简单,并可满足开发USB驱动的需要。利用它开发设备驱动程序不需要熟悉操作系统的内核,同时整个驱动程序中的所有函数都工作在用户模式下,因而可通过与WinDriver的.Vxd或.Sys文件交互达到驱动硬件的目的。


4 }# Y. N" V1 f7 s( }

        5.1WinDriver的主要特征


7 m# d# y( ]5 d) Z6 m" `' H& {

        WinDriver编程软件具有以下特点:

3 E: B7 M8 Z3 |7 g: s3 `

        提供有从用户层直接访问硬件的方法;


. n$ I7 S; y8 s, F$ ~3 ^8 [

        无需DDK以及核心态驱动程序的开发经验;


! [7 n* K. R/ L7 @7 D% `

        支持I/O、DMA、中断处理,同时支持PCI、ISA、USB、PCMCIA的开发;


2 W) \7 j7 a, c9 y$ j

        对于性能要求特别苛刻的部分,WinDriver提供的APl可插入到核心态模式中运行,从而提高执行效率;


5 i, H4 X* G% Q0 d3 m! ^

        可利用常见的软件开发平台(VisualC++、BorlandC++、Delphi等)。

0 M9 Z# T( D9 n

        5.2开发步骤

( r0 P* a7 H/ _

        利用WinDriver开发驱动程序有两种方法,分别介绍如下:

. S4 K5 }! K; x

        第一种是利用WinDriver自带的WinDriverWizard来分析用户开发的插卡,看其能否象设计的那样正常工作,然后自动生成驱动程序的框架代码,接着再修改代码并加入定制功能,同时在用户态执行和调试代码并将性能要求苛刻的部分插入到核心态。


5 W* Z9 ?" N6 `# k. B# c

        第二种则直接应用WinDriver提供的API函数编写驱动程序,这种方法比用Wizard生成框架代码的方法更加灵活方便。但要求编程人员对驱动程序的框架有一定的了解。


* w. s0 A1 t5 t3 {+ v

        在实验中采用的是第一种方法,实验效果良好。

收藏 评论1 发布时间:2020-4-10 13:10

举报

1个回答
李康1202 回答时间:2020-4-10 16:56:48
usb协议让人看起来就没有分析的欲望

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版