ARM Cortex-A8/A9开发板 | ARM11开发板ARM11开发套件 | ARM9开发板ARM9开发套件 | 飞思卡尔I.MX28I.MX6开发板 |
tiny210/mini210开发板 | mini6410开发板/套餐 | Tiny6410开发板无线套件 | mini2440开发板/套餐 | micro2440开发板带核心板 | 友善开发板配件 模块 | QQ2440 V3 SBC-2410X |
FL2440 OK2440-IV V4 | OK2440-III OK2440V3 | TE2440-II TE2440V2 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | 开发板配件 模块和其他 |
Xilinx开发板/fpga开发套件 | altera开发板/fpga开发套件 | 基于FMC FPGA/DSP子卡 |
BeagleBoard原厂开发板 | PandaBoard原厂开发板 |
TI DM3730 DevKit8500D | TI系列 omap3530开发板 | ATMEL系列 开发板 | Samsung系列 开发板 | 开发板配件-仿真器 模块 | NXP LPC3250 mini3250 |
Tiny210 三星S5PV210 | Mini210/Mini210s开发板 | Tiny4412开发板Cortex-A9 | Tiny6410开发板 ARM11 | mini2440开发板 ARM9 | micro2440开发板 ARM9 | mini6410开发板 ARM11 | 友善ARM开发板配件 模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
FL2440 OK2440-IV V4 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | OK210/-A Cortex-A8 | TE2440-II TE2440V2 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | ARM开发板配件 模块等 |
Real6410开发板/套餐 | Real210开发板/Real2410 | WIFI GPS GPRS模块摄像头 |
Xilinx开发板/开发套件KIT | Altera开发板/开发套件KIT | 配套模块 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | 最小系统模块类(初学者勿选) | 开发工具 仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
DM3730/AM3715/AM3359 | OMAP3530AM1808AM3517 | 飞思卡尔Cortex-A9开发板 | ATMEL系列ARM开发板 | NXP LPC3250 LPC1788 | Samsung系列ARM开发板 | STM32系列F207/F407 | ARM开发板配件-仿真器 模块 |
Realv210 S5PV210开发板 | Real6410开发板 ARM11 | WIFI GPS GPRS模块摄像头 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | ARM小系统模块(初学勿选) | 开发工具 ARM仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
Exynos4412开发板A9四核 | UT-S5PV210 S5PC100 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 |
Xilinx开发板 FPGA开发套件 | altera开发板 FPGA开发套件 | FMC模块 配件 下载线 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
s3c2410 ARM9 FS2410 | s3c2440开发板 ARM9 | s3c44B0开发板 ARM7 | s3c6410 2450 2443/13 | PXA270 PXA320 PXA255 | Atmel 9200 9261 9G20 | Philips NXP开发板YL-LPC | FS-EP9315开发板ARM9 | LCD液晶屏TFT真彩/触摸屏 | ARM仿真器/仿真调试工具 | ARM开发板配套ARM核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯开发板UP-DRAGON-I | 物联网教学科研设备 | EDA/FPGA/SOPC教学科研 |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | YC-ePC-A系列人机界面 | Mars-EDA套件CPLD FPGA | 触摸屏LCD 摄像头 WI-FI模块 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器/仿真系统 | DSP开发板/DSP试验箱 | DaVinci系列多媒体平台 | Xilinx FPGA大学计划产品 | SEED教学实验系统 | FPGA/DSP FPGA开发板 | TI原厂开发板套件/CCS软件 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
广嵌实验室项目产品 | GEC2440/GEC6410开发板 |
泰克Tektronix示波器 | 普源RIGOL示波器 | USB虚拟示波器 |
UT-S5PC100 UT-S5PV210 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 | 开发板模块wifi gps等 |
EMA OMAP3530开发板 | EMA OMAP 3530核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx Altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯系列 UP-DRAGON-I |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | 触摸屏LCD 摄像头 WI-FI模块 | Mars-EDA套件CPLD FPGA | ePC系列工控一体机ARM9 A8 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器 | DSP开发板 | DSP实验箱 | Xilinx FPGA大学计划产品 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
ARM开发板S3C6410等 | Cortex-A8/ARM11仿真器 | ADSP Blackfin开发板 | FPGA Spartan-3E开发板 |
GEC2410开发套件ARM9 | GEC2440开发套件ARM9 |
泰克 示波器 |
摘要:针对现有嵌入式Linux系统下USB读/写速度慢的问题,结合AT91RM9200处理器的开发实例,介绍一种基于Philips公司的USB接口控制芯片ISP1761来实现低成本高速USB主机控制器的硬件设计方法。在此基础上,给出了驱动程序的设计方案及相应驱动的配置、编译、下载使用等过程。测试表明.其速度达到USB 2.0规范的要求,对嵌入式下低成本USB主控制器的硬件设计和驱动开发有一定的参考价值。
关键词:Linux;驱动程序;USB;ISP1761
在嵌入式系统的发展历程中,Linux操作系统的源码公开,结构清晰,功能强大,可移植性强等特点使其在嵌入式领域应用越来越广泛。USB接口的热插拔,即插即用,数据传输可靠,扩展方便,成本低等优点使其逐渐成为嵌入式系统的必备接口之一。随着嵌入式系统应用领域的不断扩展,人们对其性能的要求不断提高,特别是USB设备的读写速度受到越来越多的关注。然而。目前多数嵌入式系统仅支持基础的USB低速或全速外设,不能满足人们对高速数据传输的要求。为此,基于AT91RM9200平台完成了高速USB的硬件设计和Linux操作系统下主机端驱动程序的开发。
1 高速USB硬件接口设计
目前的嵌入式系统设计中,USB接口的外扩主要采用微处理器芯片自带的USB控制器,一般只支持低速和全速协议,无法实现高速数据传输。该设计采用AT91RM9200处理器外扩ISP1761 USB控制器方案,解决了嵌入式系统下USB设备的传输速度问题。其USB硬件接口部分电路如图1所示。
AT91RM9200是Atmel公司一款基于ARM920T内核的微型处理器。它有丰富的系统与应用外设及标准接口,时钟频率可达180 MHz,并且具有低功耗、低成本、高性能,在嵌入式系统中应用广泛。ISP1761是Philips公司开发的一款高速USB On The Go(OTG)控制器,芯片内集成了64 KB的高速缓冲,单次处理数据达32 KB,极大地提升了系统的处理性能,并且功耗很低,其内部集成了Slave主机控制器和外设控制器。此外,ISP761还有可配置的32 b/16 b异步CPU接口,该设计ISP1761外部数据总线设置为16 b模式。
处理器AT91RM9200与外扩USB控制器的连接如图1所示。其中,A[17∶1]为地址线;DATA[15∶0]为数据线;WR_N为读使能;RD_N为写使能;CS_N片选信号采用NCS2;AT9lRM9200的中断源1分配给ISP1761作为其中断信号。处理器和ISP1761之间的数据传输通过中断方式实现,当USB接口有中断产生时,处理器的中断服务程序通过读取ISP1761的中断寄存器判断中断来源,从而执行相应的读/写操作。
2 高速USB软件驱动实现
2.1 Linux系统中USB驱动结构
USB内核模块是Linux系统中USB子系统的核心模块,它为USB驱动(设备和主控制器)提供了一个统一的接口,以访问和控制USB硬件。
如图2所示,应用程序发出的USB请求块(URB)经过上层的USB设备驱动和USB内核后到达USB主控制器。处于最底层USB主控制器的驱动(HCD)是USB主机直接与硬件交互的软件模块,它将解析URB后,再将数据发送到指定的USB设备上。
2.2 ISP1761主控制器驱动的实现
图3为ISP1761与操作系统相连接的接口框图。图5中,ISP1761要完成操作系统与USB设备的通信。驱动部分主要分两个层次:ISP1761硬件抽象层(HAL)和主控制器驱动(HCD)层。前者,通过GPIO接口和操作系统平台的相关函数来完成访问ISP1761硬件的功能;后者,主要实现将数据传输给连接的USB设备,并管理根集中器端口的功能。
因此,该设计的软件驱动部分主要由以下两个层次来完成USB主机端的驱动功能。
(1)ISP1761的HAL层。首先初始化设备结构,并添加设备到系统的设备层。其中,初始化部分主要完成ISP1761资源(如内存、中断等)的初始化设置和AT91RM9200处理器的初始化设置,为后期注册驱动程序做准备。如果系统成功添加了设备,在加载和卸载ISP1761主控制器驱动程序到内核时,就会进一步执行平台驱动程序的注册,否则将不能注册驱动程序。一旦注册成功,驱动程序就已经和设备绑定,任何用户态程序要操作此设备都可以通过platform_driver结构所定义的函数进行。下面给出该系统注册的platform_driver结构:
其中,在设备探测和注销等函数中调用了如下一个重要的结构体isp1761_dev。该结构体主要包含了ISP1761设备驱动的基本信息和中断处理例程指针。
(2)ISP1761的HCD层。Philips公司的ISP1761主控制器芯片遵循EHCI标准。该层在加载和卸载ISP1761主控制器驱动到内核时被调用,主要负责与连接的USB设备进行数据传输,并管理根集中器端口。具体包括主控制器例程、内存管理、根集中器和中心集中器的管理、数据传输等。
其中,pehci_hcd_urb_enqueue()函数是该部分所要实现的重点函数,主要用于完成将来自USB core层的urb传输请求转换成EHCI可识别的传输描述结构。然后安排到EHCI的periodic schedule list或者asynchronous schedule list的合适位置。当HC完成urb对应的传输后,EHCI HCD通过urb→cornplete()通知USB core对应的传输结果,最终完成通信过程。该函数的原型如下:
3 USB驱动的调试使用
USB驱动的正常使用必须在内核中正确选择配置,除了默认配置之外,还要添加诸如SCSI设备的支持,VFAT文件格式的支持,新添加ISP1761驱动的支持等。ISP1761的驱动采用模块方式编译,系统启动后,逐层插入驱动模块加载USB主控制器驱动程序到内核。此时,系统插入U盘可成功获得分区,如下所示:
执行挂载命令mount-t vfat/dev/scsi/host0/busO/target0/lun0/partl/mnt/ usb(前提是已经在/mnt目录下建立了USB目录,并且U盘的格式为win-dows下的vfat)便可成功挂载U盘到指定的目录/mnt/usb下。
拷贝U盘上的文件到嵌入式系统,经多次测试,速度可达到约100~125 Mb/s,相比传统的嵌入式Linux系统下对USB的支持,速度得到了很好的提高,基本满足高速读/写的要求。
4 结 语
随着USB接口在嵌入式领域越来越广泛的应用和嵌入式Linux内核的不断扩展,嵌入式Linux内核支持的USB设备和USB主控制器越来越丰富,相应的驱动开发工作也将日益突出。该设计给出了嵌入式Linux系统下高速USB主控制器的硬件设计方案和驱动的实现方法,在提高系统性能的同时,降低了成本,有很好的实际应用价值。同时驱动的模块化结构设计保持了其最大可移植性,对于嵌入式下USB主控制器的驱动开发具有很好的借鉴意义。
博航网 www.broadon.net 版权所有
京ICP备10051899号-2 京公网安备110108006479号