
USB Host
文章平均质量分 64
tywali
长期从事嵌入式系统,呼叫中心,MIS的开发
展开
-
AT91AM9200 USB HOST开发(一)—— 前言
几个月前,参加了公司的一个项目,要求在某个系统的某个子模块中把系统数据保存到U盘中,从此开始了我与USB HOST不得不说的故事。在参加这个项目之前,虽然我有一些嵌入式系统开发的经验,但是那都是10年前的事情了,那个时候用的CPU是8031,语言是PL/M-51,现在用的是大名鼎鼎的AT91AM9200,语言也换成了C,还真是鸟枪换炮了。可惜,这两样东西我一样也不熟。不但这两样东西不熟,我对U原创 2008-05-14 16:35:00 · 2124 阅读 · 0 评论 -
基于OHCI的USB主机 —— 寄存器(传输)
启动控制传输进行控制传输之前,需要设置好相应的ED和TD参数(参见下一章),启动传输时需要设置OHCI寄存器中的控制传输ED头指针寄存器和控制传输的当前ED指针寄存器,然后设置控制寄存器允许处理控制传输列表,控制状态寄存器有控制传输列表数据需要传输,代码如下:/** * 通过Control端口传原创 2009-12-04 17:09:00 · 849 阅读 · 0 评论 -
基于OHCI的USB主机 —— 寄存器(初始化)
硬件初始化的操作比较简单,主要代码从例程《AT91RM9200-BasicUHP》中抄过来,另外增加了中断向量初始化的部分。在AM9200中,USB的中断是基于AIC中断的,因此要设置对应的AIC中断。在此之前要设置OHCI的中断寄存器,代码如下:/** * USB主机初始化原创 2009-12-04 17:07:00 · 7809 阅读 · 0 评论 -
基于OHCI的USB主机 —— OHCI(基本流程)
根据上面的介绍可以发现,通过USB端口进行数据收发的主要工作就是构建ED和TD列表。其中ED列表控制数据的传输方向,TD列表完成具体的数据打包和传输。按照OHCI规范,ED和TD列表都是可以在使用过程中对某个节点进行修改,比如增加和删除。但是为了程序处理简便起见,最好采用顺序处理模式,也就是一个命令执行完毕以后,再重新构建新的ED和TD列表,执行下一个命令。进行控制/批量传输的主要处理流程原创 2009-12-07 18:02:00 · 1041 阅读 · 0 评论 -
基于OHCI的USB主机 —— OHCI(HCCA)
主机控制器通信区(HCCA)是一个256字节对齐的内存数据结构,被系统软件用于与HC进行通信,收发相关控制和状态信息。系统软件通过HcHCCA寄存器设置HCCA的地址到HC。该结构允许软件给HC的函数指明方向,而不需要从HC读取,除非不寻常的状况发生(例如发生错误)。通常与HC的交互可以通过读取HCCA结构的值或者写入原创 2009-12-07 10:38:00 · 1838 阅读 · 1 评论 -
基于OHCI的USB主机 —— OHCI(传输描述符)
传输描述符(TD) 传输描述符(TD)是系统内存的数据结构,被HC用于定义从端点收发数据的缓冲区。TD分为2个类型:通用TD和同步TD。通用TD用于中断、控制和批量端点,同步TD用于同步传输。使用两种不同的TD类型是因为缓冲区类型的不同。对于U盘主机控制器来说,不使用同步传输。原创 2009-12-07 10:38:00 · 1242 阅读 · 0 评论 -
基于OHCI的USB主机 —— OHCI(端点)
OHCI (Open Host Controller Interface),是康柏、微软、国家半导体等公司共同制定的一个USB主机接口规范,它提供一个更抽象的接口来完成USB数据传输工作。在OHCI规范中,最重要的几个概念是端点(EndPoint - ED)、传输描述符(Transport Descriptor -TD)、主机控制器通信区(HCCA)。其中ED负责确定传输类型(控制传输原创 2009-12-07 10:37:00 · 1417 阅读 · 0 评论 -
基于OHCI的USB主机 —— 寄存器(设备连接)
读取USB设备连接状态读取HcRhPortStatus寄存器可以得到相应USB端口是否有设备连接,但是在嵌入式系统中,为了增强系统的稳定性,要有适当的算法保证在一段时间内,连续读到设备连接或断开,则才能确定设备的连接状态,下面的函数在定时中断中被调用,用来检测USB设备的连接状况:/** * 读取USB原创 2009-12-07 10:34:00 · 811 阅读 · 0 评论 -
基于OHCI的USB主机 —— 寄存器(复位)
USB端口复位当USB设备连接到某个端口上以后,根据规范,需要对相应USB端口进行复位 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE原创 2009-12-07 10:32:00 · 790 阅读 · 0 评论 -
基于OHCI的USB主机 —— 寄存器层(说明)
AM9200支持标准的OHCI规范,在其开发文档中对于USB主机部分的说明干脆就直接说参见OHCI规范。阅读AM9200的例程《AT91RM9200-BasicUHP》代码,发现系统已经提供了访问OHCI寄存器的指针pUhp,使用该指针就可以访问到所有的OHCI寄存器,因此读写寄存器的操作就是对pUhp指针进行操作。按照面向对象的编程思想,将所有寄存器看作是一个对象,对其操作都是通过接口来原创 2009-12-04 17:02:00 · 1696 阅读 · 0 评论 -
基于OHCI的USB主机 —— 总体构架
写在前面的话:这篇文章原来发表在我的51CTO技术博客里,最近把优快云这边的空间恢复了,于是把那边的文章搬过来。 在我们的系统中,USB主机就是用来对U盘进行读写操作,因此在设计和构架上就完全围绕这个目的而进行。整个系统所涉及到的内容比较多,按照嵌入式系统开发的一般原则,采用层次化的体系结构,将系统按照功能划分为若干层次,每一层完成相应的功能。根据系统的业务需要,系统总体构架原创 2009-11-30 19:59:00 · 796 阅读 · 0 评论 -
基于OHCI的USB主机 —— 背景介绍
写在前面的话:这篇文章原来发表在我的51CTO技术博客里,最近把优快云这边的空间恢复了,于是把那边的文章搬过来。使用AT91RM9200作为主控CPU,利用该芯片的USB主机接口访问U盘,根据接收的上层命令把相应数据保存到U盘的指定文件上。不使用额外的专用USB控制芯片,要求稳定可靠,效率高,不能影响运行在该CPU上的其它程序。AT91RM9200程序加载后直接运行,没有原创 2009-11-30 19:56:00 · 697 阅读 · 0 评论 -
基于OHCI的USB主机 —— 前言
写在前面的话:这篇文章原来发表在我的51CTO技术博客里,最近把优快云这边的空间恢复了,于是把那边的文章搬过来。很久以前,大概是前年年底吧,因为公司项目的要求,我做了基于OHCI的USB主机访问U盘的程序,用来把系统中产生的一些数据保存到U盘中。本来做的时候就想把其中的一些经验体会发表的,可是工作实在是太忙,而且也的确有点懒,就一直拖到了现在。做访问U盘的USB主机,原创 2009-11-30 19:43:00 · 531 阅读 · 0 评论 -
AT91AM9200 USB HOST开发(二)—— USB基础知识介绍
USB基础知识USB标准可以在http://www.usb.org/developer中找到,并且你还可以在该站点找到另外的一个USB的测试工具:usbcomp.exe,它包含一个usbcheck的工具可以检测到设备是否一些USB的高层次的要求。同时它还有一个usbcheck的工具可以检测HID(humaninterfacedevice)的设备。而Win98还有一个"Ignoreh原创 2008-05-14 16:50:00 · 1797 阅读 · 0 评论 -
基于OHCI的USB主机 —— 寄存器(其它)
USB端口关电对USB端口进行关电处理的目的主要有两个,一是安全拔下U盘,防止带电插拔造成数据丢失或错误,另一个是为了再次开电,对U盘内部程序进行复位。/** * 断开USB端口的供电 */short ohciHardDisable(void)原创 2009-12-07 10:35:00 · 981 阅读 · 0 评论