USB Host Driver for USB Storage 基于AT91SAM9

前段时间准备写非操作系统的USB主机的驱动,裸奔ARM9,驱动U盘,网上找了好久,翻了大量资料,却也没发觉有一个好的例程,所以决定研究USB Specification,可那东西让人看着一头雾水,无奈!后来看了OHCI Specification,里面也是协议一类的东西,要自己写一个完整的驱动程序简直是找罪受,不写个一年半载估计是搞不定的!

差点就放弃裸奔了,直接上OS!后来在翻阅Uboot和Linux代码时知道了这两个下面也是有USB Host Driver的,所以决定从这两部分代码入手,整理出一份U盘裸机驱动来!

前面在查找资料时曾看到过fudan_abc写的关于“Linux那些事儿”,牛B的人啊,为了看A能够一晚上看完LINUX下的U盘那几万行代码,要是我早见周公去了!呵呵

转回话题,linux下的USB Host Driver很多都是内核相关的,所以想到移植起来肯定很麻烦,光看懂里面的东西就得花去好几天甚至是几个星期的时间;而Uboot下的代码是近似裸奔的,或者说就是一个单任务的程序,负责加载内核的,可以从很多存储器中读取出内核文件来,当然也包括了USB Storage,所以从这里入手,应该是正确的!

Uboot下包括了很多底层驱动,还有一些命令。在cmd_usb.c下面有关于操作U盘的命令,一步步链接下去,就可以看到Uboot操作USB的整个过程了。还有cmd_fat.c这个文件,会有涉及到USB Storage的文件操作。顺便先说一下,我看的是u-boot-1.1.5。

我是从cmd_usb.c下面的"start"这个命令下面开始寻根的,收到start命令,开始进行usb_init(),usb_init里面包含了对硬件寄存器的初始化usb_lowlevel_init(),初始化完成之后开始usb_scan_devices(),当执行到usb_new_device()时就是开始对usb协议执行的一个过程了,里面有很多很多函数,都是关于usb底层的一些东西,我就不多说了,直接copy过来就可以用的。

由于本人水平有限,不能很好的细说这一移植的过程,只是给大家提供一个可行的方法呵。

我从uboot下取出来操作U盘的文件包括了

common/usb.c & usb_storage.c & cmd_usb.c & cmd_fat.c

fs/fat/fat.c & file.c

cpu/arm926ejs/at91sam926x/usb_ohci.c & interrupts.c

disk/part.c & part_dos.c

以及相关的.h头文件,有兴趣的朋友也可以一起讨论讨论!

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值