SAMV71 Xplained Ultra Software Package 1.5

Collaboration diagram for Usbd_msd:

Data Structures

struct  MSDParseData
struct  MSCbw
struct  MSCsw
struct  _MSDConfigurationDescriptors
struct  _MSDConfigurationDescriptorsOTG
struct  MSDTransfer
struct  MSDCommandState
struct  MSDDriver
struct  PMSDIOFifo
 FIFO buffer for READ/WRITE (disk) operation of a mass storage device. More...
struct  MSDLun
 LUN structure. More...
struct  _SBCInquiry
struct  _SBCInquiryData
struct  _SBCRead10
struct  SBCReadCapacity10
struct  SBCReadCapacity10Data
struct  SBCRequestSense
struct  SBCRequestSenseData
struct  _SBCTestUnitReady
 SBCTestUnitReady Data structure for the TEST UNIT READY command. More...
struct  SBCWrite10
struct  _SBCMediumRemoval
struct  _SBCModeSense6
struct  _SBCModeParameterHeader6
struct  _SBCInformationalExceptionsControl
struct  _SBCReadWriteErrorRecovery
union  SBCCommand

Modules

 MSD Device Descriptor IDs
 USBD General Configure
 USB MassStorage Configure
 MSD Subclass Codes
 MSD Protocol Codes
 MSD CBW Definitions
 MSD CSW Definitions
 MSD Driver Possible states
 MSD Driver Result Codes
 MSD Driver Action Cases
 MSD Driver Xfr Directions
 SBC Operation Codes
 SBC Periph. Qualifiers
 SBC Periph. Types
 SBC Sense Response Codes
 SBC Sense Keys
 SBC Sense Additional
 MSD Endian Macros
 SBC Command States

Defines

#define MIN(a, b)   ((a < b) ? a : b)
#define MIN(a, b)   ((a < b) ? a : b)
#define DEFAULT_LUN_BLOCK_SIZE   512
#define MSD_BULK_ONLY_RESET   0xFF
#define MSD_GET_MAX_LUN   0xFE
#define MSDIO_IDLE   0
#define MSDIO_START   1
#define MSDIO_WAIT   2
#define MSDIO_NEXT   3
#define MSDIO_PAUSE   4
#define MSDIO_ABORT   5
#define MSDIO_DONE   6
#define MSDIO_ERROR   7
#define MSDIO_READ10_CHUNK_SIZE   (128 * 512)
#define MSDIO_WRITE10_CHUNK_SIZE   (128 * 512)
#define MSDIOFifo_IncNdx(ndx, sectSize, bufSize)
#define MED_STATUS_SUCCESS   0x00
#define MED_STATE_READY   0x00
#define MED_STATE_BUSY   0x01
#define LUN_STATUS_SUCCESS   0x00
#define LUN_STATUS_ERROR   0x02
#define LUN_NOT_PRESENT   0x00
#define LUN_EJECTED   0x01
#define LUN_CHANGED   0x10
#define LUN_TRANS_READY   LUN_CHANGED
#define LUN_READY   0x11
#define SBC_SPC_VERSION_4   0x06
 Version value for the SBC-3 specification.
#define SBC_TPGS_NONE   0x0
 Values for the TPGS field returned in INQUIRY data.
#define SBC_TPGS_ASYMMETRIC   0x1
#define SBC_TPGS_SYMMETRIC   0x2
#define SBC_TPGS_BOTH   0x3
#define SBC_VERSION_DESCRIPTOR_SBC_3   0x04C0
 Version descriptor value for the SBC-3 specification.
#define SBC_MEDIUM_TYPE_DIRECT_ACCESS_BLOCK_DEVICE   0x00
 MEDIUM TYPE field value for direct-access block devices.
#define SBC_MRIE_NO_REPORTING   0x00
 MRIE field values.
#define SBC_MRIE_ASYNCHRONOUS   0x01
#define SBC_MRIE_GENERATE_UNIT_ATTENTION   0x02
#define SBC_MRIE_COND_GENERATE_RECOVERED_ERROR   0x03
#define SBC_MRIE_UNCOND_GENERATE_RECOVERED_ERROR   0x04
#define SBC_MRIE_GENERATE_NO_SENSE   0x05
#define SBC_MRIE_ON_REQUEST   0x06
#define SBC_PAGE_READ_WRITE_ERROR_RECOVERY   0x01
 Supported mode pages.
#define SBC_PAGE_INFORMATIONAL_EXCEPTIONS_CONTROL   0x1C
#define SBC_PAGE_RETURN_ALL   0x3F
#define SBC_PAGE_VENDOR_SPECIFIC   0x00

Typedefs

typedef void(* fMEDCallback )(void *pArg, uint8_t bStatus, uint32_t dwTransferred, uint32_t dwRemaining)
typedef void(* MSDLunDataMonitorFunction )(uint8_t flowDirection, uint32_t dataLength, uint32_t fifoNullCount, uint32_t fifoFullCount)

Functions

void MSDDriver_Initialize (const USBDDriverDescriptors *pDescriptors, MSDLun *pLuns, unsigned char numLuns)
void MSDDriver_ConfigurationChangeHandler (uint8_t cfgnum)
void MSDDriver_RequestHandler (const USBGenericRequest *request)
void MSDD_StateMachine (MSDDriver *pMsdDriver)
 COMPILER_ALIGNED (32)
void MSDFunction_Initialize (USBDDriver *pUsbd, uint8_t bInterfaceNb, MSDLun *pLuns, uint8_t numLuns)
void MSDFunction_Configure (USBGenericDescriptor *pDescriptors, uint16_t wLength)
uint32_t MSDFunction_RequestHandler (const USBGenericRequest *request)
void MSDFunction_StateMachine (void)
void MSDIOFifo_Init (MSDIOFifo *pFifo, void *pBuffer, unsigned int bufferSize)
 Initializes a MSDIOFifo instance.
void LUN_Init (MSDLun *lun, void *media, uint8_t *ioBuffer, uint32_t ioBufferSize, uint32_t baseAddress, uint32_t size, uint16_t blockSize, uint8_t protected, void(*dataMonitor)(uint8_t flowDirection, uint32_tdataLength, uint32_tfifoNullCount, uint32_tfifoFullCount))
 Initializes a LUN instance. Must be invoked at least once even no Media is linked.
uint32_t LUN_Eject (MSDLun *lun)
 Eject the media from a LUN.
uint32_t LUN_Write (MSDLun *lun, uint32_t blockAddress, void *data, uint32_t length, TransferCallback callback, void *argument)
 Writes data on the a LUN starting at the specified block address.
uint32_t LUN_Read (MSDLun *lun, uint32_t blockAddress, void *data, uint32_t length, TransferCallback callback, void *argument)
 Reads data from a LUN, starting at the specified block address.
void SBC_UpdateSenseData (SBCRequestSenseData *requestSenseData, unsigned char senseKey, unsigned char additionalSenseCode, unsigned char additionalSenseCodeQualifier)
 Updates the sense data of a LUN with the given key and codes.
unsigned char SBC_GetCommandInformation (void *command, unsigned int *length, unsigned char *type, MSDLun *lun)
 Return information about the transfer length and direction expected by the device for a particular command.
unsigned char SBC_ProcessCommand (MSDLun *lun, MSDCommandState *commandState)
 Processes a SBC command by dispatching it to a subfunction.
struct _MSDConfigurationDescriptors __attribute__ ((__packed__)) SBCTestUnitReady
 SBCTestUnitReady Data structure for the TEST UNIT READY command.
void MSDDriver_Initialize (const USBDDriverDescriptors *pDescriptors, MSDLun *luns, uint8_t numLuns)
uint8_t MED_IsMappedRDSupported (void *pMed)
uint8_t MED_IsMappedWRSupported (void *pMed)
uint32_t MED_GetMappedAddress (void *pMed, uint32_t dwBlk)
uint8_t MED_IsBusy (void *pMed)
uint8_t MED_IsProtected (void *pMed)
uint8_t MED_GetState (void *pMed)
uint32_t MED_GetBlockSize (void *pMed)
uint32_t MED_GetSize (void *pMed)
uint8_t MED_Write (void *pMed, uint32_t dwAddr, void *pData, uint32_t dwLen, fMEDCallback fCallback, void *pArg)
uint8_t MED_Read (void *pMed, uint32_t dwAddr, void *pData, uint32_t dwLen, fMEDCallback fCallback, void *pArg)
uint8_t MED_Flush (void *pMed)

Variables

const USBDDriverDescriptors msdDriverDescriptors
const USBDDriverDescriptors msdDriverDescriptors

Detailed Description

Implement a single interface device with single MS function in.

Implements Massstorage Function for USB device.


Define Documentation

#define DEFAULT_LUN_BLOCK_SIZE   512

Default LUN block size in bytes

Definition at line 49 of file MSDLun.c.

#define LUN_CHANGED   0x10

Media of LUN is changed

Definition at line 112 of file MSDLun.h.

#define LUN_EJECTED   0x01

LUN is ejected by host

Definition at line 110 of file MSDLun.h.

#define LUN_NOT_PRESENT   0x00

Media of LUN is removed

Definition at line 108 of file MSDLun.h.

#define LUN_READY   0x11

Media of LUN is ready

Definition at line 116 of file MSDLun.h.

#define LUN_STATUS_ERROR   0x02

LUN RC: error

Definition at line 105 of file MSDLun.h.

#define LUN_STATUS_SUCCESS   0x00

LUN RC: success

Definition at line 103 of file MSDLun.h.

#define LUN_TRANS_READY   LUN_CHANGED

LUN Not Ready to Ready transition

Definition at line 114 of file MSDLun.h.

#define MIN (   a,
  b 
)    ((a < b) ? a : b)

Returns the minimum between two values.

Definition at line 94 of file USBDDriverDescriptors.c.

#define MIN (   a,
  b 
)    ((a < b) ? a : b)

Returns the minimum between two values.

Definition at line 73 of file USBDDriverDescriptors.c.

#define MSD_BULK_ONLY_RESET   0xFF

Reset the mass storage device and its associated interface.

Definition at line 80 of file MSD.h.

#define MSD_GET_MAX_LUN   0xFE

Return the maximum LUN number supported by the device.

Definition at line 82 of file MSD.h.

#define MSDIO_ABORT   5

Abort, to abort the process

Definition at line 57 of file MSDIOFifo.h.

#define MSDIO_DONE   6

Done, finish without error

Definition at line 59 of file MSDIOFifo.h.

#define MSDIO_ERROR   7

Error, any error happens

Definition at line 61 of file MSDIOFifo.h.

#define MSDIO_IDLE   0

Idle state, do nothing

Definition at line 47 of file MSDIOFifo.h.

#define MSDIO_NEXT   3

Next, to check if the next block can be performed

Definition at line 53 of file MSDIOFifo.h.

#define MSDIO_PAUSE   4

Pause, to pause the process for buffer full or null

Definition at line 55 of file MSDIOFifo.h.

#define MSDIO_READ10_CHUNK_SIZE   (128 * 512)

FIFO offset before USB transmit start FIFO trunk size (in each transfer, large amount of data)

Definition at line 69 of file MSDIOFifo.h.

#define MSDIO_START   1

Start, to start IO operation

Definition at line 49 of file MSDIOFifo.h.

#define MSDIO_WAIT   2

Wait, waiting for IO operation done

Definition at line 51 of file MSDIOFifo.h.

#define MSDIOFifo_IncNdx (   ndx,
  sectSize,
  bufSize 
)
Value:
if ((ndx) >= (bufSize) - (sectSize)) (ndx) = 0; \
    else (ndx) += (sectSize)

Definition at line 128 of file MSDIOFifo.h.

#define SBC_MEDIUM_TYPE_DIRECT_ACCESS_BLOCK_DEVICE   0x00

MEDIUM TYPE field value for direct-access block devices.

See also:
sbc3r06.pdf - Section 6.3.1

Definition at line 290 of file SBC.h.

#define SBC_MRIE_NO_REPORTING   0x00

MRIE field values.

See also:
sbc3r06.pdf - Section 7.4.11 - Table 286

Definition at line 296 of file SBC.h.

#define SBC_PAGE_READ_WRITE_ERROR_RECOVERY   0x01

Supported mode pages.

See also:
sbc3r06.pdf - Section 6.3.1 - Table 115

Definition at line 308 of file SBC.h.

#define SBC_SPC_VERSION_4   0x06

Version value for the SBC-3 specification.

See also:
spc4r06.pdf - Section 6.4.2 - Table 85

Definition at line 167 of file SBC.h.

#define SBC_TPGS_NONE   0x0

Values for the TPGS field returned in INQUIRY data.

See also:
spc4r06.pdf - Section 6.4.2 - Table 86

Definition at line 173 of file SBC.h.

#define SBC_VERSION_DESCRIPTOR_SBC_3   0x04C0

Version descriptor value for the SBC-3 specification.

See also:
spc4r06.pdf - Section 6.4.2 - Table 87

Definition at line 182 of file SBC.h.


Typedef Documentation

typedef void(* MSDLunDataMonitorFunction)(uint8_t flowDirection, uint32_t dataLength, uint32_t fifoNullCount, uint32_t fifoFullCount)

Mass storage device data flow monitor function type

Parameters:
flowDirection 1 - device to host (READ10) 0 - host to device (WRITE10)
dataLength Length of data transferred in bytes.
fifoNullCount Times that FIFO is NULL to wait
fifoFullCount Times that FIFO is filled to wait

Definition at line 129 of file MSDLun.h.


Function Documentation

struct _MSDConfigurationDescriptors __attribute__ ( (__packed__)   ) 

SBCTestUnitReady Data structure for the TEST UNIT READY command.

See also:
spc4r06.pdf - Section 6.34 - Table 192
COMPILER_ALIGNED ( 32   ) 

MSD Driver instance for device function

Definition at line 66 of file MSDFunction.c.

uint32_t LUN_Eject ( MSDLun lun  ) 

Eject the media from a LUN.

Parameters:
lun Pointer to the MSDLun instance to initialize
Returns:
Operation result code
void LUN_Init ( MSDLun lun,
void *  media,
uint8_t *  ioBuffer,
uint32_t  ioBufferSize,
uint32_t  baseAddress,
uint32_t  size,
uint16_t  blockSize,
uint8_t  protected,
void(*)(uint8_t flowDirection, uint32_tdataLength, uint32_tfifoNullCount, uint32_tfifoFullCount)  dataMonitor 
)

Initializes a LUN instance. Must be invoked at least once even no Media is linked.

Parameters:
lun Pointer to the MSDLun instance to initialize
media Media on which the LUN is constructed, set to 0 to disconnect the Media or initialize an ejected LUN.
ioBuffer Pointer to a buffer used for read/write operation and which must be blockSize bytes long.
ioBufferSize Size of the allocated IO buffer.
baseAddress Base address of the LUN in number of media blocks
size Total size of the LUN in number of media blocks
blockSize One block of the LUN in number of media blocks
protected The LUN area is forced to readonly even the media is writable
dataMonitor Pointer to a Monitor Function to analyze the flow of this LUN.
uint32_t LUN_Read ( MSDLun lun,
uint32_t  blockAddress,
void *  data,
uint32_t  length,
TransferCallback  callback,
void *  argument 
)

Reads data from a LUN, starting at the specified block address.

Parameters:
lun Pointer to a MSDLun instance
blockAddress First block address to read
data Pointer to a data buffer in which to store the data
length Number of blocks to read
callback Optional callback to invoke when the read finishes
argument Optional callback argument.
Returns:
Operation result code
uint32_t LUN_Write ( MSDLun lun,
uint32_t  blockAddress,
void *  data,
uint32_t  length,
TransferCallback  callback,
void *  argument 
)

Writes data on the a LUN starting at the specified block address.

Parameters:
lun Pointer to a MSDLun instance
blockAddress First block address to write
data Pointer to the data to write
length Number of blocks to write
callback Optional callback to invoke when the write finishes
argument Optional callback argument.
Returns:
Operation result code
void MSDD_StateMachine ( MSDDriver pMsdDriver  ) 

State machine for the MSD device driver

Parameters:
pMsdDriver Pointer to a MSDDriver instance
void MSDDriver_ConfigurationChangeHandler ( uint8_t  cfgnum  ) 

Invoked when the configuration of the device changes. Resets the mass storage driver.

Parameters:
pMsdDriver Pointer to MSDDriver instance.
cfgnum New configuration number.
void MSDDriver_Initialize ( const USBDDriverDescriptors pDescriptors,
MSDLun pLuns,
unsigned char  numLuns 
)

Initializes the MSD driver and the associated USB driver.

Parameters:
pDescriptors Pointer to Descriptors list for MSD Device.
pLuns Pointer to a list of LUNs
numLuns Number of LUN in list
See also:
MSDLun

Definition at line 66 of file MSDDriver.c.

Here is the call graph for this function:

void MSDDriver_RequestHandler ( const USBGenericRequest request  ) 

Handler for incoming SETUP requests on default Control endpoint 0.

Standard requests are forwarded to the USBDDriver_RequestHandler method.

Parameters:
pMsdDriver Pointer to MSDDriver instance.
request Pointer to a USBGenericRequest instance
void MSDFunction_Configure ( USBGenericDescriptor *  pDescriptors,
uint16_t  wLength 
)

Invoked when the configuration of the device changes. Pass endpoints and resets the mass storage function. Pointer to the descriptors for function configure. Length of descriptors in number of bytes.

void MSDFunction_Initialize ( USBDDriver pUsbd,
uint8_t  bInterfaceNb,
MSDLun pLuns,
uint8_t  numLuns 
)

Initializes the MSD driver and the associated USB driver.

Parameters:
pUsbd Pointer to USBDDriver instance.
bInterfaceNb Interface number for the function.
pLuns Pointer to a list of LUNs
numLuns Number of LUN in list
See also:
MSDLun
uint32_t MSDFunction_RequestHandler ( const USBGenericRequest request  ) 

Handler for incoming SETUP requests on default Control endpoint 0.

Standard requests are forwarded to the USBDDriver_RequestHandler method.

Parameters:
pMsdDriver Pointer to MSDDriver instance.
request Pointer to a USBGenericRequest instance
void MSDFunction_StateMachine ( void   ) 

State machine for the MSD driver

void MSDIOFifo_Init ( MSDIOFifo pFifo,
void *  pBuffer,
unsigned int  bufferSize 
)

Initializes a MSDIOFifo instance.

Parameters:
pFifo Pointer to the MSDIOFifo instance to initialize
pBuffer Pointer to a buffer used for read/write operation and which must be blockSize bytes aligned.
bufferSize Total size of the buffer in bytes
unsigned char SBC_GetCommandInformation ( void *  command,
unsigned int *  length,
unsigned char *  type,
MSDLun lun 
)

Return information about the transfer length and direction expected by the device for a particular command.

Parameters:
command Pointer to a buffer holding the command to evaluate
length Expected length of the data transfer
type Expected direction of data transfer
lun Pointer to the LUN affected by the command
unsigned char SBC_ProcessCommand ( MSDLun lun,
MSDCommandState commandState 
)

Processes a SBC command by dispatching it to a subfunction.

Parameters:
lun Pointer to the affected LUN
commandState Pointer to the current command state
Returns:
Operation result code
void SBC_UpdateSenseData ( SBCRequestSenseData requestSenseData,
unsigned char  senseKey,
unsigned char  additionalSenseCode,
unsigned char  additionalSenseCodeQualifier 
)

Updates the sense data of a LUN with the given key and codes.

Parameters:
requestSenseData Pointer to the sense data to update
senseKey Sense key
additionalSenseCode Additional sense code
additionalSenseCodeQualifier Additional sense code qualifier

Variable Documentation

Initial value:
 {

    &deviceDescriptor,
    (USBConfigurationDescriptor *) &configurationDescriptorsFS,
    &qualifierDescriptor,
    (USBConfigurationDescriptor *) &otherSpeedDescriptorsFS,
    0, 
    (USBConfigurationDescriptor *) &configurationDescriptorsHS,
    &qualifierDescriptor,
    (USBConfigurationDescriptor *) &otherSpeedDescriptorsHS,
    stringDescriptors,
    4 

}

List of the standard descriptors used by the Mass Storage driver.

Definition at line 420 of file USBDDriverDescriptors.c.

Initial value:
 {

    &deviceDescriptor,
    (USBConfigurationDescriptor *) &configurationDescriptorsFS,
    &qualifierDescriptor,
    (USBConfigurationDescriptor *) &otherSpeedDescriptorsFS,
    0, 
    (USBConfigurationDescriptor *) &configurationDescriptorsHS,
    &qualifierDescriptor,
    (USBConfigurationDescriptor *) &otherSpeedDescriptorsHS,
    stringDescriptors,
    4 
}

List of the standard descriptors used by the Mass Storage driver.

Definition at line 398 of file USBDDriverDescriptors.c.

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines