📄 massstorage.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 + -