ms.H
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:12k
源码类别:

DVD

开发平台:

C/C++

  1. /**************************************************************************
  2.  *                                                                        *
  3.  *         Copyright (c) 2002 by Sunplus Technology Co., Ltd.             *
  4.  *                                                                        *
  5.  *  This software is copyrighted by and is the property of Sunplus        *
  6.  *  Technology Co., Ltd. All rights are reserved by Sunplus Technology    *
  7.  *  Co., Ltd. This software may only be used in accordance with the       *
  8.  *  corresponding license agreement. Any unauthorized use, duplication,   *
  9.  *  distribution, or disclosure of this software is expressly forbidden.  *
  10.  *                                                                        *
  11.  *  This Copyright notice MUST not be removed or modified without prior   *
  12.  *  written consent of Sunplus Technology Co., Ltd.                       *
  13.  *                                                                        *
  14.  *  Sunplus Technology Co., Ltd. reserves the right to modify this        *
  15.  *  software without notice.                                              *
  16.  *                                                                        *
  17.  *  Sunplus Technology Co., Ltd.                                          *
  18.  *  19, Innovation First Road, Science-Based Industrial Park,             *
  19.  *  Hsin-Chu, Taiwan, R.O.C.                                              *
  20.  *                                                                        *
  21.  *  Author:                                                     *
  22.  *                                                                        *
  23.  **************************************************************************/
  24. #define MS_DEBUG
  25. #ifdef __MS_COMMON__
  26. #define EXTERN
  27. #else
  28. #define EXTERN extern
  29. #endif
  30. //#define FAIL            1
  31. //#define SUCCESS         0
  32. #define YES             1
  33. #define MEMORY_STICK_STD
  34. //#define MS_CARD_OK 1
  35. #define MS_CMD_OK 0
  36. #define MS_CMD_FAIL 1
  37. #define MS_CMD_TIMEOUT 2
  38. #define MS_INT_ERROR 3
  39. #define MS_CARD_ERROR 0xFF
  40. #define MS_CARD_WP 4
  41. #define MS_DTER_ERROR  5
  42. #define MS_WP 0x80000000
  43. #define MS_WIDE_BUS 0x40000000
  44. #define MS_NORMAL 0x00000000
  45. #define MS_HIGH_SPEED 0x00010080
  46. #define MS_PRO 0x00010000
  47. /* Memory Stick (Pro) : Type List */
  48. /* b31=WP, b27=WIDE_BUS */
  49. /* MemoryStick, Low Speed */
  50. #define MS_N (0x00000000) /* T=00/FF, C=00/FF, C=00/FF */
  51. #define MS_N_ROM (0x00000001+MS_WP) /* T=00/FF, C=00/FF, C=01 */
  52. #define MS_N_R (0x00000002+MS_WP) /* T=00/FF, C=00/FF, C=02 */
  53. #define MS_N_OTHER (0x00000003+MS_WP) /* T=00/FF, C=00/FF, C=03 */
  54. /* MemoryStick, High Speed */
  55. #define MS_H (0x00010080+MS_WP) /* T=01, C=00, C=80 */
  56. #define MS_H_ROM (0x00010081+MS_WP) /* T=01, C=00, C=81 */
  57. #define MS_H_R (0x00010082+MS_WP) /* T=01, C=00, C=82 */
  58. #define MS_H_OTHER (0x00010083+MS_WP) /* T=01, C=00, C=83 */
  59. /* MemoryStick Pro */
  60. #define MS_P (0x00010000) /* T=01, C=00, C=00 */
  61. #define MS_P_ROM (0x00010001+MS_WP) /* T=01, C=00, C=01 */
  62. #define MS_P_R (0x00010002+MS_WP) /* T=01, C=00, C=02 */
  63. #define MS_P_OTHER (0x00010003+MS_WP) /* T=01, C=00, C=03 */
  64. /* MemoryStick(Pro) Command Sets */
  65. #define READ_LONG_DATA 0x02
  66. #define READ_SHORT_DATA 0x03
  67. #define READ_REG 0x04
  68. #define GET_INT 0x07
  69. #define SET_RW_REG_ADRS 0x08
  70. #define EX_SET_CMD 0x09
  71. #define WRITE_REG 0x0B
  72. #define WRITE_SHORT_DATA 0x0C
  73. #define WRITE_LONG_DATA 0x0D
  74. #define SET_CMD 0x0E
  75. /* MSPRO FLASH COMMAND */
  76. #define MSPRO_READ_DATA 0x20
  77. #define MSPRO_WRITE_DATA 0x21
  78. #define MSPRO_READ_INFO 0x22
  79. #define MSPRO_WRITE_INFO 0x23
  80. #define MSPRO_READ_ATRB 0x24
  81. #define MSPRO_STOP 0x25
  82. #define MSPRO_ERASE 0x26
  83. #define MSPRO_CHG_CLASS 0x27
  84. #define MSPRO_FORMAT 0x10
  85. #define MSPRO_SLEEP 0x11
  86. /* MS FLASH COMMAND */
  87. #define MS_READ_DATA  0x20
  88. #define MS_WRITE_DATA  0x21
  89. #define MS_READ_INFO  0x22
  90. #define MS_WRITE_INFO  0x23
  91. #define MS_STOP  0x25
  92. #define MS_ERASE  0x26
  93. #define MS_CHG_CLASS  0x27
  94. #define MS_FORMAT  0x10
  95. #define MS_BLOCK_READ 0xAA
  96. #define MS_BLOCK_WRITE 0x55
  97. #define MS_BLOCK_END 0x33
  98. #define MS_BLOCK_ERASE 0x99
  99. #define MS_FLASH_STOP 0xCC
  100. #define MS_SLEEP 0x5A
  101. #define MS_CLEAR_BUF 0xC3
  102. #define MS_RESET 0x3C
  103. /* MemoryStick(Pro) Register List */
  104. /* read only */
  105. #define REG_INT 0x01 /* interrupt factors */
  106. #define REG_STATUS 0x02 /* status of the system */
  107. #define REG_STATUS2 0x03 /* cmd execution status */
  108. #define REG_TYPE 0x04 /* media type */
  109. #define REG_CATEGORY 0x06 /* media categoary */
  110. #define REG_CLASS 0x07 /* media class */
  111. /*Standard Memory Stick card*/
  112. #define MS_BLK_AVG      0
  113. #define MS_DEV_ID_4M    0x00000004//0x408
  114. #define MS_DEV_ID_8M    0x00000008//0x808
  115. #define MS_DEV_ID_16M   0x00000106 //0x1616
  116. #define MS_DEV_ID_32M   0x00000302//0x3216
  117. #define MS_DEV_ID_64M   0x00000604//0x6416
  118. #define MS_DEV_ID_128M  0x00010208//0x2816  
  119. #define MS_DEV_ID_256M 0x00020506//0x0256
  120. #define MS_DEV_ID_512M 0x00050102//0x0512
  121. #define MS_DEV_ID_1G 0x01000204//0x1024
  122. #define MS_BOOT_BlOCK   0
  123. #define MS_CIS_PAGE     2
  124. #define MS_IDI_OFFSET   256 + 54
  125. #define MS_DEV_CAP_4M    0x00001EE0 
  126. #define MS_DEV_CAP_8M    0x00003DE0 
  127. #define MS_DEV_CAP_16M   0x00007BC0  
  128. #define MS_DEV_CAP_32M   0x0000F7C0 
  129. #define MS_DEV_CAP_64M   0x0001EF80 
  130. #define MS_DEV_CAP_128M  0x0003DF00 
  131. #define MS_LOG_BLKS_FRIST_ZONE 494
  132. #define MS_MAX_LOG_BLKS_PER_ZONE 496
  133. #define MS_MAX_PHY_BLKS_PER_ZONE 512
  134. #if 0 /* 0625 */
  135. #define MS_MAX_LOG_BLKS          8000 //for 128M
  136. #else
  137. #define MS_MAX_LOG_BLKS          16000//for 256M
  138. #define MS_MAX_DISABLE_BLKS      1024//1600
  139. #endif
  140. #define MS_MAX_LOG_ZONE          (MS_MAX_LOG_BLKS / MS_MAX_LOG_BLKS_PER_ZONE)
  141. #if 0 /* 0625 */
  142. #define MS_MAX_PHY_BLKS          8192
  143. #else
  144. #define MS_MAX_PHY_BLKS          16384
  145. #endif
  146. #define MS_BLK_STS_GOOD_ONES     6
  147. #define MS_DATA_STS_GOOD_ONES    4
  148. //define ms clock sysclk/(2*(1+n))
  149. #define MS_18MHZ 0x02
  150. #define MS_13p5MHZ  0x03 
  151. #define MS_10p8MHZ 0x04
  152. #define MS_9MHZ 0x05
  153. #define MS_7p7MHZ 0x06
  154. //#define MS_9MHZ 0x07
  155. #define MS_6p75MHZ 0x08
  156. #define MS_6MHZ 0x09
  157. //macro
  158. #define READ8(_reg_)            (*((volatile UINT8  *)(_reg_)))
  159. #define READ16(_reg_)           (*((volatile UINT16 *)(_reg_)))
  160. #define READ32(_reg_)           (*((volatile UINT32 *)(_reg_)))
  161. #define WRITE8(_reg_, _value_)  (*((volatile UINT8  *)(_reg_)) = (_value_))
  162. #define WRITE16(_reg_, _value_) (*((volatile UINT16 *)(_reg_)) = (_value_))
  163. #define WRITE32(_reg_, _value_) (*((volatile UINT32 *)(_reg_)) = (_value_))
  164. //address definition   zhongshan modify for ms write 04/12/11
  165. #define MsAllocTableAdr                 (SDRAM_BASE_UNCACHED + (A_JPEG_SERVO_YA)*1024)  //(SDRAM_BASE_UNCACHED + CARD_YA*1024)   
  166. #define MsAllocTableAdrSize       0x00008000//0x00000800  // 2K
  167. #define MsextraDataAreaAdr             (MsAllocTableAdr + MsAllocTableAdrSize)
  168. #define MsextraDataAreaSize             0x00000048 //72 bytes
  169. #define MsDataBufAdr                 (MsextraDataAreaAdr + MsextraDataAreaSize)
  170. #define MsDataBufAdrSIZE                0x00000200 //512 bytes
  171. #define MsBadBlkAdr                     (MsDataBufAdr + MsDataBufAdrSIZE)
  172. #define MsBadBlkAdrSize                 0x00000080 //128 bytes
  173. #define MsWriteTableAdr      (SDRAM_BASE_UNCACHED + (CARD_YA)*1024) 
  174. #define MsWriteTableAdrSize 0x00000800// 992bytes*2
  175. #define msFreePhyAdr                   (MsWriteTableAdr+MsWriteTableAdrSize)
  176. #define msFreePhyAdrSize  0x00000080//128bytes
  177. #define MsAllocTableLogBlkSize (MsAllocTableAdrSize/2)
  178. #define MsWriteTableLogBlkSize (MsWriteTableAdrSize/2)
  179. #define MsDataTempBuf (msFreePhyAdr +msFreePhyAdrSize)
  180. #define MsDataTempBufSize 0x00000200//512 bytes
  181. #define mspStart (MsDataTempBuf +MsDataTempBufSize)
  182. /**************************************************************************
  183.  *                          D A T A    T Y P E S                          *
  184.  **************************************************************************/
  185.  
  186.  typedef struct list_s{
  187. struct list_s *pprev; /* previous entry or que's head */
  188. struct list_s *pnext; /* previous entry or que's tail */
  189. } list_t;
  190.  
  191.  typedef struct {
  192. UINT8  makerId;
  193. UINT8  hwDevId;
  194. UINT8  active;      /* Inserted: 1, pulled-out: 0           */
  195. UINT16 megaByte;    /* Device capacity in unit of MB        */
  196. UINT8* pdevName;    /* ASCII name of this device            */
  197. UINT32 nrSects;     /* How many sectors of this device      */
  198. UINT32 nrFreeBytes; /* Free space in byte                   */
  199. UINT32 fsDepend;    /* For FAT, fsDepend = byte per cluster */ 
  200. } devInfo_t;
  201. //typedef struct msDev_s {
  202. typedef struct  {
  203. //devInfo_t common; /* Common information for all cards */
  204. UINT16    megaByte;    /* Device capacity in unit of MB        */
  205. UINT32    nrSects;     /* How many sectors of this device      */
  206. UINT16    nrGoodOnes;
  207. UINT16    pageSize;
  208. UINT16    blkSize;
  209. UINT8     pageBit;
  210. UINT8     nrBitPagesPerBlk;
  211. UINT16    nrBlks;
  212. UINT8     addrCycle;
  213. UINT8     eccCnt;
  214. UINT8     extraDataBytes;
  215. UINT16*   pallocTable;
  216. UINT16*   pwriteTable;
  217. //UINT16*   pbadBlk;
  218. UINT8*    pbadBlk;
  219. #if 0
  220. UINT32*   pbitTable;
  221. #else
  222. //list_t    freeList[MS_MAX_LOG_ZONE];
  223. //list_t*   pfreeBlkBuf;
  224. #endif
  225. UINT8*    pbuf;
  226. UINT8*    ptemp;
  227. UINT8*    predund;
  228. UINT16*   pfreeBlk;
  229. UINT16*  pstart;
  230. UINT32    BootBlk0;
  231. UINT32    BootBlk1;
  232. UINT32    writeProtect;
  233. UINT32    cardType;
  234. } msDev_t;
  235. typedef struct {
  236. UINT8 overwriteflag;
  237. UINT8 managementflag;
  238. UINT8 blkAddr[2];
  239. UINT8 formatreserve[5];
  240. } extraDataArea_t;
  241.  
  242. /**************************************************************************
  243.  *               G L O B A L       D E C L A R A T I O N S                *
  244.  **************************************************************************/
  245. msDev_t msDev;
  246. //extraDataArea_t extraDataArea_t;
  247. //extern flashReg_t *pflashReg;
  248. //extern UINT32 msCardType;
  249. //extern UINT32 msBlockSize, msBlock;
  250. //extern dispReg_t *pdispReg;
  251. /**************************************************************************
  252.  *               F U N C T I O N    D E C L A R A T I O N S               *
  253.  **************************************************************************/
  254.  
  255. extern UINT32 msIdentify(UINT32);
  256. extern UINT32 msDetect(void);
  257. extern UINT32 msStateCheck();
  258. //UINT32 msBusModeSet(UINT32, UINT32, UINT32);
  259. //UINT32 msStateGet(msDev_t *);
  260. //UINT32 msRead(void *, UINT32, UINT32, UINT8 *);
  261. extern UINT32 msRead(UINT32, UINT32, UINT8 *);
  262. //UINT32 msWrite(void *, UINT32, UINT32, UINT8 *);
  263. //UINT32 msFormat(void *, UINT32);
  264. //UINT32 msProFormat(void *, UINT32);
  265. //UINT32 msTypeDetect(void);
  266. //UINT32 msSendCmd(UINT32 cmd);
  267. //UINT32 msBlockErase(UINT32 block);
  268. //UINT32 msCheckInt(UINT32 mask, UINT32 timeout);
  269. extern void msBufInit(msDev_t *);
  270. //void msLibVersionGet(UINT8 *pbuf);
  271. extern void hwMsReset(void);
  272. extern UINT32 msCardTypeMS(msDev_t *);
  273. extern UINT32 msCardTypeMSPRO(msDev_t *);
  274. //void msFmgpioSetLow(void);
  275. extern UINT32 msTableMake(UINT32 );
  276. extern UINT32 msWriteTableMake(UINT32 );
  277. extern void msTableWrite(UINT32,UINT32);
  278. extern UINT32 msLbaCalc(UINT8, UINT8);
  279. //UINT8 msParityCheck(UINT8, UINT8);
  280. UINT32 msLpaToPpaRead(UINT32);
  281. UINT32 msLpaToPpaWrite(UINT32 );
  282. //extern void msBadBlkMark(UINT32 ,UINT32);
  283. //extern UINT32 msPageRead(extraDataArea_t *,UINT32 ,UINT32 ,UINT32 ,UINT8 *,UINT32);
  284. extern UINT32 msPageRead(UINT32 ,UINT32 ,UINT32 ,UINT8 *,UINT32);
  285. //UINT32 msPageWrite( extraDataArea_t *,UINT32 ,UINT32 ,UINT32 ,UINT8 *, UINT32);
  286. extern UINT32 msPageWrite( UINT32 ,UINT32 ,UINT32 ,UINT8 *, UINT32);
  287. extern UINT32 msFreePhyBlkSearch(UINT32 );
  288. extern void msFreePhyBlkMark(UINT32 );
  289. //UINT32 msTest(UINT8* param);
  290. extern UINT32 msExtarDataRead(UINT32, UINT32);
  291. //UINT32 msExtarDataWrite(msDev_t *, UINT32, UINT32, extraDataArea_t *,UINT32);
  292. //UINT32 msWriteProtectInfoGet(void);
  293. //UINT32 msBootRescue(void);
  294. //void msBootInfoSet(UINT32,UINT8 *,UINT8 *);
  295. extern UINT32 msProDeviceInfoConfirm(UINT8 *);
  296. extern void msFlashModePreSet(UINT8 flashMode);
  297. extern void msFlashModePostSet(UINT8 flashMode);
  298. //UINT32 msWaitPolling(UINT32 *);
  299. //void debugDisplaymatrix(UINT32,UINT32,UINT32,UINT32 ,UINT8 *);/*debug use*/