⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 massstorage.h

📁 ARM主USB程序
💻 H
字号:
#ifndef MASS_H
#define MASS_H
#include "..\sl811\ezusb.h"
#include "..\sl811\ezregs.h"

extern BYTE epbulkout;
extern  BYTE epbulkin;

//-------------------------------------------------------------------------------
//              structure for cbw
//------------------------------------------------------------------------


typedef __packed struct 
{
    DWORD dCBWSignature;//=43425355h
    DWORD dCBWTag;         //命令块标签
    BYTE  dCBWDataTransferLength[4] ; //本次传输数据长度
    BYTE bmCBWFlags;         //本次传输数据的方向
    BYTE  bCBWLUN;           //接收该命令的设备的逻辑单元号Lun.如果该设备只有一个Lun则值为0。
    BYTE bCBWCBLength;   //本次SCSI命令的长度
    BYTE CBWCB[16];   //设备将执行的命令
} CBW,*pCBW;


//-------------------------------------------------------------------------------------

//                   structure for csw

//--------------------------------------------------------------------------------------

typedef __packed struct 
{
    DWORD dCSWSignature;   //CSW包标志,53425355h
    DWORD dCSWTag;        //与CBW的dCBWTag值相同
    DWORD dCSWDataResidue;  //还需要传输的数据个数
    BYTE bCSWStatus;     //指示该命令的执行情况
} CSW,*PCSW;

//UFI子类命令
#define Format_Unit                 0x04         //格式化单元
#define Inquiry                     0x12         //查询
#define Star_Stop                   0x1B         //启动/停止
#define Mode_Select                 0x55         //模式选择
#define Mode_Sense                  0x5A         //模式判别
#define Medium_Removal              0x1E         //禁止/允许介质移除
#define Read_10                     0x28         //读10
#define Read_12                     0xA8         //读12
#define Read_Capacity               0x25         //读容量
#define Read_Format_capacity        0x23         //读格式化容量
#define Request_Sense               0x03         //请求判断
#define Rezero_Unit                 0x01         //归0
#define Seek_10                     0x2B         //寻道10
#define Send_Diagnostic             0x1D         //发送诊断
#define Test_Unit_Ready             0x00         //测试单元准备
#define Verify                      0x2F         //验证
#define Write_10                    0x2A         //写10
#define Write_12                    0xAA         //写12
#define Write_and_Verify            0x2E         //写并验证
//
#define CBWSIGNATURE 0x55534243
#define CSWSIGNATURE 0x55534253
/*DPT(硬盘分区表)的数据结构*/
typedef struct 
{
     unsigned char BootFlag;      //活动标志,0x80为活动分区,0为非活动分区
     unsigned char StartHSC[3];   //分区开始的磙头、扇区、柱面
     unsigned char SystemID;      //分区类型
     unsigned char EndHSC[3];     //分区结束的磁头、扇区、柱面
     unsigned long StartSector;   //分区起始扇区数
     unsigned long TotalSector;   //分区总扇区数
}_DPT;
/*MBR(主引导扇区)的数据结构*/
typedef struct _MBR
{
     unsigned char Res[446];
     _DPT DPT1;
     _DPT DPT2;
     _DPT DPT3;
     _DPT DPT4;
     unsigned char EndFlag[2];
}MBR,*pMBR;

/*DBR(引导扇区)的数据结构*/
typedef struct _DBR
{
     unsigned char BS_jmpBoot[3];
     unsigned char BO_OEMName[8];
     
     unsigned int  BPB_BytsPerSec;    //每扇区的字节数
     unsigned char BPB_SecPerClus;    //每簇的扇区数
     unsigned int  BPB_RsvdSecCnt;    //保留扇区数
     unsigned char BPB_NumFATs;       //FAT表的个数
     unsigned int  BPB_RootEntCnt;    //根目录区中目录项数
     unsigned int  BPB_TotSec16;      //扇区总数
     unsigned char BPB_Media;         //存储介质描述
     unsigned int  BPB_FATSz16;       //每个FAT占用的扇区数
     unsigned int  BPB_SecPerTrk;     //每柱的扇区数
     unsigned int  BPB_NumHeads;      //磁头数
     unsigned long BPB_HiddSec;       //隐藏扇区数
     unsigned long BPB_TotSec32;      //
     unsigned char BPB_DrvNum;        // 
     
     unsigned char BS_Reserved1;
     unsigned char BS_BootSig;
     unsigned long BS_VoLID;
     unsigned char BS_VoLLab[11];
     unsigned char BS_FilSysType[8];
     
     unsigned char ExecutableCode[448];
     unsigned char EndFlag[2];
}DBR,*pDBR;

/*设备的信息*/
typedef struct _DeviceInfo
{
     unsigned int  BytePerSec;        //每扇区字节数
     unsigned char SecPerCluster;     //每簇扇区数
     unsigned int  RootEntCnt;        //根目录项数
     unsigned int  FATSz16;           //FAT表占用的扇区数
     unsigned int  FATStartSector1;   //FAT1表的开始扇区
     unsigned int  FATStartSector2;   //FAT2表的开始扇区
     unsigned int  FDTStartSector;    //根目录的开始扇区
     unsigned int  DATAStartSector;   //数据区的开始扇区
}DeviceInfo;
#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -