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

📄 bulkonly.h

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 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 + -