1 /*----- < smil.h> ----------------------------------------------------*/ 2 #ifndef SMIL_INCD 3 #define SMIL_INCD 4 5 /*************************************************************************** 6 Define Definition 7 ***************************************************************************/ 8 #define K_BYTE 1024 /* Kilo Byte */ 9 #define SECTSIZE 512 /* Sector buffer size */ 10 #define REDTSIZE 16 /* Redundant buffer size */ 11 12 /***************************************************************************/ 13 #define DUMMY_DATA 0xFF /* No Assign Sector Read Data */ 14 15 /*************************************************************************** 16 Max Zone/Block/Sectors Data Definition 17 ***************************************************************************/ 18 #define MAX_ZONENUM 128 /* Max Zone Numbers in a SmartMedia */ 19 #define MAX_BLOCKNUM 0x0400 /* Max Block Numbers in a Zone */ 20 #define MAX_SECTNUM 0x20 /* Max Sector Numbers in a Block */ 21 #define MAX_LOGBLOCK 1000 /* Max Logical Block Numbers in a Zone */ 22 23 /***************************************************************************/ 24 #define CIS_SEARCH_SECT 0x08 /* Max CIS Search Sector Number */ 25 26 /*************************************************************************** 27 Logical to Physical Block Table Data Definition 28 ***************************************************************************/ 29 #define NO_ASSIGN 0xFFFF /* No Assign Logical Block Address */ 30 31 /*************************************************************************** 32 'SectCopyMode' Data 33 ***************************************************************************/ 34 #define COMPLETED 0 /* Sector Copy Completed */ 35 #define REQ_ERASE 1 /* Request Read Block Erase */ 36 #define REQ_FAIL 2 /* Request Read Block Failed */ 37 38 /*************************************************************************** 39 Retry Counter Definition 40 ***************************************************************************/ 41 #define RDERR_REASSIGN 1 /* Reassign with Read Error */ 42 #define L2P_ERR_ERASE 1 /* BlockErase for Contradicted L2P Table */ 43 44 /*************************************************************************** 45 Hardware ECC Definition 46 ***************************************************************************/ 47 #define HW_ECC_SUPPORTED 1 /* Hardware ECC Supported */ /* No difinition for Software ECC */ 48 49 /*************************************************************************** 50 SmartMedia Command & Status Definition 51 ***************************************************************************/ 52 /* SmartMedia Command */ 53 #define WRDATA 0x80 54 //#define READ 0x00 55 #define READ_REDT 0x50 56 //#define WRITE 0x10 57 #define RDSTATUS 0x70 58 59 #define READ1 0x00 //NO 60 #define READ2 0x01 //NO 61 #define READ3 0x50 //NO 62 #define RST_CHIP 0xFF 63 #define ERASE1 0x60 64 #define ERASE2 0xD0 65 #define READ_ID_1 0x90 66 #define READ_ID_2 0x91 67 #define READ_ID_3 0x9A 68 69 /* 712 SmartMedia Command */ 70 #define SM_CMD_RESET 0x00 // 0xFF 71 #define SM_CMD_READ_ID_1 0x10 // 0x90 72 #define SM_CMD_READ_ID_2 0x20 // 0x91 73 #define SM_CMD_READ_STAT 0x30 // 0x70 74 #define SM_CMD_RDMULTPL_STAT 0x40 // 0x71 75 #define SM_CMD_READ_1 0x50 // 0x00 76 #define SM_CMD_READ_2 0x60 // 0x01 77 #define SM_CMD_READ_3 0x70 // 0x50 78 #define SM_CMD_PAGPRGM_TRUE 0x80 // {0x80, 0x10} 79 #define SM_CMD_PAGPRGM_DUMY 0x90 // {0x80, 0x11} 80 #define SM_CMD_PAGPRGM_MBLK 0xA0 // {0x80, 0x15} 81 #define SM_CMD_BLKERASE 0xB0 // {0x60, 0xD0} 82 #define SM_CMD_BLKERASE_MULTPL 0xC0 // {0x60-0x60, 0xD0} 83 84 #define SM_CRADDTCT_DEBNCETIMER_EN 0x02 85 #define SM_CMD_START_BIT 0x01 86 87 #define SM_WaitCmdDone { while (!SM_CmdDone); } 88 #define SM_WaitDmaDone { while (!SM_DmaDone); } 89 90 // SmartMedia Status 91 #define WR_FAIL 0x01 // 0:Pass, 1:Fail 92 #define SUSPENDED 0x20 // 0:Not Suspended, 1:Suspended 93 #define READY 0x40 // 0:Busy, 1:Ready 94 #define WR_PRTCT 0x80 // 0:Protect, 1:Not Protect 95 96 // SmartMedia Busy Time (1bit:0.1ms) 97 #define BUSY_PROG 200 // tPROG : 20ms ----- Program Time old : 200 98 #define BUSY_ERASE 4000 // tBERASE : 400ms ----- Block Erase Time old : 4000 99 //for 712 Test 100 //#define BUSY_READ 1 // tR : 100us ----- Data transfer Time old : 1 101 //#define BUSY_READ 10 // tR : 100us ----- Data transfer Time old : 1 102 #define BUSY_READ 200 // tR : 20ms ----- Data transfer Time old : 1 103 //#define BUSY_RESET 60 // tRST : 6ms ----- Device Resetting Time old : 60 104 #define BUSY_RESET 600 // tRST : 60ms ----- Device Resetting Time old : 60 105 106 // Hardware Timer (1bit:0.1ms) 107 #define TIME_PON 3000 // 300ms ------ Power On Wait Time 108 #define TIME_CDCHK 200 // 20ms ------ Card Check Interval Timer 109 #define TIME_WPCHK 50 // 5ms ------ WP Check Interval Timer 110 #define TIME_5VCHK 10 // 1ms ------ 5V Check Interval Timer 111 112 /*************************************************************************** 113 Redundant Data 114 ***************************************************************************/ 115 #define REDT_DATA 0x04 116 #define REDT_BLOCK 0x05 117 #define REDT_ADDR1H 0x06 118 #define REDT_ADDR1L 0x07 119 #define REDT_ADDR2H 0x0B 120 #define REDT_ADDR2L 0x0C 121 #define REDT_ECC10 0x0D 122 #define REDT_ECC11 0x0E 123 #define REDT_ECC12 0x0F 124 #define REDT_ECC20 0x08 125 #define REDT_ECC21 0x09 126 #define REDT_ECC22 0x0A 127 128 /*************************************************************************** 129 SmartMedia Model & Attribute 130 ***************************************************************************/ 131 /* SmartMedia Attribute */ 132 #define NOWP 0x00 // 0... .... No Write Protect 133 #define WP 0x80 // 1... .... Write Protected 134 #define MASK 0x00 // .00. .... NAND MASK ROM Model 135 #define FLASH 0x20 // .01. .... NAND Flash ROM Model 136 #define AD3CYC 0x00 // ...0 .... Address 3-cycle 137 #define AD4CYC 0x10 // ...1 .... Address 4-cycle 138 #define BS16 0x00 // .... 00.. 16page/block 139 #define BS32 0x04 // .... 01.. 32page/block 140 #define PS256 0x00 // .... ..00 256byte/page 141 #define PS512 0x01 // .... ..01 512byte/page 142 #define MWP 0x80 // WriteProtect mask 143 #define MFLASH 0x60 // Flash Rom mask 144 #define MADC 0x10 // Address Cycle 145 #define MBS 0x0C // BlockSize mask 146 #define MPS 0x03 // PageSize mask 147 148 /* SmartMedia Model */ 149 #define NOSSFDC 0x00 // NO SmartMedia 150 #define SSFDC1MB 0x01 // 1MB SmartMedia 151 #define SSFDC2MB 0x02 // 2MB SmartMedia 152 #define SSFDC4MB 0x03 // 4MB SmartMedia 153 #define SSFDC8MB 0x04 // 8MB SmartMedia 154 #define SSFDC16MB 0x05 // 16MB SmartMedia 155 #define SSFDC32MB 0x06 // 32MB SmartMedia 156 #define SSFDC64MB 0x07 // 64MB SmartMedia 157 #define SSFDC128MB 0x08 //128MB SmartMedia 158 #define SSFDC256MB 0x09 159 #define SSFDC512MB 0x0A 160 #define SSFDC1GB 0x0B 161 #define SSFDC2GB 0x0C 162 163 /*************************************************************************** 164 Struct Definition 165 ***************************************************************************/ 166 struct SSFDCTYPE 167 { 168 BYTE Model; 169 BYTE Attribute; 170 BYTE MaxZones; 171 BYTE MaxSectors; 172 WORD MaxBlocks; 173 WORD MaxLogBlocks; 174 }; 175 176 typedef struct SSFDCTYPE_T 177 { 178 BYTE Model; 179 BYTE Attribute; 180 BYTE MaxZones; 181 BYTE MaxSectors; 182 WORD MaxBlocks; 183 WORD MaxLogBlocks; 184 } *SSFDCTYPE_T; 185 186 struct ADDRESS 187 { 188 BYTE Zone; /* Zone Number */ 189 BYTE Sector; /* Sector(512byte) Number on Block */ 190 WORD PhyBlock; /* Physical Block Number on Zone */ 191 WORD LogBlock; /* Logical Block Number of Zone */ 192 }; 193 194 typedef struct ADDRESS_T 195 { 196 BYTE Zone; /* Zone Number */ 197 BYTE Sector; /* Sector(512byte) Number on Block */ 198 WORD PhyBlock; /* Physical Block Number on Zone */ 199 WORD LogBlock; /* Logical Block Number of Zone */ 200 } *ADDRESS_T; 201 202 struct CIS_AREA 203 { 204 BYTE Sector; /* Sector(512byte) Number on Block */ 205 WORD PhyBlock; /* Physical Block Number on Zone 0 */ 206 }; 207 208 209 //----- SMILMain.c --------------------------------------------------- 210 /******************************************/ 211 int Init_D_SmartMedia (void); 212 int Pwoff_D_SmartMedia (void); 213 int Check_D_SmartMedia (void); 214 int Check_D_Parameter (struct us_data *,WORD *,BYTE *,BYTE *); 215 int Media_D_ReadSector (struct us_data *,DWORD,WORD,BYTE *); 216 int Media_D_WriteSector (struct us_data *,DWORD,WORD,BYTE *); 217 int Media_D_CopySector (struct us_data *,DWORD,WORD,BYTE *); 218 int Media_D_EraseBlock (struct us_data *,DWORD,WORD); 219 int Media_D_EraseAll (struct us_data *); 220 /******************************************/ 221 int Media_D_OneSectWriteStart (struct us_data *,DWORD,BYTE *); 222 int Media_D_OneSectWriteNext (struct us_data *,BYTE *); 223 int Media_D_OneSectWriteFlush (struct us_data *); 224 225 /******************************************/ 226 void SM_EnableLED (struct us_data *,BOOLEAN); 227 void Led_D_TernOn (void); 228 void Led_D_TernOff (void); 229 230 int Media_D_EraseAllRedtData (DWORD Index, BOOLEAN CheckBlock); 231 //DWORD Media_D_GetMediaInfo (struct us_data * fdoExt, PIOCTL_MEDIA_INFO_IN pParamIn, PIOCTL_MEDIA_INFO_OUT pParamOut); 232 233 //----- SMILSub.c ---------------------------------------------------- 234 /******************************************/ 235 int Check_D_DataBlank (BYTE *); 236 int Check_D_FailBlock (BYTE *); 237 int Check_D_DataStatus (BYTE *); 238 int Load_D_LogBlockAddr (BYTE *); 239 void Clr_D_RedundantData (BYTE *); 240 void Set_D_LogBlockAddr (BYTE *); 241 void Set_D_FailBlock (BYTE *); 242 void Set_D_DataStaus (BYTE *); 243 244 /******************************************/ 245 void Ssfdc_D_Reset (struct us_data *); 246 int Ssfdc_D_ReadCisSect (struct us_data *, BYTE *,BYTE *); 247 void Ssfdc_D_WriteRedtMode (void); 248 void Ssfdc_D_ReadID (BYTE *, BYTE); 249 int Ssfdc_D_ReadSect (struct us_data *, BYTE *,BYTE *); 250 int Ssfdc_D_ReadBlock (struct us_data *, WORD, BYTE *,BYTE *); 251 int Ssfdc_D_WriteSect (struct us_data *, BYTE *,BYTE *); 252 int Ssfdc_D_WriteBlock (struct us_data *, WORD, BYTE *,BYTE *); 253 int Ssfdc_D_CopyBlock (struct us_data *, WORD, BYTE *,BYTE *); 254 int Ssfdc_D_WriteSectForCopy (struct us_data *, BYTE *,BYTE *); 255 int Ssfdc_D_EraseBlock (struct us_data *); 256 int Ssfdc_D_ReadRedtData (struct us_data *, BYTE *); 257 int Ssfdc_D_WriteRedtData (struct us_data *, BYTE *); 258 int Ssfdc_D_CheckStatus (void); 259 int Set_D_SsfdcModel (BYTE); 260 void Cnt_D_Reset (void); 261 int Cnt_D_PowerOn (void); 262 void Cnt_D_PowerOff (void); 263 void Cnt_D_LedOn (void); 264 void Cnt_D_LedOff (void); 265 int Check_D_CntPower (void); 266 int Check_D_CardExist (void); 267 int Check_D_CardStsChg (void); 268 int Check_D_SsfdcWP (void); 269 int SM_ReadBlock (struct us_data *, BYTE *,BYTE *); 270 271 int Ssfdc_D_ReadSect_DMA (struct us_data *, BYTE *,BYTE *); 272 int Ssfdc_D_ReadSect_PIO (struct us_data *, BYTE *,BYTE *); 273 int Ssfdc_D_WriteSect_DMA (struct us_data *, BYTE *,BYTE *); 274 int Ssfdc_D_WriteSect_PIO (struct us_data *, BYTE *,BYTE *); 275 276 /******************************************/ 277 int Check_D_ReadError (BYTE *); 278 int Check_D_Correct (BYTE *,BYTE *); 279 int Check_D_CISdata (BYTE *,BYTE *); 280 void Set_D_RightECC (BYTE *); 281 282 //----- SMILECC.c ---------------------------------------------------- 283 void calculate_ecc (BYTE *, BYTE *, BYTE *, BYTE *, BYTE *); 284 BYTE correct_data (BYTE *, BYTE *, BYTE, BYTE, BYTE); 285 int _Correct_D_SwECC (BYTE *,BYTE *,BYTE *); 286 void _Calculate_D_SwECC (BYTE *,BYTE *); 287 288 void SM_Init (void); 289 290 #endif // already included 291