📄 rbc.h
字号:
/*-*-*-*-*-*-*-*-*-*-* (C) 2000 STMicroelectronics *-*-*-*-*-*-*-*-*-*-*-*-*-*
PROJECT : ST92163 USB Mass Storage Class - Bulk-Only
COMPILER : ST9 C
MODULE : RBC.h
VERSION : V 4.0
CREATION DATE : 19/09/2000
AUTHOR : Microcontroller Division - ePI BU Application Lab
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
DESCRIPTION: Definitions for interface with RBC layer
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
typedef struct _INQUIRY_DATA {
BYTE Peripheral_Qualfier:3; // default = 0x00
BYTE Peripheral_Device_Type:5; // = 0x0E
// 0: 0x0E
BYTE RMB:1; // Removable medium, default = 0x01
BYTE Reserved:7; // = 0x00
// 1: 0x80
BYTE Version; // default = 0x04;
// 2: 0x04
BYTE AERC:1; // Asynchronous event reporting capability, default = 0x00
BYTE Obsolete:1; // = 0x00
BYTE NormACA:1; // Normal ACA Supported bit, default = 0x00
BYTE HiSup:1; // Hierarchical support, default = 0x00
BYTE Response_Data_Format:4; // = 0x02
// 3: 0x02
BYTE Additional_Length; // sizeof(INQUIRY_DATA) - 5
// 4: 91 = 0x5B
BYTE SCCS:1; // SCC support, default = 0x00
BYTE Reserved1:7; // = 0x00
// 5: 0x00
BYTE BQue:1; // The basic queuing, default = 0x00
BYTE EncServ:1; // Enclosure Services, default = 0x00
BYTE VS:1; //
BYTE MultiP:1; // Multi port, default = 0x00
BYTE MChngr:1; // Medium changer, default = 0x00
BYTE Obsolete1:2; // = 0x00
BYTE Addr16:1; // Reserved in this spec., = 0x00
// 6: 0x00
BYTE RelAdr:1; // = 0x00
BYTE Obsolete2:1; // 0x00
BYTE WBUS16:1; // Reserved in this spec., = 0x00
BYTE SYNC:1; // Reserved in this spec., = 0x00
BYTE Linked:1; // = 0x00
BYTE TranDis:1; // Reserved in this spec., = 0x00
BYTE CmdQue:1; // Command queuing, default = 0x00
BYTE VS1:1;
// 7: 0x00
BYTE Vendor_Identification[8]; // "STM "
// 8-15: APPLI
BYTE Product_Identification[16]; // "Flash R/W Demo "
// 16-31: APPLI
BYTE Procuct_Revision_Level[4]; // "V1.1"
// 32-35: APPLI
BYTE Vendor_Specific[20];
// 36-55: 0x00, 0x00, ....
BYTE Reserved3:4;
BYTE Clocking:2; // Not used
BYTE QAS:1; // Not used
BYTE IUS:1; // Not used
// 56: 0x00
BYTE Reserved4;
// 57: 0x00
WORD Version_descriptor[8]; // See Table 57
// 58-73: 0x0000 ......, OR 0x0220, 0x0000, .....
BYTE Reserved5[22];
// 74-95: 0x00, 0x00, .......
} INQUIRY_DATA;
typedef struct _MEDIA_CAPACITY {
DWORD Last_Logical_Address; // big endian
DWORD Block_Length; // in bytes, big endian
} MEDIA_CAPACITY;
typedef struct _SENSE_DATA {
/*
BYTE Valid:1; // default = 0x0
BYTE Response_Code:7; // default = 0x70
*/
BYTE Resp_Code;
// 0: 0x70
BYTE Segment_Number; // default = 0x00
// 1: 0x00
/*
BYTE FileMark:1; // reserved, default = 0x0
BYTE End_of_Medium:1; // reserved, default = 0x0
BYTE Incorrect_Length:1; // logical block length did not match the medium. default = 0x0
BYTE Reserved:1; // default = 0x0
BYTE Sense_Key:4; // application related
*/
BYTE Sense_Key;
// 2: 0000????b
DWORD Information; // reserved, default = 0x00000000
// 3: 0x00000000
BYTE Additional_sense_length; // sizeof(SENSE_DATA) - 7, default = 0x0c
// 7: 0x0c
DWORD Cmd_Information; // reserved, default = 0x00000000
// 8: 0x00000000
BYTE ASC; // Additional Sense Code, applicatoin related
// 12: 0x??
BYTE ASCQ; // Additional Sense Code Qualifier, application related
// 13: 0x??
BYTE FRUC; // Field Replaceable Unit Code, reserved
// 14: 0x00
/*
BYTE SKSV:1;
BYTE TBD:7;
*/
BYTE TBD;
// 15: 0x00
WORD Sense_Key_Specific;
// 16: 0x0000
BYTE ASB[2]; // Additional Sense Bytes, reserved
// 18: 0x00, 0x00
} SENSE_DATA;
typedef struct _RBC_CALLS {
BYTE (*Inquiry_Data)(BYTE Page, BYTE* Inquiry_Buffer);
BYTE (*Mode_Select6)(BYTE Length, BYTE* Para_List);
BYTE (*Mode_Sense6)(BYTE PC_Page, BYTE* Para_List);
BYTE (*Prevent_Removal)(BYTE Prevent);
BYTE (*Read_Capacity)(BYTE* Capacity);
BYTE (*Start_Stop)(BYTE Power_Control);
BYTE (*Test_Ready)(void);
WORD (*Read_Data10)(void);
WORD (*Write_Data10)(void);
WORD (*Verify_Data10)(void);
BYTE (*Read_Block)(BYTE* Buffer);
BYTE (*Write_Block)(BYTE* Buffer);
BYTE (*Verify_Block)(BYTE* Buffer);
#ifdef FORMAT_MEDIA
BYTE (*Format_Media)(BYTE Cmd_Flags);
#endif
void (*Release_SenseData)(BYTE* Sense_Buffer);
WORD (*Mode_Sense10)(BYTE PC_Page, BYTE* Para_List);
} RBC_CALLS;
#define RBC_GOOD 1
#define RBC_FAIL 0
#define BOT_STATUS_GOOD 0x00
#define BOT_STATUS_FAILED 0x01
#define BOT_STATUS_PHASE 0x02
#define BOT_STATUS_MORE_DATA 0xFF
typedef struct _CMD_INQUIRY {
BYTE Op_code;
BYTE Reserved:6;
BYTE CmdDt:1;
BYTE Evpd:1;
BYTE Page;
BYTE Reserved1;
BYTE Allocation_Length;
BYTE Control;
} CMD_INQUIRY;
typedef struct _CMD_MODE_SELECT6 {
BYTE Op_code;
BYTE Reserved0:3;
BYTE PF:1; // Page Format
BYTE Reserved1:3;
BYTE SP:1; // Save Page
BYTE Reserved2;
BYTE Reserved3;
BYTE Para_Length;
BYTE Control;
} CMD_MODE_SELECT6;
typedef struct _CMD_MODE_SENSE6 {
BYTE Op_code;
BYTE Reserved0:4;
BYTE DBD:1;
BYTE Reserved1:3;
BYTE PC_Page;
BYTE Reserved;
BYTE Para_Length;
BYTE Control;
} CMD_MODE_SENSE6;
typedef struct _CMD_MODE_SENSE10 {
BYTE Op_code;
BYTE Reserved0:4;
BYTE DBD:1;
BYTE Reserved1:3;
BYTE PC_Page;
BYTE Reserved[4];
WORD Para_Length;
BYTE Control;
} CMD_MODE_SENSE10;
typedef struct _CMD_PRENVENT_REMOVAL {
BYTE Op_Code;
BYTE Reserved[3];
BYTE Reserved_Prevent;
BYTE Control;
} CMD_PRENVENT_REMOVAL;
typedef struct _CMD_READ_CAPACITY {
BYTE Op_Code;
BYTE Reserved[8];
BYTE Control;
} CMD_READ_CAPACITY;
typedef struct _CMD_START_STOP {
BYTE Op_Code;
BYTE Reserved0:7;
BYTE Immed:1;
BYTE Reserved[2];
BYTE Power_Control;
BYTE Control;
} CMD_START_STOP;
typedef struct _CMD_REQUEST_SENSE {
BYTE Op_code;
BYTE Reserved[3];
BYTE Length;
BYTE Control;
} CMD_REQUEST_SENSE;
typedef struct _CMD_READ10 {
BYTE Op_code;
BYTE Reserved0;
DWORD Block_Address;
BYTE Reserved1;
WORD Length;
BYTE Control;
} CMD_READ10;
typedef struct _CMD_WRITE10 {
BYTE Op_code;
BYTE Reserved0; // Assume FUA bit is 0
DWORD Block_Address;
BYTE Reserved1;
WORD Length;
BYTE Control;
} CMD_WRITE10;
typedef struct _CMD_VERIFY10 {
BYTE Op_code;
BYTE Reserved0;
DWORD Block_Address;
BYTE Reserved1;
WORD Length;
BYTE Control;
} CMD_VERIFY10;
BYTE RBC_Inquiry(CMD_INQUIRY *pCmd, BYTE *repBuf, WORD *repCnt);
WORD RBC_Read10(CMD_READ10 *pCmd, BYTE *repBuf, WORD *repCnt);
BYTE RBC_Request_Sense(CMD_REQUEST_SENSE *pCmd, BYTE *repBuf, WORD *repCnt);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -