Added Software projects

git-svn-id: file:///srv/dev-disk-by-uuid-17e88007-4d0c-45e0-8757-cacfcc458630/repositories/svn/Diplomarbeit@55 9fe90eed-be63-e94b-8204-d34ff4c2ff93
This commit is contained in:
Matthias
2008-12-23 10:34:08 +00:00
parent ee5a771818
commit 373a8c32b2
348 changed files with 86781 additions and 0 deletions
+533
View File
@@ -0,0 +1,533 @@
/* ---------------------------------------------------------------------------
* mmc.h (c) 2008 Micro-key bv
* ---------------------------------------------------------------------------
* Micro-key bv
* Industrieweg 28, 9804 TG Noordhorn
* Postbus 92, 9800 AB Zuidhorn
* The Netherlands
* Tel: +31 594 503020
* Fax: +31 594 505825
* Email: support@microkey.nl
* Web: www.microkey.nl
* ---------------------------------------------------------------------------
* Description:
* ---------------------------------------------------------------------------
* Version(s): 0.1, Apr 22, 2008, MMi
* Creation.
* ---------------------------------------------------------------------------
*/
#ifndef __MMC_H
#define __MMC_H
/* ---------------------------------------------------------------------------
* System include files.
* ---------------------------------------------------------------------------
*/
#include "LPC23xx.h"
#include "types.h"
/* ---------------------------------------------------------------------------
* Application include files.
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* Constant and macro definitions.
* ---------------------------------------------------------------------------
*/
#ifdef MMC_GLOBAL
#define MMC_EXTERN
#else
#define MMC_EXTERN extern
#endif
extern void Dly100us(void *arg);
#define MMC_DISK_INFO
#define MMC_DISK_LUN 0
/* Hardware depends definitions */
#define IdentificationModeClock 400000
#define PC_PCSPI1 (1<<10)
#define PC_PCSPI0 (1<<8)
#define RTC_OSC_FREQ (32768UL)
#define RD_TIME_OUT 100LL /* SD Max. Block Read Access Time */
#define WR_TIME_OUT 250LL /* SD Max. Block Write Access Time */
#define OcrReg 0x00FF8000
/* Card Status register */
#define READY_FOR_DATA (1UL << 8)
#define CURRENT_STATE (0xFUL << 9)
#define ERASE_RESET (1UL << 13)
#define CARD_ECC_DISABLED (1UL << 14)
#define WP_ERASE_SKIP (1UL << 15)
#define CID_CSD_OVERWRITE (1UL << 16)
#define ERROR (1UL << 17)
#define ILLEGAL_COMMAND (1UL << 22)
#define COM_CRC_ERROR (1UL << 23)
#define WP_VIOLATION (1UL << 26)
#define ERASE_PARAM (1UL << 27)
#define ERASE_SEQ_ERROR (1UL << 28)
#define BLOCK_LEN_ERROR (1UL << 29)
#define ADDRESS_ERROR (1UL << 30)
#define OUT_OF_RANGE (1UL << 31)
/* Card states */
#define CARD_IDLE (0UL << 9)
#define CARD_READY (1UL << 9)
#define CARD_IDENT (2UL << 9)
#define CARD_STBY (3UL << 9)
#define CARD_TRAN (4UL << 9)
#define CARD_DATA (5UL << 9)
#define CARD_RCV (6UL << 9)
#define CARD_PRG (7UL << 9)
#define CARD_DIS (8UL << 9)
#define MmcDly_1ms(Delay) Dly100us((void*)(10 * Delay))
/* WORKAROUND
* As long as MCI_CP and MCI_WP are swapped, right PinMapping
* is done here.
* After Hardware Update, simply use commented PinMasks instead
* of the corrected ones.
*/
// MMC/SD card switches
// Card present
// \MARK NEW PINSETTINGS FOR TESTER (2) and IO_CTRL (1)
#if ((PINSET_TESTER == 1) || (PINSET_TESTER == 2))
#define MMC_CP_MASK (1UL << 4)
#define MMC_CP_DIR FIO0PIN1
#define MMC_CP_FDIR FIO0DIR
#define MMC_CP_IO FIO0PIN1
#define MMC_CP_FIO FIO0PIN1
#define MMC_CP_MODE PINMODE1 /* Bit 12&13 */
#else
/* Pin 87 (P0.17) */
#define MMC_CP_MASK (1UL << 1)
#define MMC_CP_DIR FIO0PIN2
#define MMC_CP_FDIR FIO0DIR
#define MMC_CP_IO FIO0PIN2
#define MMC_CP_FIO FIO0PIN2
#define MMC_CP_MODE PINMODE1
#endif
// Card write protect
// \MARK NEW PINSETTINGS FOR TESTER (2) and IO_CTRL (1)
#if ((PINSET_TESTER == 1) || (PINSET_TESTER == 2))
#define MMC_WP_MASK (1UL << 3)
#define MMC_WP_DIR FIO0DIR
#define MMC_WP_FDIR FIO0DIR
#define MMC_WP_IO FIO0PIN1
#define MMC_WP_FIO FIO0PIN1
#define MMC_WP_MODE PINMODE1 /* Bit 13&14 */
#else
/* Pin 64 (P1.29) */
#define MMC_WP_MASK (1UL << 5)
#define MMC_WP_DIR FIO1DIR3
#define MMC_WP_FDIR FIO1DIR
#define MMC_WP_IO FIO1PIN3
#define MMC_WP_FIO FIO1PIN3
#define MMC_WP_MODE PINMODE3
#endif
#define DMA_MMCSD 4 /* MMC/SD */
#define MCI_PCLK_OFFSET 56
#define I_RC_OSC_FREQ (4000000)
#define MAIN_OSC_FREQ (12000000)
/* ---------------------------------------------------------------------------
* Type definitions.
* ---------------------------------------------------------------------------
*/
typedef enum _DiskStatusCode_t
{
DiskCommandPass = 0, DiskNotReady, DiskNotPresent,
DiskParametersError, DiskMiscompareError, DiskChanged,
DiskUknowError,
} DiskStatusCode_t;
typedef enum _DiskIoRequest_t
{
DiskWrite = 0, DiskRead, DiskVerify,
} DiskIoRequest_t;
typedef enum _DiskInfoType_t
{
DiskInquiry = 0, DiskFormatCapacity,
} DiskInfoType_t;
typedef enum _DiskType_t
{
DiskMMC, DiskSD, DiskUnknow,
} DiskType_t;
typedef struct _DiskCtrlBlk_t
{
UINT32 BlockNumb;
UINT32 BlockSize;
DiskStatusCode_t DiskStatus;
DiskType_t DiskType;
BOOLEAN WriteProtect;
BOOLEAN MediaChanged;
} DiskCtrlBlk_t, *pDiskCtrlBlk_t;
typedef enum _MmcState_t
{
MmcOk = 0,
MmcNoPresent = 1,
MmcNoResponse = 2 ,
MmcCardError = 3,
MmcMiscompare = 4,
MmcDmaError = 5,
MmcProtect = 6
} MmcState_t;
typedef enum _MmcSpiCmdInd_t
{
CMD0 = 0, /* Resets the MultiMediaCard */
CMD1, /* Activates cards init process */
CMD2, /* Asks all cards to send its card identification (CID) */
CMD3, /* Set relative address */
CMD7, /* Select/deselect card the card is selected by its own */
/* relative address and deselected by other address. */
/* address 0 deselects all */
CMD9, /* Asks the card to send its card-specific data (CSD) */
CMD10, /* Asks the card to send its card identification (CID) */
CMD12, /* Stop transmission on multiple block read */
CMD13, /* Asks the selected card to send its status register */
CMD16, /* Selects a block length (in bytes) for all following */
/* block commands (read and write) */
CMD17, /* Read block of size selected in SET_BLOCKLEN command */
CMD18, /* Continuously transfers data blocks from card to host */
/* until interrupted by a Stop command or the requested */
/* number of data blocks transmitted */
CMD24, /* Write block of size selected in SET_BLOCKLEN command */
CMD25, /* Continuously writes blocks of data until Stop Tran */
/* Token or the requested number of blocks received */
CMD27, /* Programming of the programmable bits of the CSD */
CMD28, /* If the card has write protection features, this */
/* command sets the write protection bit of the */
/* addressed group. The properties of write protection */
/* are coded in the card specific data (WP_GRP_SIZE). */
CMD29, /* If the card has write protection features, this */
/* command clears protection bit of the addressed group */
CMD30, /* If the card has write protection features, this */
/* command asks the card to send the status of the write*/
/* protection bits */
CMD32, /* Sets the address of first sector of the erase group */
CMD33, /* Sets the address of the last sector in a continuous */
/* range within selected erase group, or the address */
/* of a single sector to be selected for erase */
CMD34, /* Removes one previously selected sector from the */
/* erase selection */
CMD35, /* Sets the address of the first erase group within a */
/* range to be selected for erase */
CMD36, /* Sets the address of the last erase group within a */
/* continuous range to be selected for erase */
CMD37, /* Removes one previously selected erase group from the */
/* erase selection. */
CMD38, /* Erases all previously selected sectors */
CMD42, /* Used to set/reset the password or lock/unlock the */
/* card. The size of the Data Block is defined by the */
/* ET_BLOCK_LEN command */
CMD55, /* Notifies the card that the next command is an */
/* application specific command (Non standard command) */
CMD56, /* Used either to transfer a Data Block to the card or */
/* to get a Data Block from the card for general */
/* purpose/application specific commands. The size */
/* of Data Block is defined with SET_BLOCK_LEN command */
ACMD6, /* Defines data bus width (00=1bit or10=4 bits bus) */
/* (Only for SD) */
ACMD41, /* Activates card initialization process (Only for SD) */
CMD_END /* End of commands index */
} MmcSpiCmdInd_t;
typedef enum _MmcAgmType_t
{
MmcNoArg = 0,
MmcBlockLen,
MmcDataAdd,
MmcRelAddr,
MmcOcr
} MmcAgmType_t;
typedef enum _MmcRespType_t
{
MmcNoResp = 0,
MmcR1,
MmcR1b,
MmcR2,
MmcR3
} MmcRespType_t;
typedef struct _MmcCommads_t
{
UINT8 TxData;
MmcAgmType_t Arg;
MmcRespType_t Resp;
} MmcCommads_t;
typedef union _DataCtrl_t
{
UINT32 Data;
struct
{
UINT32 ENABLE : 1;
UINT32 DIRECTION : 1;
UINT32 MODE : 1;
UINT32 DMAENABLE : 1;
UINT32 BLOCKSIZE : 4;
UINT32 :24;
};
} DataCtrl_t, *pDataCtrl_t;
typedef struct _Mmc3FormatCapDescriptor_t
{
UINT8 NumberofBlocks[4];
struct
{
UINT8 DescriptorType : 2;
UINT8 FormatType : 6;
};
UINT8 BlockLength[3];
} Mmc3FormatCapDescriptor_t, *pMmc3FormatCapDescriptor_t;
typedef struct _Mmc3FormatCapResponse_t
{
UINT8 Reserved0;
UINT8 Reserved1;
UINT8 Reserved2;
UINT8 CapacityListLength;
Mmc3FormatCapDescriptor_t MaximumDescriptor;
} Mmc3FormatCapResponse_t, * pMmc3FormatCapResponse_t;
typedef enum _SpcPeripheralDeviceType_t
{
SbcDirectAccess = 0, SscSequentialAccess,SSCPrinter,SpcProcessor,
ScbWriteOnce,Mmc2CDROM,Scsi2Scanner,SbcOpticalMemory,
SmcMediumChanger,Scsi2Communications,DefinedByASCIT8_1,DefinedByASCIT8_2,
Scc2StorageArrayController,SesEnclosureServices,RbcSimplifiedDirectAccess,
OcrwOpticalCardReader,BridgingExpanders,OsdObjectBasedStorage, UnknowType = 0x1F,
} SpcPeripheralDeviceType_t;
typedef enum _FormatCapacityDescType_t
{
UnformattedMedia = 1, FormattedMedia, NoMediaPresent,
} FormatCapacityDescType_t;
/* ---------------------------------------------------------------------------
* Variable declarations.
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* Function declarations.
* ---------------------------------------------------------------------------
*/
extern UINT32 SYS_GetFpclk(UINT32 Periphery);
/* ---------------------------------------------------------------------------
* Function: MmcPresent
*
* checks if a Card is inserted.
*
* Parameters: void
*
* Return: BOOLEAN - true if Card is inserted, false if not
* ---------------------------------------------------------------------------
*/
inline BOOLEAN MmcPresent(void);
/* ---------------------------------------------------------------------------
* Function: MmcWriteProtect
*
* checks if inserted Card is write protected.
*
* Parameters: void
*
* Return: BOOLEAN - true if Card is protected, false if not
* ---------------------------------------------------------------------------
*/
inline BOOLEAN MmcWriteProtect(void);
/* ---------------------------------------------------------------------------
* Function: MmcSetClockFreq
*
* Sets SPI Clock Frequency
*
* Parameters: UINT32 - Frequency
*
* Return: UINT32
* ---------------------------------------------------------------------------
*/
UINT32 MmcSetClockFreq(UINT32 Frequency);
/* ---------------------------------------------------------------------------
* Function: MmcInit
*
* Initialises the MMC Interface and sets it to SPI Mode. Sets Card Present
* and WriteProtect Pins.
*
* Parameters: void
*
* Return: void
* ---------------------------------------------------------------------------
*/
void MmcInit(void);
/* ---------------------------------------------------------------------------
* Function: MmcPowerDown
*
* Sets to PowerDown state
*
* Parameters: void
*
* Return: void
* ---------------------------------------------------------------------------
*/
void MmcPowerDown(void);
/* ---------------------------------------------------------------------------
* Function: MmcSendCmd
*
* Implements and sends a Command to MMC
*
* Parameters: MmcSpiCmdInd_t ComdInd - specific Command
* UINT32 Arg - Command Argument
*
* Return: MmcState_t - Response from Card
* ---------------------------------------------------------------------------
*/
MmcState_t MmcSendCmd(MmcSpiCmdInd_t ComdInd, pUINT32 pArg);
/* ---------------------------------------------------------------------------
* Function: MmcInitMedia
*
* Detects and initialises a connected MMC
*
* Parameters: void
*
* Return: MmcState_t - Response from Card
* ---------------------------------------------------------------------------
*/
MmcState_t MmcInitMedia(void);
/* ---------------------------------------------------------------------------
* Function: MmcCsdImplement
*
* Implement Data from CSD
*
* Parameters: void
*
* Return: void
* ---------------------------------------------------------------------------
*/
void MmcCsdImplemet(void);
/* ---------------------------------------------------------------------------
* Function: MmcVerify
*
* Verifies a MMC
*
* Parameters: const UINT8 * pData - Pointer to Data
* UINT32 Add - Address of Data
* UINT32 Length - Length of Data
*
* Return: MmcState_t - Response from Card
* ---------------------------------------------------------------------------
*/
inline MmcState_t MmcVerify(const UINT8 * pData, UINT32 Add,
UINT32 Length);
/* ---------------------------------------------------------------------------
* Function: MmcGetLastError
*
* Returns last occured ERROR
*
* Parameters: void
*
* Return: UINT32 - Last occured Error
* ---------------------------------------------------------------------------
*/
UINT32 MmcGetLastError(void);
/* ---------------------------------------------------------------------------
* Function: MmcStatusUpdate
*
* Updates the status of SD/MMC Card
*
* Parameters: void
*
* Return: void
* ---------------------------------------------------------------------------
*/
void MmcStatusUpdate(void);
/* ---------------------------------------------------------------------------
* Function: MmcDiskInit
*
* Initialises MMC/SD Disk
*
* Parameters: void
*
* Return: void
* ---------------------------------------------------------------------------
*/
void MmcDiskInit(void);
#ifdef MMC_DISK_INFO
/* ---------------------------------------------------------------------------
* Function: MmcDiskInfo
*
* Returns Pointer to Info Structure of inserted Disk
*
* Parameters: pUINT8 pData - Pointer to Data
* DiskInfoType_t DiskInfoType - Info Type
*
* Return: UINT32
* ---------------------------------------------------------------------------
*/
UINT32 MmcDiskInfo(pUINT8 pData, DiskInfoType_t DiskInfoType);
#endif // MMC_DISK_INFO
/* ---------------------------------------------------------------------------
* Function: MmcGetDiskCtrlBkl
*
* Returns Pointer to Control Block Structure
*
* Parameters: void
*
* Return: pDiskCtrlBlock_t - Pointer to Control Block
* ---------------------------------------------------------------------------
*/
pDiskCtrlBlk_t MmcGetDiskCtrlBkl(void);
UINT32 SYS_GetFSclk(void);
UINT32 SYS_GetFPclk(UINT32 Periphery);
/*************************************************************************
* Function Name: Dly100us
* Parameters: void *arg
* Return: void
*
* Description: Delay [100us]
*
*************************************************************************/
void Dly100us(void *arg);
#endif // __MMC_H