打印

基于ARM9的USB2.0 Host应用详解(FAT32系统),有完整源码

[复制链接]
5561|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Auir|  楼主 | 2012-7-26 11:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Auir 于 2012-9-4 17:58 编辑

联系方式: jackie.luo@ferry-semi.com ,020-85260431

Alphascale公司的ASAP1826支持USB2.0 host,otg,device功能,

该公司为芯片的USB host功能提供完整的SDK库,支持硬件驱动层,及协议层,并支持FAT32系统(提供完整源码)。


用户仅使用Fat32Init(),  Asap1826_UsbHostIrqInit()Asap1826_UsbHostprocess()  三个函数即可轻松实现USB-host功能,也可以根据自己的需求在SDK库中函数进行修改,以满足各自的特殊要求。其中FAT32文件系统已包含Fat32Init, FileOpen, FileCreate, FileRead, FileWrite等函数,用户无需在此方面耗费时间。


整个SDK由以下文件构成。
Disk group
Fat32.c
Diskio.c
Dlink.c

USB host group
Cmd_usb.c
Usb_storage.c
Asap1826T_usb.c
Musb_hcd.c
Musb_core.c
Part_dos.c
Part.c
Usb.c

Base gourp
ARM9的初始化代码,及其他驱动文件,比如SD卡驱动库真彩LCD驱动库,MP3库,UART,IIC,SPI库等等,这里不一一列出。

Borad.c    //main.c

14.1 模块概述
     USB模块主要使USB控制器作为USB主设备,使其能够枚举和控制USB设备连接到其上。主要由C程序编写,文件存放在usbhost文件夹中,如usb.c、Asap1826T_usb.c、usb_storage.c等。程序完成USB模块的初始化,该模块的中断处理,USB设备的枚举以及实现支持对USB设备中的文件的读写操作等。
     使用USB Host功能主要调用的三个函数接口分别为Asap1826T\Disk\Fat32.c文件中的Fat32Init()函数以及\Asap1826T\usbhost\Asap1826T_usb.c文件中的Asap1826_UsbHostIrqInit()函数和Asap1826_UsbHostprocess()函数。
     Fat32Init()函数用于初始化文件系统,Asap1826_UsbHostIrqInit()函数初始化USB Host中断,其中在侦测到有USB设备连接时,标记信号量g_usbconnect。Asap1826_UsbHostprocess()函数则可进行USBHost的处理,在其中可以添加用户例程。


14.2 数据结构描述

1) typedef struct block_dev_desc {
int      if_type;                   /* type of the interface */
int      dev;                        /* device number */
unsigned char part_type;    /* partition type */
unsigned char target;         /* target SCSI ID */
unsigned char lun;             /* target LUN */
unsigned char type;           /* device type */
unsigned char removable;   /* removable device */
lbaint_t  lba;                     /* number of blocks */
unsigned long blksz;          /* block size */
char      vendor [40+1];     /* IDE model, SCSI Vendor */
char      product[20+1];     /* IDE Serial no, SCSI product */
char     revision[8+1];        /* firmware revision */
unsigned long (*block_read)   (int dev,unsigned long start,lbaint_t blkcnt,void *buffer);
unsigned long (*block_write)  (int dev,unsigned long start,lbaint_t blkcnt,const void *buffer);
unsigned long (*block_erase) (int dev, unsigned long start,lbaint_t blkcnt);
void     *priv;                   /* driver private struct pointer */
}block_dev_desc_t;

该结构体是对要操作的设备的块的描述。
成员名          描述
If_type        接口类型
dev             设备号
part_type     分区类型
target          目标SCSI ID
lun              目标逻辑单元号
removable    可移动设备
lba               块的个数
blksz           单个块的大小
block_read   块的读操作
block_write   块的写操作

2) typedef struct SCSI_cmd_block{
unsigned char  cmd[16];       /* command        */
unsigned char  sense_buf[64]; /* for request sense  */
unsigned char  status;         /* SCSI Status   */
unsigned char  target;         /* Target ID    */
unsigned char  lun;             /* Target LUN          */
unsigned char  cmdlen;        /* command len   */
unsigned long  datalen;       /* Total data length  */
unsigned char * pdata;        /* pointer to data  */
unsigned char  msgout[12];    /* Messge out buffer(NOT USED) */
unsigned char  msgin[12];     /* Message in buffer  */
unsigned char  sensecmdlen;   /* Sense command len  */
unsigned long  sensedatalen;  /* Sense data len   */
unsigned char  sensecmd[6];   /* Sense command   */
unsigned long  contr_stat;    /* Controller Status  */
unsigned long  trans_bytes;   /* tranfered bytes  */
unsigned int  priv;
}ccb;

该结构体用于描述SCSI的命令。
成员名       描述
Cmd[16]    存放SCSI的命令信息
lun            将要操作的逻辑单元号
cmdlen       命令字长度
datalen      有效数据长度
pdata        指向数据puf的指针


相关帖子

沙发
lang6027| | 2015-1-29 14:32 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

254

帖子

9

粉丝