📄 bulkonly.h
字号:
/********************************************************************
COPYRIGHT (c) 2007 BY ROCK-CHIP FUZHOU
-- ALL RIGHTS RESERVED --
* File Name: UsbBulkOnly.h
* Author: Oliver Miao
* Created: 2007-6-20 16:29
* Modified:
* Revision: 1.00
*
*********************************************************************
* Module History
********************
*2007-6-20 16:30 Creater by Oli
*********************************************************************/
#ifndef _USB_BULK_ONLY_H
#define _USB_BULK_ONLY_H
//#include "UdcReg.h"
#include "UsbSpec.h"
//#define OK 0
//#define ERROR 1
//1常量定义
#define MAX_CDBLEN 0x10 //最长的CBW长度
//#define SD_CARD_EN 0 //定义SD卡使能
#define CD_ROM 0
//#define FLASH_DISK 1
#define MAX_LUN (FLASH_DISK+CD_ROM+SD_CARD_EN) /*最大支持的逻辑设备数*/
/*******************************************************************
CSW返回状态值
*******************************************************************/
#define CSW_GOOD 0x00 //命令通过
#define CSW_FAIL 0x01 //命令失败
#define CSW_PHASE_ERROR 0x02 //命令有误
/*******************************************************************
Bulk Only传输阶段
*******************************************************************/
#define K_CommandPhase 0x00
#define K_OutDataPhase 0x01
#define K_OutDataPhaseWrite 0x02
#define K_OutResponsePhase 0x03
#define K_InDataPhase 0x81
#define K_InDataPhaseRead 0x82
#define K_InResponsePhase 0x83
#define K_InCompletionPhase 0x84
#define K_XferDirMask 0x80
#define K_InCSWPhase 0x08
/*******************************************************************
Bulk Only命令集
*******************************************************************/
#define K_SCSICMD_TEST_UNIT_READY 0x00
#define K_SCSICMD_REZERO_UNIT 0x01
#define K_SCSICMD_REQUEST_SENSE 0x03
#define K_SCSICMD_FORMAT_UNIT 0x04
#define K_SCSICMD_INQUIRY 0x12
#define K_SCSICMD_MODE_SENSE_06 0x1a
#define K_SCSICMD_START_STOP_UNIT 0x1b
#define K_SCSICMD_SEND_DIAGNOSTIC 0x1d
#define K_SCSICMD_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e
#define K_SCSICMD_READ_FORMAT_CAPACITIES 0x23
#define K_SCSICMD_READ_CAPACITY 0x25
#define K_SCSICMD_READ_10 0x28
#define K_SCSICMD_WRITE_10 0x2a
#define K_SCSICMD_SEEK_10 0x2b
#define K_SCSICMD_WRITE_AND_VERIFY_10 0x2e
#define K_SCSICMD_VERIFY_10 0x2f
#define K_SCSICMD_MODE_SELECT_10 0x55
#define K_SCSICMD_MODE_SENSE_10 0x5a
#define K_SCSICMD_READ_12 0xa8
#define K_SCSICMD_WRITE_12 0xaa
/*******************************************************************
MMC-2命令集
*******************************************************************/
#define K_SCSICMD_READ_SUB_CHANNEL 0x42
#define K_SCSICMD_READ_TOC 0x43
#define K_SCSICMD_GET_CONFIGURATION 0x46
#define K_SCSICMD_GET_EVENT 0x4a
/*******************************************************************
Sense codes
*******************************************************************/
#define SCSI_SENSE_NO_SENSE 0x00
#define SCSI_SENSE_RECOVERED_ERROR 0x01
#define SCSI_SENSE_NOT_READY 0x02
#define SCSI_SENSE_MEDIUM_ERROR 0x03
#define SCSI_SENSE_HARDWARE_ERROR 0x04
#define SCSI_SENSE_ILLEGAL_REQUEST 0x05
#define SCSI_SENSE_UNIT_ATTENTION 0x06
#define SCSI_SENSE_DATA_PROTECT 0x07
#define SCSI_SENSE_BLANK_CHECK 0x08
#define SCSI_SENSE_UNIQUE 0x09
#define SCSI_SENSE_COPY_ABORTED 0x0A
#define SCSI_SENSE_ABORTED_COMMAND 0x0B
#define SCSI_SENSE_EQUAL 0x0C
#define SCSI_SENSE_VOL_OVERFLOW 0x0D
#define SCSI_SENSE_MISCOMPARE 0x0E
#define SCSI_SENSE_RESERVED 0x0F
/*******************************************************************
Additional Sense Codes(ASC)
*******************************************************************/
#define SCSI_ADSENSE_NO_SENSE 0x00
#define SCSI_ADSENSE_LUN_NOT_READY 0x04
#define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20
#define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21
#define SCSI_ADSENSE_INVALID_PARAMETER 0x26
#define SCSI_ADSENSE_INVALID_LUN 0x25
#define SCSI_ADSENSE_INVALID_CDB 0x24
#define SCSI_ADSENSE_MUSIC_AREA 0xA0
#define SCSI_ADSENSE_DATA_AREA 0xA1
#define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7
#define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3A
#define SCSI_ADSENSE_FORMAT_ERROR 0x31
#define SCSI_ADSENSE_CMDSEQ_ERROR 0x2C
#define SCSI_ADSENSE_MEDIUM_CHANGED 0x28
#define SCSI_ADSENSE_BUS_RESET 0x29
#define SCSI_ADWRITE_PROTECT 0x27
#define SCSI_ADSENSE_TRACK_ERROR 0x14
#define SCSI_ADSENSE_SAVE_ERROR 0x39
#define SCSI_ADSENSE_SEEK_ERROR 0x15
#define SCSI_ADSENSE_REC_DATA_NOECC 0x17
#define SCSI_ADSENSE_REC_DATA_ECC 0x18
/*******************************************************************
Additional sense code qualifier(ASCQ)
*******************************************************************/
#define SCSI_SENSEQ_FORMAT_IN_PROGRESS 0x04
#define SCSI_SENSEQ_INIT_COMMAND_REQUIRED 0x02
#define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED 0x03
#define SCSI_SENSEQ_BECOMING_READY 0x01
#define SCSI_SENSEQ_FILEMARK_DETECTED 0x01
#define SCSI_SENSEQ_SETMARK_DETECTED 0x03
#define SCSI_SENSEQ_END_OF_MEDIA_DETECTED 0x02
#define SCSI_SENSEQ_BEGINNING_OF_MEDIA_DETECTED 0x04
/*******************************************************************
Mode Sense/Select page constants.
*******************************************************************/
#define MODE_PAGE_RBC_DEVICE_PARAMETERS 0x06
#define PAGECTRL_CURRENT 0x00
#define PAGECTRL_CHANGEABLE 0x01
#define PAGECTRL_DEFAULT 0x02
#define PAGECTRL_SAVED 0x03
/*******************************************************************
Page field for Inquiry vital product data parameters
*******************************************************************/
#define SUPPORTED_PAGES 0x00
#define SERIAL_NUMBER_PAGE 0x80
#define DEVICE_INDENIFICATION_PAGE 0x83
#define USB_XFER_IDLE 0x00
#define USB_XFER_OUT_SUSPEND 0x01
#define USB_XFER_IN_START 0x02
#define USB_XFER_IN_SUSPEND 0x03
#define USB_XFER_END_SUSPEND 0x04
#define USB_XFER_END 0xff
/*
typedef struct _USB_MSDC_CBW
{
UINT32 dCBWSignature;
UINT32 dCBWTag;
UINT32 dCBWDataTransferLength;
UINT8 bCBWFlags;
UINT8 bCBWLUN;
UINT8 bCBWCBLength;
UINT8 CBWCB[16];
} USB_MSDC_CBW;
*/
typedef __packed struct _USB_MSDC_CBW
{
UINT32 dCBWSignature;
UINT32 dCBWTag;
UINT32 dCBWDataTransferLength;
UINT8 bCBWFlags;
UINT8 bCBWLUN;
UINT8 bCBWCBLength;
UINT8 Code; //15
UINT8 Reseved0;
UINT32 LBA;
UINT8 Reseved1;
UINT16 Len;
UINT8 Reseved2[7];
} USB_MSDC_CBW;
typedef struct _USB_MSDC_CSW
{
UINT32 dCSWSignature;//UINT8 dCSWSignature[4];
UINT32 dCSWTag;//UINT8 dCSWTag[4];
UINT32 dCSWDataResidue;//UINT8 dCSWDataResidue[4];
UINT8 bCSWStatus;
} USB_MSDC_CSW;
// Host Device Disagreement Matrix
enum _HOST_DEV_DISAGREE
{
CASEOK = 0,
CASE1,
CASE2,
CASE3,
CASE4,
CASE5,
CASE6,
CASE7,
CASE8,
CASE9,
CASE10,
CASE11,
CASE12,
CASE13,
CASECBW,
CASECMDFAIL
};
void UsbBulkOutPacket(void); // Bulk Out request handler
void UsbBulkInPacket(void); // Bulk In request handler
void BulkOnlyCmd(void) ;
void SCSICMD_Inquiry(void);
void SCSICMD_ReadFormatCapacities(void);
void SCSICMD_ReadCapacity(void);
void SCSICMD_Read10(void);
void SCSICMD_ModeSense06(void);
void SCSICMD_TestUnitReady(void);
void SCSICMD_RequestSense(void);
void SCSICMD_PreventAllowMediumRemoval(void);
void SCSICMD_StartStopUnit(void);
void SCSICMD_Write10(void);
void SCSICMD_Verify10(void);
void SCSICMD_ModeSense10(void);
void SCSICMD_ReadSubChannel(void);
void SCSICMD_ReadToc(void);
void SCSICMD_GetConfiguration(void);
void SCSICMD_GetEvent(void);
BOOL CBWValidVerify(void);
void CSWHandler(UINT8 HostDevCase, UINT16 DeviceTrDataLen);
void BuildSenseData(UINT8 SenseKey, UINT8 ASC, UINT8 ASCQ);
void CopyFlashReside(void);
void SendCSW(void);
#endif /* _USB_BULK_ONLY_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -