smc.h
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:10k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. **********************************************************************
  3. *                          Micrium, Inc.
  4. *                      949 Crestview Circle
  5. *                     Weston,  FL 33327-1848
  6. *
  7. *                            uC/FS
  8. *
  9. *             (c) Copyright 2001 - 2003, Micrium, Inc.
  10. *                      All rights reserved.
  11. *
  12. ***********************************************************************
  13. ----------------------------------------------------------------------
  14. File        : smc.h
  15. Purpose     : Generic header file for the file system's SMC driver
  16. ----------------------------------------------------------------------
  17. Known problems or limitations with current version
  18. ----------------------------------------------------------------------
  19. None.
  20. ---------------------------END-OF-HEADER------------------------------
  21. */
  22. #ifndef __SMC_H__
  23. #define __SMC_H__
  24. /*********************************************************************
  25. *
  26. *             #define constants
  27. *
  28. **********************************************************************
  29. */
  30. #define SUCCESS          0          /* SUCCESS     */
  31. #define ERROR           -1          /* ERROR       */
  32. #define CORRECT          1          /* CORRECTABLE */
  33. /*********************************************************************
  34. *
  35. *             Error codes
  36. */
  37. #define NO_ERROR            0x0000  /* NO ERROR                            */
  38. #define ERR_WriteFault      0x0003  /* Peripheral Device Write Fault       */
  39. #define ERR_HwError         0x0004  /* Hardware Error                      */
  40. #define ERR_DataStatus      0x0010  /* DataStatus Error                    */
  41. #define ERR_EccReadErr      0x0011  /* Unrecovered Read Error              */
  42. #define ERR_CorReadErr      0x0018  /* Recovered Read Data with ECC        */
  43. #define ERR_OutOfLBA        0x0021  /* Illegal Logical Block Address       */
  44. #define ERR_WrtProtect      0x0027  /* Write Protected                     */
  45. #define ERR_ChangedMedia    0x0028  /* Medium Changed                      */
  46. #define ERR_UnknownMedia    0x0030  /* Incompatible Medium Installed       */
  47. #define ERR_IllegalFmt      0x0031  /* Medium Format Corrupted             */
  48. #define ERR_NoSmartMedia    0x003A  /* Medium Not Present                  */
  49. /*********************************************************************
  50. *
  51. *             SMC constants
  52. */
  53. #define K_BYTE          1024    /* Kilo Byte */
  54. #define SECTSIZE        512     /* Sector buffer size */
  55. #define REDTSIZE        16      /* Redundant buffer size */
  56. #define DUMMY_DATA      0xFF    /* No Assign Sector Read Data */
  57. /*********************************************************************
  58. *
  59. *             SMC max values
  60. */
  61. #define MAX_ZONENUM     0x08    /* Max Zone Numbers in a SmartMedia */
  62. #define MAX_BLOCKNUM    0x0400  /* Max Block Numbers in a Zone */
  63. #define MAX_SECTNUM     0x20    /* Max Sector Numbers in a Block */
  64. #define MAX_LOGBLOCK    1000    /* Max Logical Block Numbers in a Zone */
  65. /*********************************************************************
  66. *
  67. *             Logical to Physical Block Table Data Definition
  68. */
  69. #define NO_ASSIGN       0xFFFF  /* No Assign Logical Block Address */
  70. /*********************************************************************
  71. *
  72. *             '_FS_SMC_SectCopyMode' Data
  73. */
  74. #define COMPLETED        0          /* Sector Copy Completed     */
  75. #define REQ_ERASE        1          /* Request Read Block Erase  */
  76. #define REQ_FAIL         2          /* Request Read Block Failed */
  77. /*********************************************************************
  78. *
  79. *             Retry counters
  80. */
  81. #define RDERR_REASSIGN  1       /* Reassign with Read Error */
  82. #define L2P_ERR_ERASE   1       /* BlockErase for Contradicted L2P Table */
  83. /*********************************************************************
  84. *
  85. *             SMC commands & status
  86. */
  87. /* SmartMedia Command */
  88. #define WRDATA      0x80
  89. #define READ        0x00
  90. #define READ_REDT   0x50
  91. #define READ1       0x00
  92. #define READ2       0x01
  93. #define READ3       0x50
  94. #define RST_CHIP    0xFF
  95. #define WRITE       0x10
  96. #define ERASE1      0x60
  97. #define ERASE2      0xD0
  98. #define RDSTATUS    0x70
  99. #define READ_ID     0x90
  100. /* SmartMedia Status */
  101. #define WR_FAIL     0x01    /* 0:Pass,          1:Fail */
  102. #define SUSPENDED   0x20    /* 0:Not Suspended, 1:Suspended */
  103. #define READY       0x40    /* 0:Busy,          1:Ready */
  104. #define WR_PRTCT    0x80    /* 0:Protect,       1:Not Protect */
  105. /*********************************************************************
  106. *
  107. *             Timer constants
  108. */
  109.  /* SmartMedia Busy Time (1bit:0.1ms) */
  110. #define BUSY_PROG   200     /* tPROG  :  20ms ----- Program Time */
  111. #define BUSY_ERASE  4000    /* tBERASE: 400ms ----- Block Erase Time */
  112. #define BUSY_READ   1       /* tR     : 100us ----- Data transfer Time */
  113. #define BUSY_RESET  60      /* tRST   :   6ms ----- Device Resetting Time  */
  114. /* Hardware Timer (1bit:0.1ms) */
  115. #define TIME_PON    3000    /* 300ms ------ Power On Wait Time */
  116. #define TIME_CDCHK  200     /*  20ms ------ Card Check Interval Timer */
  117. #define TIME_WPCHK  50      /*   5ms ------ WP Check Interval Timer */
  118. /*********************************************************************
  119. *
  120. *             Redundant data offset
  121. */
  122. #define REDT_DATA   0x04
  123. #define REDT_BLOCK  0x05
  124. #define REDT_ADDR1H 0x06
  125. #define REDT_ADDR1L 0x07
  126. #define REDT_ADDR2H 0x0B
  127. #define REDT_ADDR2L 0x0C
  128. #define REDT_ECC10  0x0D
  129. #define REDT_ECC11  0x0E
  130. #define REDT_ECC12  0x0F
  131. #define REDT_ECC20  0x08
  132. #define REDT_ECC21  0x09
  133. #define REDT_ECC22  0x0A
  134. /*********************************************************************
  135. *
  136. *             SmartMedia Model & Attribute
  137. */
  138. /* SmartMedia Attribute */
  139. #define NOWP        0x00    /* 0... .... No Write Protect */
  140. #define WP          0x80    /* 1... .... Write Protected */
  141. #define MASK        0x00    /* .00. .... NAND MASK ROM Model */
  142. #define FLASH       0x20    /* .01. .... NAND Flash ROM Model */
  143. #define AD3CYC      0x00    /* ...0 .... Address 3-cycle */
  144. #define AD4CYC      0x10    /* ...1 .... Address 4-cycle */
  145. #define BS16        0x00    /* .... 00.. 16page/block */
  146. #define BS32        0x04    /* .... 01.. 32page/block */
  147. #define PS256       0x00    /* .... ..00 256byte/page */
  148. #define PS512       0x01    /* .... ..01 512byte/page */
  149. #define MWP         0x80    /* WriteProtect mask */
  150. #define MFLASH      0x60    /* Flash Rom mask */
  151. #define MADC        0x10    /* Address Cycle */
  152. #define MBS         0x0C    /* BlockSize mask */
  153. #define MPS         0x03    /* PageSize mask */
  154. /* SmartMedia Model */
  155. #define NOSSFDC         0x00    /*   NO SmartMedia */
  156. #define SSFDC1MB        0x01    /*  1MB SmartMedia */
  157. #define SSFDC2MB        0x02    /*  2MB SmartMedia */
  158. #define SSFDC4MB        0x03    /*  4MB SmartMedia */
  159. #define SSFDC8MB        0x04    /*  8MB SmartMedia */
  160. #define SSFDC16MB       0x05    /* 16MB SmartMedia */
  161. #define SSFDC32MB       0x06    /* 32MB SmartMedia */
  162. #define SSFDC64MB       0x07    /* 64MB SmartMedia */
  163. #define SSFDC128MB      0x08    /*128MB SmartMedia */
  164. /*********************************************************************
  165. *
  166. *             Global data types
  167. *
  168. **********************************************************************
  169. */
  170. struct FS__SMC_ATTRIBTYPE {
  171.     unsigned char  Model;
  172.     unsigned char  Attribute;
  173.     unsigned char  MaxZones;
  174.     unsigned char  MaxSectors;
  175.     unsigned short MaxBlocks;
  176.     unsigned short MaxLogBlocks;
  177. };
  178. struct FS__SMC_PARAMTYPE
  179. {
  180.     unsigned char  Zone;        /* Zone Number */
  181.     unsigned char  Sector;      /* Sector(512byte) Number on Block */
  182.     unsigned short PhyBlock;    /* Physical Block Number on Zone */
  183.     unsigned short LogBlock;    /* Logical Block Number of Zone */
  184. };
  185. /*********************************************************************
  186. *
  187. *             Externals
  188. *
  189. **********************************************************************
  190. */
  191. extern struct FS__SMC_ATTRIBTYPE FS__SMC_cardattrib[FS_SMC_MAXUNIT];
  192. extern struct FS__SMC_PARAMTYPE  FS__SMC_cardparam[FS_SMC_MAXUNIT];
  193. /*********************************************************************
  194. *
  195. *             Global function prototypes
  196. *
  197. **********************************************************************
  198. */
  199. /*********************************************************************
  200. *
  201. *             smc_ecc.c
  202. */
  203. int  FS__SMC_ECC_Chk_CISdata(unsigned char *,unsigned char *);
  204. int  FS__SMC_ECC_Chk_ECCdata(unsigned char *,unsigned char *);
  205. void FS__SMC_ECC_Set_ECCdata(unsigned char *,unsigned char *);
  206. /*********************************************************************
  207. *
  208. *             smc_phy.c
  209. */
  210. void FS__SMC_PHY_Reset(FS_u32 id);
  211. void FS__SMC_PHY_WriteRedtMode(FS_u32 id);
  212. void FS__SMC_PHY_ReadID(FS_u32 id,unsigned short *);
  213. int  FS__SMC_PHY_ReadSect(FS_u32 id,unsigned char *,unsigned char *);
  214. int  FS__SMC_PHY_WriteSect(FS_u32 id,unsigned char *,unsigned char *);
  215. int  FS__SMC_PHY_EraseBlock(FS_u32 id);
  216. int  FS__SMC_PHY_ReadRedtData(FS_u32 id,unsigned char *);
  217. int  FS__SMC_PHY_WriteRedtData(FS_u32 id,unsigned char *);
  218. int  FS__SMC_PHY_CheckStatus(FS_u32 id);
  219. int  FS__SMC_PHY_Set_Model(FS_u32 id,unsigned char);
  220. void FS__SMC_PHY_Cnt_Reset(FS_u32 id);
  221. int  FS__SMC_PHY_Cnt_PowerOn(FS_u32 id);
  222. int  FS__SMC_PHY_Chk_CntPower(FS_u32 id);
  223. int  FS__SMC_PHY_Chk_CardExist(FS_u32 id);
  224. int  FS__SMC_PHY_Chk_CardStsChg(FS_u32 id);
  225. int  FS__SMC_PHY_Chk_WP(FS_u32 id);
  226. /*********************************************************************
  227. *
  228. *             smc_log.c
  229. */
  230. int FS__SMC_Init(FS_u32 id);
  231. int FS__SMC_ReadSector(FS_u32 id,unsigned long start,unsigned short count,unsigned char *buf);
  232. int FS__SMC_WriteSector(FS_u32 id,unsigned long start,unsigned short count,unsigned char *buf);
  233. #endif /* __SMC_H__ */