📄 bulkonly.h
字号:
/********************************************************************************
*********************************************************************************
COPYRIGHT (c) 2004 BY ROCK-CHIP FUZHOU
-- ALL RIGHTS RESERVED --
File Name: BulkOnly.h
Author: XUESHAN LIN
Created: 29th SEP 2004
Modified:
Revision: 1.00
********************************************************************************
********************************************************************************/
#ifndef _BULKONLY_H
#define _BULKONLY_H
//1可配置参数
#define MAX_LUN (FLASH_DISK+CD_ROM+SD_CARD_EN) /*最大支持的逻辑设备数*/
//1常量定义
#define MAX_CDBLEN 0x10 //最长的CBW长度
/*******************************************************************
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
//1函数原型声明
extern void BulkOnlyCmd(void) ;
extern void BulkOutDataRcv(void);
extern void SCSICMD_TestUnitReady(void);
extern void SCSICMD_RequestSense(void);
extern void SCSICMD_Inquiry(void);
extern void SCSICMD_PreventAllowMediumRemoval(void);
extern void SCSICMD_StartStopUnit(void);
extern void SCSICMD_ReadCapacity(void);
extern void SCSICMD_Read10(void);
extern void SCSICMD_Write10(void);
extern void SCSICMD_Verify10(void);
extern void SCSICMD_ModeSense10(void);
extern void SCSICMD_ReadFormatCapacities(void);
extern void SCSICMD_ModeSense06(void);
extern void SCSICMD_ReadSubChannel(void);
extern void SCSICMD_ReadToc(void);
extern void SCSICMD_GetConfiguration(void);
extern void SCSICMD_GetEvent(void);
extern bool CBWValidVerify(void);
extern void CSWHandler(uint8 HostDevCase,uint16 DeviceTrDataLen);
extern void BuildSenseData(uint8 SenseKey, uint8 ASC, uint8 ASCQ);
extern void CopyFlashReside(void);
extern void SendCSW(void);
/*******************************************************************/
//1结构定义
typedef struct _USBMSDC_CBW
{
uint8 dCBWSignature[4];
uint8 dCBWTag[4];
uint8 dCBWDataTransferLength[4];
uint8 bmCBWFlags;
uint8 bCBWLUN;
uint8 bCBWCBLength;
uint8 CBWCB[16];
} USBMSDC_CBW,*PUSBMSDC_CBW;
typedef struct _USBMSDC_CSW
{
uint8 dCSWSignature[4];
uint8 dCSWTag[4];
uint8 dCSWDataResidue[4];
uint8 bCSWStatus;
} USBMSDC_CSW;
typedef struct _MODE_PARAMETER_HEAD
{
uint8 DataLen;
uint8 MediumType;
uint8 DeviceParameter;
uint8 BlockDescriptorLen;
} MODE_PARAMETER_HEAD, * PMODE_PARAMETER_HEAD;
typedef struct _MODE_RBC_DEVICE_PARAMETERS_PAGE
{
uint8 PageCode : 6;
uint8 Reserved : 1;
uint8 PageSavable : 1;
uint8 PageLength;
uint8 WriteCacheDisable : 1;
uint8 Reserved1 : 7;
uint8 LogicalBlockSize[2];
uint8 NumberOfLogicalBlocks[5];
uint8 PowerPerformance;
uint8 Lockable : 1;
uint8 Formattable : 1;
uint8 Writable : 1;
uint8 Readable : 1;
uint8 Reserved2 : 4;
uint8 Reserved3;
}MODE_RBC_DEVICE_PARAMETERS_PAGE, *PMODE_RBC_DEVICE_PARAMETERS_PAGE;
// 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
};
typedef struct
{
uint16 len;
uint32 LBA;
uint32 tmp;
uint16 buf[1024];
} _USBCache;
//1函数原型声明
extern void BulkOutPacket(void);
extern void BulkInPacket(void);
//1全局变量
#ifdef USB
#undef EXT
#ifdef IN_BULKONLY
#define EXT
#else
#define EXT extern
#endif
EXT uint8 G_ucBulkStausPhase DRAM_USB; //BULK状态阶段状态字
EXT uint8 G_ucBulkPhase DRAM_USB; //BULK命令阶段状态字
EXT uint32 dCSWDataResidueVal DRAM_USB; //剩余字节数
EXT uint32 dCBWDaTrLen DRAM_USB; //命令长度
EXT uint8 *pBulkInDataBuff DRAM_USB; //IN包的数据指针
EXT uint8 *pBulkOutDataBuff DRAM_USB; //OUT包的数据指针
EXT uint16 SCSI_BulkOutDataLen DRAM_USB;
EXT uint32 SCSI_Write10LBA DRAM_USB;
EXT uint32 SCSI_Read10LBA DRAM_USB;
EXT USBMSDC_CSW pCSW DRAM_USB;
EXT uint8 BulkOutBuff[2048] DRAM_USB ALIGN_ATTR(2);
EXT uint8 BulkInBuff[512] DRAM_USB ALIGN_ATTR(2);
EXT uint8 SCSIDATA_RequestSense[18] DRAM_USB;
EXT uint8 MediaChanged DRAM_USB; //媒体改变
EXT uint8 CmdCnt DRAM_USB; //媒体改变
EXT _USBCache UsbCache DRAM_USB;
EXT uint8 FirstReadCap DRAM_USB;
EXT uint8 FirstTestReady DRAM_USB;
EXT uint32 CdromBlockAddr DRAM_USB;
EXT uint32 CdromCap DRAM_USB;
#endif
//1表格定义
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -