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

📄 hal.h

📁 USB驱动程序,和NANDflash的驱动, 包括文件系统,cpu是arm
💻 H
📖 第 1 页 / 共 2 页
字号:
    unsigned char OperationCode;	/* 2AH      */
    unsigned char VendorSpecific;
    union{
	 struct
         {
	        unsigned char LBA_3;
	        unsigned char LBA_2;
	        unsigned char LBA_1;
	        unsigned char LBA_0;
          } LBA_W8 ;

	 unsigned int LBA_W32;
	}LBA;
    unsigned char Reserved2;
    unsigned short XferLength;
    unsigned char Control;
} WRITE_RBC, *PWRITE_RBC;

/* VERIFY Command */
typedef struct _VERIFY_RBC {
    	unsigned char OperationCode;	/* 2FH */
    	unsigned char Reserved0;
	unsigned char LBA_3;			/* Big Endian */
	unsigned char LBA_2;
	unsigned char LBA_1;
	unsigned char LBA_0;
	unsigned char Reserved1;
    	unsigned char VerifyLength_1;		/* Big Endian */
	unsigned char VerifyLength_0;
	unsigned char Control;
} VERIFY_RBC, *PVERIFY_RBC;

/*
// INQUIRY Command
*/
typedef struct _INQUIRY_SPC {
	unsigned char OperationCode;	/* 12H */
	unsigned  EnableVPD:1 ;
    	unsigned  CmdSupportData:1 ;
	unsigned  Reserved0:6 ;
	unsigned char PageCode;
	unsigned char Reserved1;
	unsigned char AllocationLen;
    	unsigned char Control;
} INQUIRY_SPC, *PINQUIRY_SPC;


typedef struct _STD_INQUIRYDATA {
    unsigned  DeviceType : 5;
    unsigned  Reserved0 : 3;

    unsigned  Reserved1 : 7;
    unsigned  RemovableMedia : 1;

    unsigned char Reserved2;

    unsigned Reserved3 : 5;
    unsigned NormACA : 1;
    unsigned Obsolete0 : 1;
    unsigned AERC : 1;

    unsigned char Reserved4[3];

    unsigned SoftReset : 1;
    unsigned CommandQueue : 1;
	unsigned Reserved5 : 1;
	unsigned LinkedCommands : 1;
	unsigned Synchronous : 1;
	unsigned Wide16Bit : 1;
	unsigned Wide32Bit : 1;
	unsigned RelativeAddressing : 1;

	unsigned char VendorId[8];

	unsigned char ProductId[16];

	unsigned char ProductRevisionLevel[4];

    unsigned char VendorSpecific[20];
    unsigned InfoUnitSupport : 1;
    unsigned QuickArbitSupport : 1;
    unsigned Clocking : 2;
    unsigned Reserved6 : 4;

    unsigned char  Reserved7 ;
    unsigned short VersionDescriptor[8] ;

    unsigned char Reserved8[22];
} STD_INQUIRYDATA, *PSTD_INQUIRYDATA;

typedef struct _SERIALNUMBER_PAGE {
    unsigned DeviceType : 5;
    unsigned DeviceTypeQualifier : 3;

    unsigned char PageCode ;
    unsigned char Reserved0 ;

    unsigned char PageLength ;
    unsigned char SerialNumber[24] ;
}VPD_SERIAL_PAGE,* PVPD_SERIAL_PAGE;

#define ASCII_ID_STRING 32
typedef struct _ID_DESCRIPTOR {
	unsigned CodeSet : 4;
	unsigned Reserved0 : 4;

	unsigned IDType : 4;
    	unsigned Association : 2;
    	unsigned Reserved1 : 2;

    	unsigned char    Reserved2;

	unsigned char IDLength ;
	unsigned char AsciiID[ASCII_ID_STRING];
} ASCII_ID_DESCRIPTOR,* PASCII_ID_DESCRIPTOR;

typedef struct _DEVICE_ID_PAGE
{
    unsigned DeviceType : 5;
    unsigned DeviceTypeQualifier : 3;
    unsigned PageCode ;
    unsigned Reserved0 ;
    unsigned PageLength ;
    ASCII_ID_DESCRIPTOR   AsciiIdDescriptor[1];
} VPD_DEVICE_ID_PAGE, * PVPD_DEVICE_ID_PAGE;

/* Mode Select */
typedef struct _MODE_SELECT_SPC {
	unsigned char OperationCode;	/* 15H */
	unsigned SavePage : 1 ;
	unsigned Reseved0 : 3 ;
	unsigned PageFormat : 1 ;
	unsigned Reserved1 : 3 ;
	unsigned char Reserved2[2];
	unsigned char ParameterLen;
	unsigned char Control;
} MODE_SELECT_SPC, * PMODE_SELECT_SPC;

typedef struct _MBR_BLOCK {
  unsigned char Res[454];
  unsigned int  StartSector;
  unsigned int  TotalSector;
  unsigned char Res1[50];
} MBR_BLOCK,* PMBR_BLOCK;

typedef struct _BPB_BLOCK {
  unsigned char BS_jmpBoo[3];
  unsigned char BS_OEMName[8];
  unsigned short BPB_BytesPerSec;
  unsigned char BPB_SecPerClus;
  unsigned char BPB_RsvdSecCn[2];
  unsigned char BPB_NumFATs;
  unsigned short BPB_RootEntCnt;
  INT16 BPB_TotSec16;
  INT8 BPB_Media;
  INT16 BPB_FATSz16;
  INT16 BPB_SecPerTrk;
  INT16 BPB_NumHeads;
  unsigned long BPB_HiddSec;
  unsigned long BPB_TotSec32;
  INT8 BS_DrvNum;
  INT8 BS_Reserved1;
  INT8 BS_BootSig;
  INT8 BS_VolID[4];
  INT8 BS_VolLab[11];
  INT8 BS_FilSysType[8];
  INT8 ExecutableCode[448];
  INT8 Marker[2];
} BPB_BLOCK,* PBPB_BLOCK;
typedef struct _SYS_INFO_BLOCK{
  unsigned long StartSector;
  unsigned long TotalSector;
  //INT8 BS_jmpBoo[3];
  //INT8 BS_OEMName[8];
  INT16 BPB_BytesPerSec;
  INT8 BPB_SecPerClus;
  //INT8 BPB_RsvdSecCn[2];
  INT8 BPB_NumFATs;
  INT16 BPB_RootEntCnt;
  INT16 BPB_TotSec16;
  INT8 BPB_Media;
  INT16 BPB_FATSz16;
  INT16 BPB_SecPerTrk;
  INT16 BPB_NumHeads;
  unsigned long BPB_HiddSec;
  unsigned long BPB_TotSec32;
  INT8 BS_DrvNum;
  //INT8 BS_Reserved1;
  INT8 BS_BootSig;
  INT8 BS_VolID[4];
  INT8 BS_VolLab[11];
  INT8 BS_FilSysType[8];
  //INT8 ExecutableCode[448];
  //INT8 Marker[2];
  ///////////////////////////////
  unsigned long FatStartSector;
  unsigned long RootStartSector;
  //unsigned long DataStartSector;
  unsigned long FirstDataSector;
  //unsigned long FirstSectorofCluster;
} SYS_INFO_BLOCK,* PSYS_INFO_BLOCK;

typedef struct _FILE_INFO{
  unsigned char bFileOpen;
  unsigned int StartCluster;
  unsigned long LengthInByte;
  unsigned int ClusterPointer;
  unsigned long SectorPointer;
  unsigned int OffsetofSector;
  unsigned char SectorofCluster;
  unsigned long pointer;
  unsigned int	FatSectorPointer;
  

} FILE_INFO, * PFILE_INFO;

typedef struct _DIR_INFO{
	unsigned char name[8];
	unsigned char extension[3];
	unsigned char attribute;
	unsigned char Reserved[10];
	unsigned int lastUpdateDate;
	unsigned int lastUpdateTime;
	unsigned int startCluster;
	unsigned long length;
} DIR_INFO,* PDIR_INFO;
/*
// Mode Sense
*/
typedef struct _MODE_SENSE_SPC {
    INT8 OperationCode;	/* 1AH */
    unsigned  Reseved0 : 3 ;
    unsigned  DisableBlockDescriptor : 1 ;
    unsigned  Reserved0 : 4 ;
    unsigned  PageCode:6 ;
    unsigned  PageControl : 2 ;
    INT8 Reserved1;
    INT8 ParameterLen;
    INT8 Control;
} MODE_SENSE_SPC, * PMODE_SENSE_SPC;

typedef struct _MODE_PARAMETER_HEAD {
    INT8 DataLen;
    INT8 MediumType;
    INT8 DeviceParameter;
    INT8 BlockDescriptorLen;
} MODE_PARAMETER_HEAD, * PMODE_PARAMETER_HEAD;

/*
// Define Device Capabilities page.
*/
typedef struct _MODE_RBC_DEVICE_PARAMETERS_PAGE {
    unsigned  PageCode : 6;
    unsigned  Reserved : 1;
    unsigned  PageSavable : 1;
    INT8 PageLength;
    unsigned  WriteCacheDisable : 1;
    unsigned  Reserved1 : 7;
    INT8 LogicalBlockSize[2];
    INT8 NumberOfLogicalBlocks[5];
    INT8 PowerPerformance;
    unsigned  Lockable : 1;
    unsigned  Formattable : 1;
    unsigned  Writable : 1;
    unsigned  Readable : 1;
    unsigned  Reserved2 : 4;
    INT8 Reserved3;
}MODE_RBC_DEVICE_PARAMETERS_PAGE, *PMODE_RBC_DEVICE_PARAMETERS_PAGE;

/*
// prevent/allow medium removal
*/
typedef struct _MEDIA_REMOVAL_SPC {
	INT8 OperationCode;    /* 1EH */
	INT8 Reserved0[3];
	INT8 Prevent;
	//INT8 Reserved1:6 ;
	//INT8 Control;
} MEDIA_REMOVAL_SPC, *PMEDIA_REMOVAL_SPC;

/*
// Request Sense
*/
typedef struct _REQUEST_SENSE_SPC {
    INT8 OperationCode;    /* 03H */
    INT8 Reserved[3];
    INT8 AllocationLen;
    INT8 Control;
} REQUEST_SENSE_SPC, *PREQUEST_SENSE_SPC;

typedef struct _REQUEST_SENSE_DATA {
    unsigned  ResponseCode : 7;
    unsigned  Valid : 1;

    INT8 SegmentNum;

    unsigned  SenseKey : 4;
    unsigned  Reserved0 : 1;
    unsigned  WrongLenIndicator : 1;
    unsigned  EndofMedium : 1;
    unsigned  FileMark : 1;

    INT8 Info_0;
    INT8 Info_1;
    INT8 Info_2;
    INT8 Info_3;

    INT8 AdditionalSenseLen;

    INT8 CommandSpecInfo_0;
    INT8 CommandSpecInfo_1;
    INT8 CommandSpecInfo_2;
    INT8 CommandSpecInfo_3;

    INT8 ASC;
    INT8 ASCQ;
    INT8 FieldReplacableUnitCode;
    unsigned  SenseKeySpec_0 : 7;
    unsigned  SenseKeySpecValid : 1;
    INT8 SenseKeySpec_1;
    INT8 SenseKeySpec_2;

} REQUEST_SENSE_DATA, *PREQUEST_SENSE_DATA;

/*
// Test Unit Ready
*/
typedef struct _TEST_UNIT_SPC {
	INT8 OperationCode;    /* 00H */
	INT8 Reserved[4];
	INT8 Control;
} TEST_UNIT_SPC, *PTEST_UNIT_SPC;

/*
// Write Buffer
*/
typedef struct _WRITE_BUFFER_SPC {
    INT8 OperationCode;    /* 3BH */
    unsigned  Mode:4 ;
    unsigned  Reserved0:4 ;
	INT8 BufferID;
    INT8 BufferOff_2;
    INT8 BufferOff_1;
    INT8 BufferOff_0;
    INT8 ParameterLen_2;
    INT8 ParameterLen_1;
	INT8 ParameterLen_0;
    INT8 Control;
} WRITE_BUFFER_SPC, *PWRITE_BUFFER_SPC;

typedef union _CDB_RBC {
    GENERIC_CDB             Cdb_Generic;
  
     // RBC commands
    GENERIC_RBC             RbcCdb_Generic;

    FORMAT_RBC              RbcCdb_Format;
    READ_RBC                RbcCdb_Read;
    READ_CAPACITY_RBC       RbcCdb_ReadCapacity;
    START_STOP_RBC          RbcCdb_OnOffUnit;
    SYNCHRONIZE_CACHE_RBC   RbcCdb_SyncCache;
    VERIFY_RBC              RbcCdb_Verify;
    WRITE_RBC               RbcCdb_Write;

   
    // SPC-2 commands
   
    INQUIRY_SPC             SpcCdb_Inquiry;
    MODE_SELECT_SPC         SpcCdb_ModeSelect;
    MODE_SENSE_SPC          SpcCdb_ModeSense;
    MEDIA_REMOVAL_SPC       SpcCdb_Remove;
    REQUEST_SENSE_SPC       SpcCdb_RequestSense;
    TEST_UNIT_SPC           SpcCdb_TestUnit;
    WRITE_BUFFER_SPC        SpcCdb_WriteBuffer;

    // ATAPI Commands
    READ_10         CmdRead10;
    WRITE_10        CmdWrite10;
    MODE_SELECT_10  CmdModeSel10;
    MODE_SENSE_10   CmdModeSen10;
    //////////////////////////////////////
    READ_LONG_CMD	SpcCdb_ReadLong;

} CDB_RBC, *PCDB_RBC;




#define CBW_SIGNATURE   0x43425355
#define CSW_SIGNATURE   0x53425355

typedef struct _COMMAND_BLOCK_WRAPPER{
    unsigned int   dCBW_Signature;
    unsigned int   dCBW_Tag;
    unsigned int   dCBW_DataXferLen;
    unsigned char  bCBW_Flag;
    unsigned char  bCBW_LUN;
    unsigned char  bCBW_CDBLen;
    CDB_RBC cdbRBC;
    //////////////////////////////////////
} CBW, *PCBW;

typedef struct _COMMAND_STATUS_WRAPPER{
    unsigned int   dCSW_Signature;
    unsigned int   dCSW_Tag;
    unsigned int   dCSW_DataResidue;
    unsigned char  bCSW_Status;
} CSW, *PCSW;

typedef union _TPBULK_STRUC {
    CBW     TPBulk_CommandBlock;
    CSW     TPBulk_CommandStatus;
}TPBLK_STRUC, * PTPBLK_STRUC;



#define ATTR_READ_ONLY	0x01
#define ATTR_HIDDEN		0x02
#define ATTR_SYSTEM		0x04
#define ATTR_VOLUME_ID	0x08
#define ATTR_DIRECTORY	0x10
#define ATTR_ARCHIVE	0x20

struct _BPB
{
	BYTE NumFATs;
	BYTE SecPerClus;
	WORD BytsPerSec;
	WORD RsvdSecCnt;
	WORD RootEntCnt;
	unsigned int TotSec;
	unsigned int FATSz;
};
struct _FatGet
{
	INT32 DirSectorNum;
	int DirIndex;
	char filename[13];
};

struct _DIR
{
	BYTE Name[11];
	BYTE Attr;
	BYTE NTRes;
	BYTE CrtTimeTenth;
	WORD CrtTime;
	WORD CrtDate;
	WORD LstAccDate;
	WORD FstClusHI;
	WORD WrtTime;
	WORD WrtDate;
	WORD FstClusLO;
	INT32 FileSize;
};

struct _STAT
{
	BYTE Attr;
	BYTE CrtTimeTenth;
	WORD CrtTime;
	WORD CrtDate;
	WORD LstAccDate;
	WORD WrtTime;
	WORD WrtDate;
	INT32 FileSize;
};

struct _FILE
{
	int valid; // 1 valid, 0 free.
	INT32 DirSectorNum;
	int DirIndex;
	INT32 StartSectorNum;
	INT32 CurrentSectorNum;
	INT32 SectorOffset;
	struct _DIR dir;
	unsigned long offset;
};

typedef struct
{
	unsigned Day:5;
	unsigned Month:4;
	unsigned Year:7;
} _FatDate;

typedef struct
{
	unsigned Second_2s : 5;
	unsigned Minutes : 6;
	unsigned Hours : 5;
}_FatTime;
int epBulkRcv(unsigned char *pBuffer,unsigned int len);
int epBulkSend(unsigned char *pBuffer,unsigned int len,unsigned int lba);
unsigned char RBC_Write(unsigned long lba,unsigned char len,unsigned char *pBuffer,unsigned char timewait);

⌨️ 快捷键说明

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