USB海量存储类设备功能在ARM系统中的应用

发布者:本人在最新更新时间:2012-10-22 来源: 21ic 关键字:USB  海量存储  ARM系统 手机看文章 扫描二维码
随时随地手机看文章

技术发展到今天的信息时代,数据的存储和传输在嵌入式系统有了越来越重要的地位。而USB是目前设计成熟、应用广泛且使用极为简捷的技术,USB传输是一种高效方便的数据传输方式。基于上述原因,本文重点论述基于USB的海量存储(USB Mass STorage)设备功能在ARM嵌入式系统中设计和应用。使用该设备功能,上位机可以像读写普通U盘一样对于系统采集并存储在FLASH中的数据进行读写。

1 硬件方案

l.1 器件简介

S3C44B0X[1]是SAMSUNG公司出品的基于ARM7TDMI内核的RISC型微处理器,8 kB指令和数据共享的缓存,主频可达66 MHz,可以运行16位的Thumb指令和32位的ARM指令,且接口丰富,具有通用性。

K9F2808U0C[2]是SAMSUNG公司生产的一款Nand型闪存芯片,容量为16 MB,读写速度快,数据保存时间长,可擦写10万次,在嵌入式系统中有着广泛的应用,主要是负责数据存储。

PDIUSBDl2[3]是PHILIPS公司生产的带有并行总线和局部DMA传输能力的全速USB接口芯片,符合USB1.1版规范,可以与任何外部MCU/MPU实现并行接口,传输速度可达2 MB/s。该USB芯片有1个控制端点和2个普通端点。

1.2 硬件连接图

硬件连接如图1所示。在该系统中,FLASH芯片K9F2808U0C负责嵌入式系统中的数据存储;处理器S3C44B0X执行底层固件代码;USB接口芯片PDIUS-BDl2负责设备与上位机的通讯。这样系统采集并存储在闪存芯片中的数据便可以通过USB接口传输到上位机。

2 软件实现

要实现实验系统与上位机的USB通讯,首先要正确设计PDIUSBD12的底层固件程序。而要实现系统的海量存储设备功能,还要有FLASH的读写操作代码和实现海量存储设备类规范的代码。下面从这3个方面来分析。软件开发环境为ARM公司的ADS1.2,USB监控和测试软件为BUS Hound。

2.1 PDIUSBD12固件编程

PDIUSBDl2固件结构和数据流向如图2所示。结构图中的硬件提取层是固件中的最底层代码,负责对处理器与PDIUSBDl2相连接的I/O口进行操作,以通知PDI-USBD12接下来处理器将对其进行命令操作或是数据操作。而命令接口层是基于硬件提取层的一套对PDIUS-BDl2进行操作的子程序,可以方便上层程序的编写。

当PDIUSBD12向处理器发出中断请求时,处理器读取中断寄存器,根据中断源调用相应的中断服务处理程序,中断服务处理程序设置相应的事件标志,如果有数据传输并作相应的数据处理。根据USB协议[4],控制端点0用来负责设备的枚举,如获取设备各种描述符、设置地址、获取海量存储设备的逻辑单元数目和复位设备等操作。这些操作是通过中断和主循环共同完成的。这里端点1未用到,可以忽略其中断。端点2是主端点,用作Bulk-ONly传输。在端点2的中断处理程序中实现Bulk-Only传输及命令解析和执行。

其中,中断服务处理程序与主循环通过一个名为ControlData的结构体变量进行通讯。主循环初始化I/O口、事件标志bUSBFlags、建立包数据缓冲区、定时器和中断,重新连接USB总线后进入一个无限循环,当该循环轮询到某事件标志被置位时便进行相应的处理。特别是在设备枚举中当建立标志被置位时,根据设备请求的类型域ControlData,DeviceRequest,bmRequestType来确定是标准设备请求、厂商设备请求还是类型设备请求,再根据请求类型进行相应的调用。[page]

2.2 K9F2808U0C读写操作

K9F2808U0C共有1 024块,每块32页,每页528 B,其中512 B用于存放数据,另外16 B用于存放信息,如块的好坏标记、块逻辑地址和ECC校验和等。FLASH读写有其自身的特点,读写都以页为单位,可以随机读,但无法随机写,写操作前必须把写单元所在的块擦除。因此,对于该闪存的读操作可以采取直接读取来处理;而对于写操作,则通过设置块 缓冲来解决,以减轻系统的任务和对FLASH的擦除次数。写操作的基本思想是:设置一个块缓冲区,待写数据先写入缓冲区对应的页地址,当缓冲区中待写数据的页地址到达31或者页地址未满31但传输已经结束时,先将目标块中待写页以外的有关数据保存到缓冲区对应的页地址,然后擦除整块,最后将缓冲区的数据拷贝到该块。写操作流程如图3所示。

2.3 海量存储规范实现

海量存储设备必须符合海量存储设备类规范,该规范包括4个独立的子类规范,本设计中用到其中的2个子类规范:一是USB Mass Storage Class Bulk-Only Transport规范[5];二是USB Mass Storage Class UFI Command规范。前者定义了数据/命令/状态在USB总线上的传输方法,Bulk-Only传输规范仅仅使用Bulk端点传送数据/命令/状态。后者定义了对存储介质的操作命令,UFI命令规范基于SCSI-2和SFF-8070i命令集。这里根据SCSI-2规范[6]针对该类设备的操作命令规范,总共编写了9个命令执行函数,见下文。

海量存储规范的实现有2个地方要注意:一是设备描述符、配置描述符、接口描述符和端点描述符要正确设置,主机是通过控制端点(端点0)获取这一些描述符的;二是BULK端点(端点2)的中断处理,其中的BULK OUT中断处理较BULK IN复杂,由于篇幅所限,下面只讨论BULK OUT的中断处理。

BULK OUT的中断处理要对主机发送的CBW(Com-mand Block Wrapper)和数据进行解析和处理。伪代码结构如下:

其中pSCSI是传递给读写函数的有关读写地址和数据传输长度等参数的结构体。数据的处理在读写函数中进行。Write( )函数的流程如图3。读函数以页为单位,一次可以读取连续的若干页,在此不再列出其流程图。其他函数可根据SCSI-2命令规范来编写。

3 结 语

经测试,通过USB总线主机能够稳定的读写设备中的FLASH,读数据的速度可达600 kB/s,写数据的速度可达400 kB/s。该设备功能使用方便,性能稳定,已在具体项目中有实际应用,根据硬件情况稍做修改便可以应用到其他嵌入式系统中。

关键字:USB  海量存储  ARM系统 引用地址:USB海量存储类设备功能在ARM系统中的应用

上一篇:基于MC35i的M2M终端设计与研究
下一篇:基于RTCORBA技术的嵌入式代理服务器设计

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

通过USB转TTL串口下载stm32程序
目录: 1.硬件及其接线 2.驱动及软件 3.下载程序测试 1.硬件及其接线 1.1 USB转TTL刷机板(CH340模块升级小板) 1.2 主芯片STM32F103C8T6开发板 1.3接线 1.3.1 转串口模块接线 注:3V3和5V由短路冒选择。 1.3.2 核心板接线 其中 BOOT0置1,BOOT1置0。 2.驱动及软件 2.1 CH340驱动及安装方法 2.2 程序下载软件 3.下载测试 下载实验一流水灯程序测试。 实验一流水灯 写入程序成功后,将BOO0与BOOT1均置为0。 实验结果显示程序按预定设想成
[单片机]
通过<font color='red'>USB</font>转TTL串口下载stm32程序
USB3.0端口的ESD防护设计
     在当今计算机硬件的热门话题中,USB3.0绝对是最受瞩目的。自从公元2000年USB2.0释出后,这项应用已深植各项电子产品中,在各式各样的端口规格中, USB应可算是使用最广泛的了。USB3.0的数据传输速率比现有的USB2.0快上十倍,刚好迎合日益大增的高画质、大容量储存需求。无论是外接式硬盘、随身碟、相机记忆卡均可大幅缩减储存的时间。除了在计算机上的应用之外,手机与相机的传输也几乎都是使用USB规格,甚至许多产品更直接把充电端与USB结合,难怪各界皆如此期待USB3.0的广泛使用,好让用户享受4.8Gbps的传输快感。USB3.0接口分成主机(Host)端与装置(Device)端,必须先有Host端的支持,周边的D
[嵌入式]
用着容易的USB Type-C,给设计人员增加了多少难度?
新出的USB Type-C接口(或称USB C口)备受关注,这种接口正反插都可以正常工作,使用USB C口的用户再也不用考虑接口方向是否弄错了。   不过需要说明一下的是,USB C口与USB 3.1规范并不是一回事(译者注:支持USB C口的设备不一定支持USB 3.1规范,反之亦然)。支持USB C口的主要软件有这些:Windows 10既支持USB 3.1又支持USB C口;在2015款MacBook发布以后,苹果的OSX也是同时支持USB 3.1和 USB C口;Android M将支持USB C口以提供快充功能。   在硬件方面,一些已经支持USB C口的PC设备如下:诺基亚 N1 平板电脑、苹果2015款Ma
[嵌入式]
为什么在您的个人电子设计中使用USB Type-C转接驱动器?
USB Type-C连接器可以支持包括USB和DisplayPort™在内的多种数据和视频标准,因此在消费类电子产品中的应用日益广泛。USB Type-C基于USB 3.1标准设计,支持高达10Gbps的数据传输速率。在这种高数据传输速率下,想要满足每个设备的最大支持性能,保持整个数据信道的信号完整性便至关重要。 影响信号完整性的因素有多种,例如信道损耗、符号间干扰(ISI)以及印刷电路板(PCB)与传输电缆之间的阻抗不匹配所引起的信号反射。当信号穿过信道时,信号的振幅会发生衰减,衰减程度因信号的频率信息而异。信道越长,衰减便越大,在高数据传输速率下,衰减就可能造成信号完整性问题。 转接驱动器是一种信号调节装置。它可以恢复在信道上
[嵌入式]
ARM嵌入式系统的异常及裸机开发设计
1、ARM的异常 异常在嵌入式开发中是很常见的事件,它也是非常重要的事件。简单来说,异常就是一种会打断程序正常执行的事件。异常通常又称为“中断”。 异常的种类大致可分为如下几种: 1、中断 IRQ / FIQ 由外部硬件触发的中断。 2、软中断 soft interrupt 由系统调用的中断事件,由软件产生的中断事件。 3、复位 Reset 4、未定义指令 5、数据异常 例如数据越界等。 中断: ARM 有两级外部中断:1、FIQ;2、IRQ。 但大多数的嵌入式系统都有多于两个的外部中断源,为了能正常响应所有的外部中断事件,就需要一个“中断控制器”。 嵌入式系统的中断响应架构大致如下图所示: 当在短时间内产生大量中断事件时
[单片机]
<font color='red'>ARM</font>嵌入式<font color='red'>系统</font>的异常及裸机开发设计
CS5261设计|USB-C转HDMI电路|替代AG9310
CS5261是一款USB TYPEC转HDMI4K30HZ的音视频转换方案芯片,该芯片USB Type-C到HDMI转换器结合了USBType-C输入接口和数字高清多媒体接口(HDMI)输出。嵌入式微控制器(MCU)基于工业标准8051内核。接收器端口将信道配置(CC)控制器、电源传输(PD)控制器、公告牌控制器和显示端口(DP)集成到HDMI v2。将0转换器转换为单个芯片,支持USB Type-C应用程序上的Display Port交替模式。 CS5261特性和参数功能跟AG9310的一样, 原则上是可以完全替代兼容AG9310,且整体方案设计简单、外围器件少、整体性价比高。 CS5261设计USB -C转HDMI音视频转
[单片机]
CS5261设计|<font color='red'>USB</font>-C转HDMI电路|替代AG9310
USB传输机制
1.USB的传输机制 (1)USB 采用little edian 字节顺序,在总线上先传输一个字节的最低有效位,最后传输最高有效位,采用NRZI 编码,若遇到连续的6 个1 要求进行为填充,即插入一个0。 (2)数据在USB 总线上的传输以包为单位,包只能在帧内传输。高速USB 总线的帧周期为125uS,全速以及低速USB 总线的帧周期为1mS。 (3)所有的USB 包都由SYNC 开始,高速包的SYNC 宽度为32bit,全速/低速包的SYNC段度为8bit。实际接收到的SYNC 产度由于USB HUB 的关系,可能会小于该值。 (4)USB 采用轮询的广播机制传输数据,所有的传输都由主机发起,任何时刻整个 USB 体系内仅允
[嵌入式]
删除USB设备时提示无法停止“通用卷”设备的解决方法
    安全删除USB设备时,大家常常会遇到提示“无法停止‘通用卷’设备,请稍候再停止该设备。” 这种情况下可以强行拔下USB设备吗?当然不可以!这时候如果强行拔除的话,很容易损坏计算机U口或者你的USB设备。如果你的USB设备上有重要的资料,很有可能就此毁坏了。那么应该怎么办呢? 在这里有几种常用的解决方法,希望对大家有所帮助。 第一种方法(这也是我建议大家最常用的方法): 往往我们在把USB设备的文件或者数据取出来的时候,都是用的“复制”“粘贴”方式,而如果复制的是USB设备上的文件,这个文件就会一直放在系统的剪切板里,处于待用状态。而如果这种情况下我们要删除USB设备的话,就会出现上面的无法停止US
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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