MCU + USB设备控制器IP核的设计

发布者:清新生活最新更新时间:2009-12-08 来源: 中电网关键字:MCU  USB  IP核  设备控制器 手机看文章 扫描二维码
随时随地手机看文章

  1 引言

  在传统的计算机系统上常采用串口(如RS232)和并口连接外围设备,但串口和并口都存在着通信速度 慢,接口独占不利于扩展等无法克服的缺点,而通用串行总线(Universal Serial Bus,即USB)因具有传输 速度快、支持热插拔、扩展方便、抗干扰强、成本低、数据传输质量高、节省系统资源等优点而得到了广 泛的应用,当前它已成为计算机最常用的接口之一[1-3]。

  现在USB控制器主要有两种:带USB接口的单片机(MCU)和纯粹的USB接口芯片。纯粹的USB接口芯片仅处 理USB通信,必须有个外部微处理器来进行协议处理和数据交换。典型产品有PHILIPS公司的PDIUSBD11(I2C 接口)、PDIUSBD12(并行接口);NS公司的USBN9603/9*(并行接口)。带USB接口的单片机从应用上又可以 分成两类,一类是从底层设计专用于USB控制的单片机;另一类是增加了USB接口的普通单片机,如Cypress 公司的EZ—USB(基于8051),选择这类USB控制器的最大好处在于开发者对系统结构和指令集非常熟悉,开 发工具简单,但价格比较高,不利于产品升级和改型[4-6]。

  然而,国内产品中所用到的USB 芯片都依赖进口,主要由国外的IC 设计芯片厂商如Cypress,NEC 等 一些国际著名公司提供。鉴于USB 芯片有很好的市场前景和利润空间,尽管国内企业或研究机构目前还只 是处于USB 芯片应用开发的技术水平,人们还是希望自主开发出有自主知识产权的USB 芯片[7-9].因此,近 年来国内也有许多单位在探索独立设计USB 芯片。

  本论文针对USB1.1 协议规范,本着自主开发USB 控制芯片,把MCU 和USB 设备控制器用软核的形式集成在一块芯片上,微控制器我们是用14 位指令字长度,且是单字节指令和单周期指令,其核心指令只有 39 条,容易掌握和设计,而且完全满足总体设计的要求。

  2 MCU&USB 设备控制器工作原理及总体设计

  整个设计的总体结构如图1 所示,差分信号线D+和D-连接主机,接收时主机发送的串行数据通过收 发器和USB 设备控制器解码和校验等处理后存储到相应的RAM 中;发送时由仲裁模块控制从RAM 或 ROM 中提取相应数据经过USB 设备控制器组合和收发器串行发送给主机。MCU 主要协助USB 控制器完 成设备和主机之间的数据传输。

  2.1 MCU 的设计

  MCU主要完成各种中断处理,而且协助控制器使主机检测和识别设备;设备刚插上PC时,MCU通过读取 ROM中的指令来初始化专用功能寄存器,使能全局中断GIE和USB中断USBint,使控制器能及时响应各种USB 中断;全局中断允许位GIE置位时,允许所有中断;清零时,禁止所有中断。当一个中断被响应时,GIE 位被清零以禁止其它中断,并装载中断服务程序,将中断返回地址压入堆栈。引起装载中断服务程序的中 断标志位在重新允许GIE之前通过软件清零,以避免重复响应中断。在中断服务程序中,通过检测中断标 志位可以判断中断源,各中断标志位的置位不受GIE的影响;在设备与主机通信过程中,MCU处理setup包、 in包、out包、ack、nak、stall包等的中断处理,我们规定了USB中断、定时器中断、外部中断、GPIO中断 的中断入口地址分别为04H、08H、0CH、10H;MCU同时还对各功能寄存器进行相应的操作,比如写端点0的 输入输出包允许的最大值,数据的触发位DSQ(即Data Toggle机制)等。

  2.2 arbRAM、arbROM(仲裁模块)的设计

  在设计中含有两种存储器:程序存储器(ROM)和数据存储器(SRAM),这两种存储器都有自己的总线, 在一个时钟周期内,可以同时对两种存储器进行访问。USB 和MCU 都可以访问SRAM 和ROM,仲裁模块就是 为两者同时访问时不起冲突而设置的;USB 访问ROM 的地址空间100h-fffh(我们把设备的描述符存放在这 里),且USB 访问仅取14 位宽的低8 位数据。当USB 与MCU 同时访问ROM 时,MCU 优先。USB 与MCU 共享通 用寄存器(SRAM),当USB 的请求访问存储器信号到来时, USB 访问存储器的地址信号的高三位不等于零 时属于USB 访问程序存储器的地址空间。当USB 与MCU 同时访问通用寄存器(SRAM)时,MCU 具有优先权。

  2.3 USB 设备控制器的设计

  USB 设备控制器是设计的重点部分,是本论文介绍的重点,总体的模块划分如图2 所示;

  2.3.1 收发器的设计

  USB 收发器作为USB 接口的模拟前端主要把主机发送过来的模拟信号转换成数字信号VP、VM 传到数字锁相环或把协议引擎发送过来的VP0、VM0 数字信号转换成模拟信号,并完成串并和并串的转换;

  收发器的模型如图3所示,Dplus为正相USB差分数据线,Dminu为负相USB差分数据线,两者都是双向的。 OEn为USB发送使能,为低时作为发送功能,单相输出口被置为高阻,为高时作为接收功能,单相输入口被 置为高阻。

  2.3.2 Dpll(数字锁相环)模块

  数字锁相环实现时钟恢复、分频及同步时钟;该模块用外部的6M时钟CLK进行分频,产生1.5M的USB系 统时钟,以及把收发器产生的差分信号和并行信号进行锁相,避免产生亚稳态。

  2.3.3 SIE(串行接口引擎)模块

  SIE是USB控制器的主要模块;实现协议层的功能、信息包的解析和组合、同步信号识别、位填充和位 剥离、NRZI(非归零反转)的编码和解码、同步字段和包结束码的检测和生成、CRC5、CRC16校验等功能;图 4是设备接收主机发送数据时的状态机。

  从图4可以看出设备在没有数据传输时处于空闲态,低速设备空闲时D+、D-处于J态,当有K态到来时 进入状态转换;以KJKJKK为同步位,同步字段里的最后的2位是同步字段结束的记号,并且标志了包标识 符(PID,Packet Identifier)的开始。然后根据不同的PID分别进入地址态或数据态, 紧跟在地址态后面的 是端点态,因为地址和端点分别是有7位和4位构成共11位,所以只要5位CRC校验就可以了,CRC校验完后就要结束此次的包传输,USB协议中以2个SE0态和一个J态来表示包的结束。在数据态判断是否为SE0态, SE0态表示8个字节的数据都发送完毕,因为非SE0态即J、K态都表示工作态,所以在数据态中如果总线上 没有SE0到来就一直接收数据。

  2.3.4 ENDPCTL(端点控制)模块

  设计中用到两个端点,端点0和端点1。端点0是半双工传输,主要是在设备的枚举过程中用于控制传输, 端点1是在枚举完成后的中断传输中用设备和主机之间的数据传输。由于中断传输主要是通过端点1输入, 但也有少许输出(如键盘的LED灯输出),我们为了节省资源,所以由端点0完成少许的输出。

  2.3.5 BUFCTL(缓冲器控制)模块

  缓冲器控制模块是USB和SRAM及ROM的连接桥梁,在主机要求输入数据的IN token状态时,控制器 从SRAM或ROM中取出数据送给主机或主机输出数据的OUT token状态时,控制器把接收到的数据存放在 SRAM中,它主要根据串行接口引擎SIE的接收或发送准备信号来控制读写信号,保证数据能正确传输。 USB与MCU共享通用寄存器区,usbREQUST为来自USB的请求访问存储器信号,usbADDR为USB访问存 储器的地址信号,usbADDR[11:8]不等于零时属于USB访问程序存储器的地址空间。当USB与MCU同时访 问数据存储器(SRAM)时,MCU具有优先权。

  3 系统验证环境

  在完成了Verilog 代码设计后,我们进行了仿真、综合验证,前仿用Modelsim、综合用Synplify Pro、 综合后仿真用Cadence 中的NC_Verilog,主要由于NC_Verilog 在后仿中的速度要优于Modelsim,提高了效 率;图5 是用NC_Verilog 仿真设备的枚举过程;

 

  任何USB 的数据传输都是建立在成功通过枚举的基础上的,只有正确完成了枚举,USB 主机和设备之 间的通信才正在建立起来。所以枚举是USB 通信的最关键的一步。在验证过程中模拟了PC 主机向设备发送 各种命令来完成枚举。在图5 中pid[3:0]中D、3、9、2、1、B 分别表示Setup、DATA0、IN、Ack、Out、 DATA1。当设备插上PC 时主机会持续的SE0 来复位设备,这时设备的地址默认为00,然后主机第一次发送 Setup 包来获取设备的前8 个设备描述符,当设备成功返回数据后,主机第二次发送Setup 包来给设备配 置地址,从图中faddr[7:0]可以看出我们给设备配置的地址为02,在这以后主机都是通过这个地址向设备 获取全部的18 个设备描述符和全部的配置描述符集,在取完这些描述符后主机对设备进行配置,主机就识 别出设备了。

  4 结论

  本文描述了自主研发的MCU+USB设备控制器的设计思路。用Verilog语言对其进行了RTL级描述。用 Modelsim进行前仿验证,并在Cadence公司的NC_Verilog上通过了综合后仿验证。为了进一步验证设计的正 确性,本项目选择了XILINX公司的Virtex xc2s2006pq208芯片及XC18V02的存储器,并把上述IP核综合到此 FPGA上加以验证。综合结果表明,协议层模块占用了1672个Slice(71%),652个Slice Registers(13%),2870个4 input LUTs(61%),51个bonded IOBs(36%)。使用上华工艺,该芯片已经流片返回了,并通过demo 板连接到PC上,PC可以检测出为人体输入学设备,说明该芯片完全符合制定的设计要求。

关键字:MCU  USB  IP核  设备控制器 引用地址:MCU + USB设备控制器IP核的设计

上一篇:多核芯片未充分利用 并行编程无进展
下一篇:分析师称:英特尔不会放弃显卡芯片项目

推荐阅读最新更新时间:2024-05-02 20:56

单片机常用的开发软件有哪些?
开发工具有很多,踩坑无数总结: 用得顺手、带仿真调试功能 的最重要。 特别是带仿真调试功能,用熟了,能让你找Bug效率直接起飞。 下面给大家盘点一些比较常用的单片机开发工具: 1. Keil μVision 这款开发工具相信是所有做单片机开发必用的了,像我们无际单片机特训营的项目1,项目3和项目6都是用Keil。 Keil是一种基于Windows系统的单片机开发环境,主要用于ARM Cortex-M、8051、C251等单片机的开发和调试。 keil提供了集成的编译器、调试器和仿真器等工具,可以帮助开发者快速创建、编译和调试单片机程序。 Keil的特点就是简单易用、功能强大、兼容性好,是我最喜欢也是最熟悉的开发工具。 还有一点
[单片机]
基于STM32单片机的雷管电子保险装置设计
雷管使用中如果引爆系统屏蔽不够完善,使雷管中流过泄漏电流和电容电流达到一定的数值和作用时间,电流转化成足够的热能达到雷管炸药点燃温度(约180℃)时即可引爆,电雷管耐静电压为(1~3)×104V,超过(1~3)×104V 的静电压,从而引爆电雷管,造成爆破材料发生意外爆炸事故。本课题是在参阅了国内外关于雷管安全保险发展技术资料的基础上进行的国内雷管防护措施开发和研制的一次有益的尝试和探索,简要介绍了STM32F103RBT6 的主要功能和性能,完成了系统整体设计。 1.STM32F103RBT6简介 STM32F103RBT6 是一种高性能32 位微控制器(MICrocontrollerUnit),是意法半导体公司
[单片机]
基于STM32<font color='red'>单片机</font>的雷管电子保险装置设计
电动自行车应用中的MCU
可编程SOC器件不但可作为电机控制、模拟测量以及直接驱动LCD显示屏的统一电路板系统用于电动自行车应用,而且还能支持电容式感应技术以取代键盘上的机械按键。此外,SOC器件还能利用内部PWM、MUX和比较器来驱动和控制三相电机,利用内部ADC和PGA来支持传感器输入电池监控,以及利用热敏电阻或RTD等温度感应器件来实现温度感应。该器件不但能直接驱动继电器,以支持刹车灯、车头灯和转向灯,而且能直接驱动LCD显示屏,以显示温度、电池状态、速度、骑行距离及各种错误/警告消息等。   采用基于IDE的工具,可为SoC设计出各种界面和逻辑。这些工具还能提供直接可用的组件模块,可用于设计更为复杂的逻辑,如监控界面的电容式传感器、支持模拟传感器
[模拟电子]
电动自行车应用中的<font color='red'>MCU</font>
基于8051单片机的中断控制
(1)由中断源提出中断请求,由中断控制允许控制决定是否响应中断,如果允许响应中断,则CPU按设定好的优先级的顺序响应中断。如果是同一优先级的中断,则按单片机内部的自然优先级顺序(外部中断0→定时器0中断→外部中断l→定时器1中断→串行接口中断)响应中断。 CPU响应中断请求后,就立即转入执行中断服务程序。保护断点、寻找中断源、中断处理、中断返回,程序返回断点处继续执行。 (2)由中断允许寄存器IE控制开放和禁止中断。欲开放某一中断,则应先开放总中断允许(EA置1),然后开放相应中断的中断允许(相应位置1);若要要禁止中断,则EA置O即可。 (3)由中断优先级控制寄存器IP控制中断优先级,相应位置1,则设为高级中断,置0
[单片机]
讲述单片机如何解决高速控制LED显示屏
图1是高速控制方案LED显示屏电路原理。采用MCS51系列单片机对 LED显示屏 进行控制;随机存储器62512用作LED显示屏的数据存储器,存储待显示内容的字模数据;采用8行扫描方式,多片LED点阵片共用1组行驱动电路;每片LED点阵片都有一组列驱动电路,用74LS377作为列驱动的锁存器,CPU通过并行总线给列驱动电路的锁存器写字模数据;地址译码电路,用于产生LED点阵片行驱动电路和列驱动电路的片选地址。   图1 高速控制方案LED显示屏电原理   本方案的特点有两个:第一,虽然CPU还是通过并行总线给列驱动电路的锁存器写字模数据,但是锁存器的锁存信号改用了CPU的控制信号RD,而不是常规用法的WR;第二,地址译码电
[单片机]
基于51单片机+DS1302万年历+LCD1602显示+按键播报时间+温控风扇+按键控灯
前段时间做了一个 基于51单片机的万年历加温度控制风扇以及按键播报时间。在这里做一下笔记。 准备硬件 1:51单片机(我这里用的是STC89C52) 2:语音播报模块(我这里用的是SYN6288) 3:DS1302时钟模块 4:DS18B20温度模块 5:LCD1602显示屏 6:L298N电机驱动 7:蜂鸣器 8:电机 9:按键 5个 10:灯 功能介绍 功能: 1:修改时间 2:修改日期(软件自动校正日期) 3:闹钟模式 4:温度控制风扇速度 5:调节灯亮度 6:播报时间 主界面设置 下面是大概的流程图 位置不够没画全。。。 由于代码较多,这里就不全部贴出来了。 修改时间 当我们进入到修改时间的界面,我们屏幕得
[单片机]
基于51<font color='red'>单片机</font>+DS1302万年历+LCD1602显示+按键播报时间+温控风扇+按键控灯
单片机(51) 数码管0-9循环显示(软件延时)
#include regx51.h unsigned char code led ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay_50ms(unsigned int i){ while(i--); } void main(void){ char i=0; while(1){ for(i=0;i 10;i++){ P1=led ; delay_50ms(60000); } } }
[单片机]
51单片机学习笔记(三)
感觉现在每一天写的程序都在增加难度,或者是因为我太心急,书中的一些过渡程序我觉得太简单就只看书上的例程,理解后没有亲自在电脑上调试,结果编写进阶的程序就感觉很困难了。所以以后要一个一个程序慢慢递进,不能太心急了。 今天这个程序是在昨天按键控制led灯的基础上改为按键控制数码管了,要实现按一个键数码管显示的数字加一,按另一个键数码管的数字减一。虽然这个功能简单,但实现起来却很复杂。我调试了一个小时还找不出错误,最后还是打开书本参考了一下例程才豁然开朗。 调试记录: (1)程序中的,inc count语句我第一次写的时候把它调到去process子程序中,结果是没有任何操作的时候,数码管不断自加,debug的时候程序卡住了,
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved