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

📄 ms_def.h

📁 8032底层驱动部分。因为可以移植 所以单独来拿出来
💻 H
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *   Ms_def.h
 *
 * Project:
 * --------
 *   Maui_Software
 *
 * Description:
 * ------------
 *   Header file of MS driver
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================ 
 ****************************************************************************/
#ifndef MS_DEF_H
#define MS_DEF_H

//registers address definition
#define MSC_CFG		(MSDC_ADRS+0x60)
#define MSC_CMD		(MSDC_ADRS+0x64)
#define MSC_ACMD	(MSDC_ADRS+0x68)
#define MSC_STA		(MSDC_ADRS+0x6c)

// masks for MSC_CFG(16)
#define MSC_CFG_SIEN		0x0001
#define MSC_CFG_BUSYCNT		0x000e

//masks for MSC_CMD
#define MSC_CMD_DATASIZE		0x03ff
#define MSC_CMD_PID				0xf000
#define MSC_CMD_PID_START		12

//masks for MSC_ACMD
#define MSC_ACMD_ACEN				0x0001
#define MSC_ADATASIZE				0x07ff
#define MSC_APID						0xf000
#define MSC_ACMD_ACEN_START		1
#define MSC_ACMD_APID_START		12

// masks for MSC_STA
#define MSC_STA_RDY			0x0001
#define MSC_STA_SIF			0x0002
#define MSC_STA_TOER		0x0004
#define MSC_STA_CRCERR		0x0008

typedef kal_uint32		MS_STATUS;
//#define MS_STATUS			kal_uint32

// TPC CMDs
#define TPC_READ_PAGE_DATA			0x2
#define TPC_READ_REG					0x4
#define TPC_GET_INT             	0x7
#define TPC_WRITE_PAGE_DATA   0xD
#define TPC_WRITE_REG          	0xB
#define TPC_SET_R_W_REG_ADRS  0x8
#define TPC_SET_CMD             0xE

// CMDs for SET_CMD
//    Flash CMD                  
#define CMD_BLOCK_READ   0xaa
#define CMD_BLOCK_WRITE  0x55
#define CMD_BLOCK_END    0x33
#define CMD_BLOCK_ERASE  0x99
#define CMD_FLASH_STOP   0xcc
//   Function CMD               
#define CMD_SLEEP				0x5a
#define CMD_CLEAR_BUF		0xc3
#define CMD_RESET				0x3c

// MS registers
// status registers
#define MS_INT_REG				0x01
#define MS_STA0_REG				0x02
#define MS_STA1_REG				0x03
#define MS_TYPE_REG				0x04
#define	MS_CATEGORY_REG		0x06
#define MS_CLASS_REG				0x07
// parameter registers
#define MS_SYS_REG			0x10
#define MS_BLKADRS2_REG		0x11
#define MS_BLKADRS1_REG		0x12
#define MS_BLKADRS0_REG		0x13
#define MS_CMD_REG			0x14
#define MS_PGADRS_REG		0x15
// ExtraData registers
#define MS_OVERWRITE_REG	0x16
#define MS_MANAGE_REG		0x17
#define MS_LADRS1_REG		0x18
#define MS_LADRS0_REG		0x19

// masks for register
// mask for INT
#define INT_NMDNK			0x01
#define	INT_BREQ			0x20
#define INT_ERR			0x40
#define	INT_CED			0x80
// mask for status0
#define STA0_WP			0x01
#define STA0_SL			0x02
#define STA0_BF			0x10
#define STA0_BE			0x20
#define STA0_FB0			0x40
#define STA0_MB			0x80
// mask for status1
#define STA1_UCFG			0x01
#define STA1_FGER			0x02
#define STA1_UCEX			0x04
#define STA1_EXER			0x08
#define STA1_UCDT			0x10
#define STA1_DTER			0x20
#define STA1_FB1			0x40
#define STA1_MB			0x80
// mask for system parameter
#define SYS_BAND			0x80
// mask for overwrite flag
#define MS_OVFLG_BKST       	0x80 
#define MS_OVFLG_PGST0      	0x40 
#define MS_OVFLG_PGST1      0x20 
#define MS_OVFLG_PGST			0x60
#define MS_OVFLG_UDST       0x10 
// mask for Management flag
#define MS_MANAFLG_ACCESS		0x20 
#define MS_MANAFLG_COPY			0x10 
#define MS_MANAFLG_PLTB			0x08 
#define MS_MANAFLG_SYS			0x04 


// Flash operation type for command parameter
#define	BLOCK_MODE			0
#define PAGE_MODE				0x20
#define	EXTRA_MODE			0x40
#define OVERWRITE_MODE		0x80

// definition of the constants
#define MS_PAGE_SIZE				512
#define MS_EXTRA_RSIZE			4
#define MS_SYS_DEFAULT			0x80
#define MS_BB_HEADER_SIZE		368
#define MS_BB_SYSTEM				48
#define BOOTBLOCK            0x8000
#define INITIAL_ERR           0xfffd
#define FATAL_ERR            0xfffe
#define MS_SUPPORT_TYPES		6			// suppport 4,8,32,16,64,128 Mbytes
#define MS_FREETABLE_SIZE		16
#define MS_LPTABLE_SIZE			496
#define MS_MBR_SIZE				16
#define BLOCKS_PER_SEGMENT		512


// macros
#define MS_IS_TIMEOUT	(*(volatile kal_uint16*)MSC_STA & MSC_STA_TO)
#define MS_IS_CMDRDY		(*(volatile kal_uint16*)MSC_STA & MSC_STA_RDY)
#define MS_IS_INT			(*(volatile kal_uint16*)MSC_STA & MSC_STA_SIF)
#define MS_IS_CRCERR		(*(volatile kal_uint16*)MSC_STA & MSC_STA_CRCERR)
// Get low byte value from word value 
#define LOBYTE(w)               ((unsigned char)(w))
// Get high byte value from word value 
#define HIBYTE(w)               ((unsigned char)(((unsigned short)(w) >> 8) & 0xFF))

// error codes
#define MS_NOERROR			0
#define MS_ERR_TIMEOUT		1		// CMD busy time out(not INT timeout)
#define MS_ERR_CRCERR		2		// DATA crc error
#define MS_ERR_CMDNK			3		// CMD not accept
#define MS_ERR_EXECUTE		4		// During CMD execution
#define MS_ERRORS				5		// Unknown error
#define MS_ERR_UC				6		// Uncorrectable errors
#define MS_ERR_INT			7		// Int register err bit set
#define MS_ERR_STABUSY		8		// media busy or flash busy
#define MS_ERR_WRITEFAIL 	9
#define MS_ERR_ERASEFAIL	10	
#define MS_ERR_WP				11
#define MS_ERR_WAIT			12		// wait uintil ready, timeout and crc fail
#define MS_ERR_READBOOTBLK	13
#define MS_ERR_LPTABLE			14	// an error about LP translation table.
#define MS_ERR_CARD_NOT_PRESENT	18

#define MS_LASTPAGE			50		// reach the last page



typedef struct{	
	kal_uint8  	is_wp;				// write protect?
	kal_uint8 	Capacity;			// number of Mbytes
	kal_uint8		PagesPerBlk;		// pages per block (16,32)
	kal_uint32	DisBlk;				// number of disable of blocks
	kal_uint16 	BlockSize;			// 8k or16k
	kal_uint16 	NumBlock;			// number of total blocks
	kal_uint16 	InfoBlk;				// physical block number of information block
	kal_uint16  	BootBlock_no;		// the block number of the boot block
	kal_uint16* 	pLPTbl;				// logical to physical address translation table
	kal_uint16*	pFreeTbl;			// a table for alternative blocks
	kal_uint8		Seg;
	kal_uint32 		TotalSectors;	// total disk sectors 	
}T_MS_HANDLE;

// extern global variables
extern T_MS_HANDLE gMS;

// function declaration
extern MS_STATUS MS_Initialize(void);
extern void MS_SetDefault(void);
extern kal_bool MS_CardDetect(void);
extern void MS_InvertN(kal_uint8* dest, kal_uint8* src, kal_uint8 len);
extern MS_STATUS MS_WaitCmdRdyOrTo(void);
extern void MS_SendTPC(kal_uint8 cmd, kal_uint32 size);
extern void MS_SetAcmd(kal_uint8 acmd, kal_uint32 asize);
extern MS_STATUS MS_TPC_ReadPage(kal_uint32* rxbuffer);
extern MS_STATUS MS_TPC_WritePage(kal_uint32* txbuffer);
extern MS_STATUS MS_TPC_ReadReg(kal_uint32* buffer, kal_uint8 length);
extern MS_STATUS MS_TPC_WriteReg(kal_uint32* buffer, kal_uint8 length);
extern MS_STATUS MS_TPC_SetRWAdrs(kal_uint8 r_adrs, kal_uint8 r_len, kal_uint8 w_adrs, kal_uint8 w_len);
extern MS_STATUS MS_TPC_GetInt(kal_uint8* intreg);
extern MS_STATUS MS_TPC_SetCmd(kal_uint8 cmd, kal_uint8* intreg);
extern MS_STATUS MS_API_ReadSinglePage(kal_uint32 blkadrs, kal_uint8 page, kal_uint32* rxbuffer, kal_uint32* extra);
extern MS_STATUS MS_API_ReadBlock(kal_uint32 blkadrs, kal_uint32* rxbuffer,kal_uint32* extra, kal_uint8 spage, kal_uint8 numpage, kal_uint8* readpage);
extern MS_STATUS MS_API_WriteSinglePage(kal_uint32 blkadrs,  kal_uint8 page, kal_uint32* txbuffer, kal_uint32 extra);
extern MS_STATUS MS_API_WriteBlock(kal_uint32 blkadrs, kal_uint32* txbuffer, kal_uint32* extra, kal_uint8 spage, kal_uint8 numpage, kal_uint8* writtenpage);
extern MS_STATUS MS_API_CopyPage(kal_uint32 w_blkadrs, kal_uint32 r_blkadrs, kal_uint8 spage,kal_uint8 numpage);
extern MS_STATUS MS_API_EraseBlock(kal_uint32 blkadrs);
extern MS_STATUS MS_API_ReadExtraData(kal_uint32 blkadrs, kal_uint8 page, kal_uint32* extra);
extern MS_STATUS MS_API_WriteExtraData(kal_uint32 blkadrs, kal_uint8 page, kal_uint32* extra);
extern MS_STATUS MS_API_OverwriteExtraData(kal_uint32 blkadrs, kal_uint8 page, kal_uint8 overwrite);
extern MS_STATUS MS_API_ResetFlash(void);
extern MS_STATUS MS_API_Sleep(void);
extern MS_STATUS MS_API_ClrBuffer(void);
extern MS_STATUS MS_API_Stop(void);
extern void MS_AnalysisBB(kal_uint32* bootblk);
extern MS_STATUS MS_API_ReadBootBlk(void);
extern MS_STATUS MS_API_GenLPTable(kal_uint16* lptbl,kal_uint16* ftbl,kal_uint8 seg);
extern MS_STATUS MS_API_LogToPhy(kal_uint16* lptbl, kal_uint32 ladrs, kal_uint32* padrs);
extern MS_STATUS MS_API_CheckLogicalAdrsValid(void);

#endif // end of MS_DEF_H  


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -