本帖最后由 Auir 于 2012-9-4 17:58 编辑
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的指针
|