U盘SoC的设计与实现

发布者:花钱123最新更新时间:2013-05-20 来源: 电子技术 关键字:U盘  片上系统  USB  Verilog  HDL 手机看文章 扫描二维码
随时随地手机看文章
    随着便携式设备的广泛使用,移动存储设备被广泛用于信息存储和传输。在目前诸多存储设备中,U盘凭借其体积小、容量大、携带方便、支持热插拔等诸多优点,得到了迅速的普及。而且随着USB技术的广泛应用,在各种SoC系统中集成USB功能也成为一种必然趋势。所以对SoC芯片中集成USB接口的研究开发,具有较高的实用价值。
    文中通过分析USB协议,设计出了一种符合该协议的低速和全速的USB设备控制器,并将该控制器与8051CPU核,NandFlash,UDC_Control通过总线连接起来,组成了一个U盘SoC系统,并对此U盘SoC系统加以仿真验证。

1 系统的整体设计
   
现在的USB控制器主要有两种:带USB接口的单片机(MCU)和纯粹的USB接口芯片。纯粹的USB接口芯片仅处理USB通信,必须有一个外部微处理器来进行协议处理和数据交换。带USB接口的单片机从应用上又可以分成两类,一类是从底层设计专用于USB控制的单片机;另一类是增加了USB接口的普通单片机,这类USB控制器的最大好处在于开发者对系统结构和指令集非常熟悉,开发工具简单,但价格比较高,不利于产品升级和改型。

c.JPG


    根据上述情况,文中介绍了一种U盘SoC设计:将CPU和USB CORE通过UDC_Control模块连接起来,再加上NandFlash模块,通过总线连接组成一个SoC系统。其整体框图如下图1所示。

2 模块的详细设计
2.1 USB CORE
   
此模块为该设计的核心模块,实现USB1.1总线接口层设备控制器的功能,是本文设计的重点。USB设备控制器的架构框图如图2所示,rxdp、rxdm为从主机发送过来的信号,txdp、txdm为USB模块发送给主机的信号。其中MCU通过控制SIE来对USB设备进行控制。如图2所示,本设计分为6个模块。下面分别介绍各个模块。

d.JPG


2.1.1 rx模块
    rx模块是总线接收模块,实现USB数据传输接收物理层的功能,把串行的USB数据去掉数据包头,进行NRZI解码,去掉填充位,并将串行的数据转换成并行的8位数据。然后将数据送往下一模块处理。本模块又分为dpll、解码和总线状态监测模块。如图3所示。

e.JPG


    dpll模块用48 MHz的时钟把总线上传输的时钟和数据信号恢复出来。用48 MHz的时钟对总线上的数据信号进行采样,以去掉抖动,然后产生总线信号电平变化的指示信号change信号,change信号的改变可控制采样点,从而保证数据信号的采样点固定在每位数据信号的中央。
    NRZI解码模块检测到同步头后,根据NRZI的原理,将rxdp和rxdp延后一拍的数据进行同或操作,得到的数据经过去填充位,串并转换后,送入解包模块。
    总线状态监测模块监测总线的状态,置位suspend,resume,reset等状态指示信号。若Idle时间超过3ms时,就将suspend信号置高,在suspend状态时检测到总线信号变化时,将resume信号置高,若se0时间超过2.5μs时,就将reset信号置高。
2.1.2 解包模块
   
本模块接收从rx模块送过来的并行数据,按照USB数据包协议规范对接收的数据进行解释,并对数据做CRC校验,给出当前接收包的类型,根据不同类型的包的结构,从包中解出相应的信息送给下一模块。
2.1.3 req_dec模块
   
本模块对setup阶段USB的标准请求进行解释,提供和USB请求相关的信号给SIE模块,判断funetion和endpoint的地址是否合法。若标准请求中对某个端点所请求的操作和预定的不符,则会产生错误信号。
2.1.4 SIE模块
    SIE(Serial Interface Engine)模块是USB CORE的核心模块,根据从解包模块传送过来的信号与从MCU传送过来的接口握手信号,按照USB的相关协议,产生打包模块的控制信号和MCU的控制信号,从而控制总线上的数据发送。[page]

    控制传输的实现:
    SETUP阶段:从图4中可看出,当token_valid_i、Pid_setup、ep0_sel有效时,表明收到一个有效的令牌包,udc_as_o被拉高,表示开始数据传送,转入ctrl_setup_stage状态,此时cpu把device_bufok_i信号拉高,随后开始接收数据,在setup阶段8个字节的标准请求数据接收完成后,send_hdsk_pkt_o信号变高,表示数据接收正确,要求发送一个ACK的握手包。

f.JPG


    DATA阶段:数据阶段是可选的,并且数据阶段的传送方向可以是IN或OUT。以IN为例来介绍,当Pid_in、token_valid_i、ep0_sel有效时,udc_as_o被拉高,表示开始数据传送,转入ctrl_in_stage_empty,接着转入ctrl_in_stage状态,CPU将device_bufok_i拉高,表示开始接收数据,等待数据传完后,send_hdsk_pkt_o信号变高,表示数据接收正确,并将toggle机制翻转,要求打包模块发送一个ACK的握手包。
    STATUS阶段:STATUS阶段也分为STATUS IN和STATUS OUT两种情况。在STATUS OUT阶段,接受到HOST发送过来的空数据包后,状态机会将send_hdsk_pkt_o信号拉高,发送ACK包给HOST。其状态机同SETUP状态机类似。
    中断、批量、同步传输的IN实现:在硬件设计上,中断、批量和同步3种传输方式的处理都是一样的,只是在系统配置时,各传输方式对应的端点不同。下面以3种传输方式的IN传输来介绍。图5为3种传输方式的IN传输的状态机。

g.JPG


    从上图可看出,在收到IN令牌后,状态机将tide_as_o拉高,表示开始传送数据,转入In_transfer_empty状态,再转入In_transfer状态,cpu若能传送数据,则把device_buf_ok_i信号置高,开始接收数据,等待数据传送完毕时,状态机会将send_data_pkt_o拉高,将此信号送至打包模块,从而将所需要的数据发送给HOST。
2.1.5 打包模块
   
本模块接收从SIE传来的控制信号,根据USB协议,产生所需要的包传送给发送模块。
2.1.6 tx模块
    tx模块是总线发送模块。它将打包模块发送过来的包信息,进行并串转换,位填充,NRZI编码后,将数据发送给主机。此模块同rx模块类似,不再赘述。
2.2 8051CPU
   
此设计中的CPU为一个验证过的IP核。它包含:1个8位中央处理器、1个片内振荡器及时钟电路、4 KB ROM程序存储器、128B RAM数据存储器、可寻址64 KB外部数据存储器和64 KB外部程序存储器的控制电路、32条可编程的I/O线(4个8位并行I/O接口)、2个16位的定时,计数器、1个可编程全双工串行接口、5个中断源、2个优先级嵌套中断结构。将USB的通信请求接入到CPU的一个外部中断接口上,当USB的通信请求到来时,系统会产生一个中断,转入中断服务程序。
    此外,还需要设计一个CPU的固件firmware,实现USBCORE的上电初始化过程(向UDC_Control中的控制寄存器和状态寄存器写入初始数据)、USB CORE中断处理并完成USB传输事务、使设备摆脱异常状态等功能。
2.3 UDC_Control
    UDC_Control模块位于CPU和USB CORE之间,它完成CPU对USB通信的控制和数据的读写操作。UDC_CTRL模块中设有22个特殊功能寄存器,来完成USB通信。
    USB_INT1和USB_INT2为中断寄存器,其各个位分别表示USB通信的9种中断请求(剩下的位为保留位),但USBCORE一次只能向CPU提供一个中断信号,这两个USB_INT寄存器供软件在进入中断后查询是USB的何种中断。EP0_CTRL、EP0_INFIFO_DATA、EPO_INFIFO_CNT、EP0_OUTFIFO_ DATA、EP0_OUTFIFO_CNT这5个寄存器都是与Endpoint0相关的,Endpoint0是由一个输入端点和一个输出端点组成,用来实现控制传输。所有支持USB标准请求和Class定义的请求都通过这个端点来处理。其中EP0_CTRL用来对Endpoint0的传输进行控制,当CPU要向USB主机传送数据时,就会将数据写入EP0_INFIFO_DATA,EP0_INFIFO_CNT是CPU向EP0_INFIFO_DATA中写入数据的字节数。EP0_OUT,Endpoint1,Endpoint2,Endpoint3,Endpoint4的寄存器情况类似,在此不再多做介绍。UDC_STATUS和DEVICE_CTRL是接口状态和控制寄存器,对CPU和USB CORE的通信进行监控。
2.4 NandFlash
   
针对NandFlash读写的特点,特别是其可随机读,但无法随机写的问题,需要通过设置缓冲区来解决。在与USB Host进行数据交换的过程中,最小的单位是扇区:512字节。由于NandFlash在写之前必须先擦除,而一擦又必须擦一个Block,因此在擦除某Block之前必须保存同一个Block中有关扇区的数据。因此,如果每收到一个扇区的内容就进行一次擦、保存、写的操作,系统任务将十分繁重,无法及时响应USB Host端的请求。因此,在系统中设置32K的缓冲区,每完一次数据传输后,记下本次要写的开始扇区和总扇区数,将本次要写的数据涉及的扇区以外的数据从NandFlash中读出来,存放在缓冲区中对应位置,然后擦除一个Block,再将缓冲区中内容一次全部重新写入NandFlash。

[page]

3 仿真与验证
3.1 仿真环境的介绍
   
为了验证此设计,需要建立一个和实际应用情况类似的仿真验证平台,这个仿真系统平台包括USB CORE的RTL代码、CPU核、控制软件的二进制代码、UDC_Control、NandFlash、USB Host的仿真模型等。整个系统的Modelsim仿真环境如图6所示。

a.JPG


    USB HOST的仿真模型用来模拟PC机上的主机控制器,完成上电检测、标准设备请求、批量传输请求等功能,用来检测USB设备应答数据是否正确。负责读取主控制器的事务处理列表,并将它们安排在一系列长度的帧中,发送到USB总线上。
3.2 仿真结果
   
通过此测试平台,成功的完成了USB主机与U盘SoC之间的通信。仿真图如图7所示。

b.JPG


    从仿真图中可以看出,通过控制传输对设备进行了复位、获取设备描述符、配置地址等操作。接着进行了一个bulkout和bulk in传输。主机准确的将数据写入了NandFlash,并且正确的将数据读出。仿真表明,设计的结果满足了USB设备控制器的规格要求。

4 结束语
   
文中探讨了U盘SoC的设计,并结合仿真工具通过了RTL级仿真,证明了本设计的可行性。该U盘SoC设计具有便于修改、易于实现的特点。

关键字:U盘  片上系统  USB  Verilog  HDL 引用地址:U盘SoC的设计与实现

上一篇:有关单片机延时程序
下一篇:基于STC15F104E的开窗机控制器的设计

推荐阅读最新更新时间:2024-03-16 13:24

iPhone 15和15 Pro都上USB-C接口!但是两者千差万别
据MacRumors报道,iPhone 15系列全系标配USB-C接口,而在决定传输速率的USB协议上,iPhone 15 Pro至少会支持USB 3.2,iPhone 15标准版支持USB 2.0。 众所周知,由于手机数据接口支持的USB协议不同,传输速率也会有很大差别。根据爆料,iPhone 15 Pro支持USB 3.2,那该款手机的传输速率基本能达到5Gbps,换算下来大概是500MB/s。 作为对比,USB 2.0的传输速率只有480Mbps,算下来只有60MB/s,可以说差距非常明显。为了让大家更好理解USB 3.2与USB 2.0传速速率差距有多大,我列举一个更直观的例子。 假如我们现在需要用数据线传输一
[手机便携]
基于USB2.0的高性能移动存储设备的设计
  1.引言   闪存盘(FLASH MEMORY)是USB接口的一种典型应用,1999年朗科研发出全球第一款USB闪存盘,成功启动了全球闪存盘行业。由于闪存是一种基于半导体的存储器,信息在断电后可以保存,并且还具有低功耗、速度快、可擦写性、高可靠性、低成本等特点,是高数据存储密度的最佳选择,在外部存储领域、嵌入式系统、工控行业和信息家电业得到广泛使用,如手机、数码相机、MP3等。市场上的FLASH有多种技术来实现,其中最常用的有NAND(与非)和NOR(异或)两种。   武汉电离层观象台的高频多普勒与到达角探测分析系统在投入实际观测后,获得了一些很重要的观测数据 ,该系统的数据采集单元采用闪存作为数据移动存储设备,实现与
[嵌入式]
无法识别usb设备的解决方法汇总
  如今我们身边的USB设备越来越多,而出现的问题也没少,软件硬件方面的问题也随着而来,那我们来分析下无法识别usb设备故障解决方法。        1.前置USB线接错。当主板上的USB线和机箱上的前置USB 接口对应相接时把正负接反就会发生这类故障,这也是相当危险的,因为正负接反很可能会使得USB设备烧毁。所以尽量采用机箱后置的USB接口,也少用延长线.也可能是断口有问题,换个USB端口看下.   2.USB接口电压不足。当把移动硬盘接在前置USB口上时就有可能发生系统无法识别出设备的故障。原因是移动硬盘功率比较大要求电压相对比较严格,前置接口可能无法提供足够的电压,当然劣质的电源也可能会造成这个问题。解决方
[嵌入式]
80C51和CH375的USB打印机驱动设计
引 言   本课题来源于北京普析通用公司的一个项目。由于公司现有单机版光谱仪器产品(如1810、T6等)采用的是并行口打印技术,而随着USB打印机技术的逐渐普及,并行口打印机越来越不好买到,而且有些用户的打印机只是USB接口而非并行口,因此现有仪器产品对打印机的支持变得不能适应用户需要。为了实现能将公司的并行口仪器直接和USB打印机相连进行打印,决定设计开发一款LPT-USB打印机的驱动器,负责并口仪器和USB打印机的连接。   本文利用单片机和USB总线接口芯片实现LPT-USB打印机的驱动器设计。利用该设计将能够实现并行打印口数据可以在USB打印机上的直接打印工作,克服了有些并口仪器必须连接并口打印机才能打印的弊端,极大地方
[单片机]
CH375读写U盘C51示例源程序
#include datatype.h #include console.h #include 44b0x.h #include string.h /* 以下定义的详细说明请看CH375HF9.H文件 */ #define LIB_CFG_FILE_IO 1 /* 文件读写的数据的复制方式,0为 外部子程序 ,1为 内部复制 */ #define LIB_CFG_INT_EN 1 /* CH375的INT#引脚连接方式,接s3c44b0x外部中断2引脚 */ /* 单片机的RAM有限,其中CH375子程序用512字节,剩余RAM部分可以用于文件读写缓冲 */ #define FILE_DATA_BUF_LEN 0x2000 /*
[单片机]
linux内核配置对U盘的支持 (for mini2440)
配置优盘 因为优盘用到了SCSI 命令,所以我们先增加SCSI 支持。在Device Drivers 菜单里面,选择SCSI devicesupport,按回车进入出现菜单,按空格键选择选项–SCSI device support,然后进入选择SCSI disk support,返回Device Drivers 菜单,再选择 USB support,按回车进入USB support 菜单,找到并选中“ * USB Mass Storage support”,另外,现在的优盘等移动存储器使用的大都是FAT/FAT32 格式的,因此我们还需要添加FAT32 文件系统的支持,在内核配置主菜单下依次选择如下菜单项: File syst
[单片机]
linux内核配置对<font color='red'>U盘</font>的支持 (for mini2440)
USB-C:便携式智能设备电力标准的演变
翻译自——electronicspoint USB-C充电已成为所有高级智能手机的充电标准,但在预算更优惠的机型上却不是很多。但欧盟正在推进一项法规,强制所有便携式智能设备使用USB-C作为电源和数据连接的标准。 虽然苹果对此表示强烈反对(他们最喜欢的Lightning连接器,以及长期使用的标准、敏感的连接器),但自从USB-C在2017年实施以来,很多人已经越来越习惯它了。对于我们这些刚刚从usb的前身Micro-USB升级到USB-C的人来说,我们可能会有点不适应。 然而,在当今世界,即使是最便宜的“傻瓜手机”也都配备了微型usb接口,这与为每种设备配备不同接口的糟糕时代相去甚远。 事实上,统一使用USB-C是
[物联网]
<font color='red'>USB</font>-C:便携式智能设备电力标准的演变
USB设备的调试与测试技巧
USB设备的调试与测试技巧 SB是一种灵活的高速接口技术,可以替代计算机中原来的串行口和并行口,但灵活性高也意味着更加复杂,使得USB设计调试以及设计完成后的验证都比较困难。本文首先对USB规范做一简要介绍,然后详细讨论USB产品在调试与规范验证方面的一些实用技巧。 通用串行总线(USB)是一种很流行的接口,可用于那些与个人计算机进行通信的设备。近年来,所有新PC机和Mac机都支持USB技术,这种接口有足够的灵活性,既可用于驱动器和键盘之类的普通外围设备,也可用于定制按特殊用途设计的外设。此外USB还有一些对用户和开发人员都很有吸引力的特性,如从总线向设备提供电源、易于通过集线器进行总线扩展,以及主计算机对设备能自动识别等
[模拟电子]
<font color='red'>USB</font>设备的调试与测试技巧
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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