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

📄 bulkonly.h

📁 瑞芯微RK2608固件源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/********************************************************************************
*********************************************************************************
			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 + -