Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Oct 7th, 2013  |  syntax: None  |  size: 11.84 KB  |  views: 30  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /********************************************************************************
  2. *********************************************************************************
  3.                         COPYRIGHT (c)   2004 BY ROCK-CHIP FUZHOU
  4.                                 --  ALL RIGHTS RESERVED  --
  5.  
  6. File Name:  flash.h
  7. Author:     XUESHAN LIN
  8. Created:    1st Dec 2008
  9. Modified:
  10. Revision:   1.00
  11. ********************************************************************************
  12. ********************************************************************************/
  13. #ifndef _FLASH_H
  14. #define _FLASH_H
  15.  
  16. //1¿ÉÅäÖòÎÊý
  17. #define     DUAL_PLANE      //¶¨ÒåÊÇ·ñʹÄÜDUAL PLANE
  18. //#define     INTERLEAVE      //¶¨ÒåÊÇ·ñʹÄÜInterleave
  19.  
  20. #define         MAX_FLASH_NUM                   4                                   /*×î´óÖ§³ÖµÄFLASHÊý*/
  21. #define     MAX_REFLESH_LOG     10                      //¶¨ÒåÐèÒª¸üеĵØÖ·¼Ç¼Êý
  22. #define     DATA_LEN            (8192*2/4)              //Êý¾Ý¿éµ¥Î»word
  23. #define     SPARE_LEN           (256*2/4)               //УÑéÊý¾Ý³¤¶È
  24. #define     PAGE_SIZE           (DATA_LEN+SPARE_LEN)    //ÿ¸öÊý¾Ýµ¥Î»µÄ³¤¶È
  25.  
  26. #define     CHIP_SIGN               0x37324B52              //RK28 0x37324B52
  27.  
  28. /*******************************************************************
  29. ºê³£Êý¶¨Òå
  30. *******************************************************************/
  31.  
  32.  
  33. /*******************************************************************
  34. ³§ÉÌID±àÂë
  35. *******************************************************************/
  36. #define     SAMSUNG             0x00            //ÈýÐÇSAMSUNG
  37. #define     TOSHIBA             0x01            //¶«Ö¥TOSHIBA
  38. #define     HYNIX               0x02            //º£Á¦Ê¿HYNIX
  39. #define     INFINEON            0x03            //Ó¢·ÉÁèINFINEON
  40. #define     MICRON              0x04            //ÃÀ¹âMICRON
  41. #define     RENESAS             0x05            //ÈðÈøRENESAS
  42. #define     ST                  0x06            //Òâ·¨°ëµ¼ÌåST
  43. #define     INTEL               0x07            //Ó¢Ìضûintel
  44.  
  45. /*******************************************************************
  46. Æ÷¼þID±àÂë
  47. *******************************************************************/
  48. #define     Small64M            0x00
  49. #define     Small128M           0x01
  50. #define     Large128M           0x02
  51. #define     Large256M           0x03
  52. #define     Large512M           0x04
  53. #define     Large1G             0x05
  54. #define     Large2G             0x06
  55.  
  56.  
  57. /*******************************************************************
  58. FLASHͨ¹ý²Ù×÷ÃüÁ(ÈýÐÇ)
  59. *******************************************************************/
  60. #define     RESET_CMD               0xff
  61. #define     READ_ID_CMD             0x90
  62. #define     READ_UNIQUE_ID_CMD      0xed
  63. #define     READ_STATUS_CMD         0x70
  64. #define     READ_STATUS_CMD_TOSHIBA 0x71
  65. #define     READ_STATUS_CMD_MICRON  0x78
  66. #define     CHIP1_STATUS_CMD        0xf1
  67. #define     CHIP2_STATUS_CMD        0xf2
  68. #define     PAGE_PROG_CMD           0x8010
  69. #define     PLANE2_PAGE_PROG_CMD    0x8111
  70. #define     INTERLEAVE_PROG_CMD     0x8080
  71. #define     BLOCK_ERASE_CMD         0x60d0
  72.  
  73. /*******************************************************************
  74. LARGE PAGE FLASH²Ù×÷ÃüÁ(ÈýÐÇ)
  75. *******************************************************************/
  76. #define     READ_CMD                0x0030
  77. #define     DUALPLANE_READ_CMD      0x6030
  78. #define     READ_COPY_CMD           0x0035
  79. #define     CACHE_PROG_CMD          0x8015
  80. #define     COPY_PROG_CMD           0x8510
  81. #define     RAND_DATAIN_CMD         0x85
  82. #define     RAND_DATAOUT_CMD        0x05e0
  83. #define     PLANE1_DATAOUT_CMD      0x06e0
  84. /*******************************************************************
  85. SMALL PAGE FLASH²Ù×÷ÃüÁ(ÈýÐÇ)
  86. *******************************************************************/
  87. #define     READ0_CMD               0x00
  88. #define     READ1_CMD               0x01
  89. #define     READ_SPARE_CMD          0x50
  90. #define     SMALL_COPY_PROG_CMD     0x8A10
  91.  
  92. //BCHCTL¼Ä´æÆ÷
  93. #define     BCH_WR                  0x0002
  94. #define     BCH_RST                 0x0001
  95. //FLCTL¼Ä´æÆ÷
  96. #define     FL_RDY                  0x1000
  97. #define     FL_COR_EN               0x0800
  98. #define     FL_INT_EN               0x0400
  99. #define     FL_XFER_EN              0x0200
  100. #define     FL_INTCLR_EN            0x0100
  101. #define     FL_START                0x0004
  102. #define     FL_WR                   0x0002
  103. #define     FL_RST                  0x0001
  104.  
  105. #define     FLASH_PROTECT_ON()      //write_XDATA32(FMCTL, ReadNandReg(FMCTL) & (~0x10))
  106. #define     FLASH_PROTECT_OFF()     //write_XDATA32(FMCTL, ReadNandReg(FMCTL) | 0x10)
  107.  
  108. /*******************************************************************
  109. FLASH¶Áд½Ó¿Ú
  110. *******************************************************************/
  111.  
  112. //1½á¹¹¶¨Òå
  113. //chip interface reg
  114. typedef volatile struct tagCHIP_IF
  115. {
  116.     uint32 data;
  117.     uint32 addr;
  118.     uint32 cmd;
  119.     uint32 RESERVED[0x7d];
  120. }CHIP_IF, *pCHIP_IF;
  121.  
  122. //NANDC Registers
  123. typedef volatile struct tagNANDC
  124. {
  125.     uint32 FMCTL;
  126.     uint32 FMWAIT;
  127.     uint32 FLCTL;
  128.     uint32 BCHCTL;
  129.     uint32 RESERVED1[(0xd0-0x10)/4];
  130.     uint32 BCHST;
  131.     uint32 RESERVED2[(0x200-0xd4)/4];
  132.     CHIP_IF chip[4];
  133.     uint32 buf[0x800/4];
  134.     uint32 spare[0x80/4];
  135. } NANDC, *pNANDC;
  136.  
  137. typedef struct tagFLASH_SPEC
  138. {
  139.     uint8       EccBits;                        //ECC±ÈÌØÊý
  140.     uint8   CacheProg;          //ÊÇ·ñÖ§³Öcache program
  141.     uint8   MulPlane;           //ÊÇ·ñÖ§³ÖMultiPlane
  142.     uint8   Interleave;         //ÊÇ·ñÖ§³ÖInterleave
  143.     uint8   Large;              //ÊÇ·ñLargeBlock
  144.     uint8   Five;               //ÊÇ·ñÓÐ3¸öÐеØÖ·
  145.     uint8   MLC;                //ÊÇ·ñMLC
  146.     uint8   Vonder;             //³§ÉÌ
  147.     uint8   AccessTime;         //cycle time
  148.     uint8   SecPerPage;         //FLASH DualPlaneÿPAGEÉÈÇøÊý
  149.     uint8   SecPerPageRaw;              //FLASHԭʼÿPAGEÉÈÇøÊý
  150.     uint32      SecPerBlock;
  151.     uint32      SecPerBlockRaw;
  152.     uint32      PagePerBlock;
  153.     uint32      Die2PageAddr;
  154.     uint32  TotalPhySec;
  155.     uint32      TotPhySec[MAX_FLASH_NUM];
  156. } FLASH_SPEC, *pFLASH_SPEC;
  157.  
  158. typedef struct _FLASH_CMD
  159. {
  160.     uint8   Valid;      //ָʾÊÇ·ñÓÐЧ
  161.     uint16  Cmd;        //FLASHÃüÁîÂë
  162.     uint32  ReadSec;    //ÎïÀíÉÈÇøµØÖ·
  163.     uint32  ErrSec;     //³ö´íÎïÀíÉÈÇøµØÖ·
  164.     uint8*  Buf;        //»º³åÇø
  165.     uint16  Len;        //ÉÈÇøÊý
  166. } FLASH_CMD, *pFLASH_CMD;
  167.  
  168. /*ID BLOCK SECTOR 0 INFO*/
  169. #ifndef LINUX
  170. typedef __packed struct tagIDSEC0
  171. #else
  172. typedef struct tagIDSEC0
  173. #endif
  174. {
  175.     uint32  magic;              //0x0ff0aa55, MASKROMÏÞ¶¨²»Äܸü¸Ä
  176.     uint8   reserved[8];
  177.     uint16  bootCodeOffset1;    //Öмä¼þÉÈÇøÆ«ÒÆ, MASKROMÏÞ¶¨²»Äܸü¸Ä
  178.     uint16  bootCodeOffset2;    //µÚ¶þ·ÝÖмä¼þÆ«ÒÆ
  179.     uint8   reserved1[508-16];
  180.     uint16  bootCodeSize;       //ÒÔSEC±íʾµÄÖмä¼þ´óС, MASKROMÏÞ¶¨²»Äܸü¸Ä
  181.     uint16  crc16;              //Õû¸öID SECµÄÇ°512£­2×Ö½ÚÊý¾ÝµÄCRC16
  182. #ifndef LINUX
  183. } IDSEC0, *pIDSEC0;
  184. #else
  185. }__attribute__((packed)) IDSEC0, *pIDSEC0;
  186. #endif
  187.  
  188. /*ID BLOCK SECTOR 1 INFO*/
  189. #ifndef LINUX
  190. typedef __packed struct tagIDSEC1
  191. #else
  192. typedef struct tagIDSEC1
  193. #endif
  194. {
  195.     uint16  sysAreaBlockRaw;        //ϵͳ±£Áô¿é, ÒÔԭʼBlockΪµ¥Î»
  196.     uint16  sysProgDiskCapacity;    //ϵͳ¹Ì¼þÅÌÈÝÁ¿, ÒÔMBΪµ¥Î»
  197.     uint16  sysDataDiskCapacity;    //ϵͳ²ÎÊýÅÌÈÝÁ¿, ÒÔMBΪµ¥Î»
  198.     uint16  reserved0[2];           //±£Áô²¿·ÖÌî0
  199.     uint16  chipSignL;              // 28
  200.     uint16  chipSignH;              // RK
  201.     uint16  MachineUIDL;            //»úÐÍUID,Éý¼¶Ê±Æ¥Åä¹Ì¼þÓÃ
  202.     uint16  MachineUIDH;
  203.     uint16  year;                   //Öмä¼þÉú³ÉÈÕÆÚÄê
  204.     uint16  data;                   //Öмä¼þÉú³ÉÈÕÆÚÔÂÈÕ
  205.     uint16  mainVer;                //Ö÷°æ±¾ºÅ
  206.     uint8   reserved1[489-24];      //±£Áô²¿·ÖÌî0
  207.     uint8   accessTime;             //¶Áдcycleʱ¼ä, ns
  208.     uint16  blockSize;              //ÒÔSEC±íʾµÄBLOCK SIZE
  209.     uint8   pageSize;               //ÒÔSEC±íʾµÄPAGE SIZE
  210.     uint8   eccBits;                //ÐèÒªµÄECC BITÊý, eg. 8/14
  211.     uint16  bStartEIB;
  212.     uint16  bEndEIB;
  213.     uint16  bStartRB;
  214.     uint16  bEndRB;
  215.     uint16  idBlk[5];                //ID¿éλÖÃ
  216. #ifndef LINUX
  217. }IDSEC1, *pIDSEC1;
  218. #else
  219. }__attribute__((packed)) IDSEC1, *pIDSEC1;
  220. #endif
  221.  
  222. #ifndef LINUX
  223. typedef __packed struct _FLASH_INFO
  224. #else
  225. typedef struct _FLASH_INFO
  226. #endif
  227. {
  228.     uint32  FlashSize;          //(SectorΪµ¥Î»)  4Byte
  229.     uint16  BlockSize;          //(SectorΪµ¥Î»)  2Byte
  230.     uint8   PageSize;           //(SectorΪµ¥Î»)  1Byte
  231.     uint8   ECCBits;            //(bitsΪµ¥Î»)    1Byte
  232.     uint8   AccessTime;
  233.     uint8   ManufacturerName;   // 1Byte
  234.     uint8   FlashMask;          //ÿһbit´ú±íÄǸöƬѡÊÇ·ñÓÐFLASH
  235. #ifndef LINUX
  236. } FLASH_INFO, *pFLASH_INFO;
  237. #else
  238. }__attribute__((packed)) FLASH_INFO, *pFLASH_INFO;
  239. #endif
  240.  
  241. //1È«¾Ö±äÁ¿
  242. #undef  EXT
  243. #ifdef  IN_FLASH
  244. #define EXT
  245. #else
  246. #define EXT             extern
  247. #endif
  248. EXT             FLASH_SPEC FlashSpec;
  249. EXT             FLASH_CMD FlashPendCmd;
  250. EXT             pNANDC  NandReg;       //NANDC¼Ä´æÆ÷
  251. EXT             uint32  RefleshSec[MAX_REFLESH_LOG];
  252. EXT             uint32  SysProgDiskCapacity;                    //ϵͳ³ÌÐòÅÌÈÝÁ¿
  253. EXT             uint32  SysDataDiskCapacity;                    //ϵͳÊý¾ÝÅÌÈÝÁ¿
  254. EXT             uint16  SysAreaBlockRaw;
  255. EXT             uint8   FlashReadStatusCmd;
  256. EXT             uint32  FlashSysProtMagic;
  257. EXT             uint32  FlashSysProtAddr;
  258. EXT     uint16  LoaderVer;
  259.  
  260. //1º¯ÊýÔ­ÐÍÉùÃ÷
  261. //flash.c
  262. extern  void    FlashTimingCfg(uint32 AHBnKHz);
  263. extern  void    FlashSysProtSet(uint32);
  264. extern  uint32  FlashInit(void);
  265. extern  uint32  FlashReadEnhanced(uint32 sec, void *pData, void *pSpare, uint8 nSec, uint32 nextSec);
  266. extern  uint32  FlashProgPage(uint32 sec, void *pData, void *pSpare, uint8 nSec);
  267. extern  uint32  FlashProgEnhanced(uint32 sec, void* buf, void* spare);
  268. extern  uint32  FlashBlockErase(uint32 sec);
  269. extern  uint32  FlashCopyProg(uint32 srcSec, uint32 destSec, uint16 nSec, void *pSpare);
  270.  
  271. //1±í¸ñ¶¨Òå
  272. #ifdef  IN_FLASH
  273. /*******************************
  274. ³§ÉÌID±í
  275. ********************************/
  276. uint8 ManufactureIDTbl[]=
  277. {
  278.     0xec,                                       //ÈýÐÇSAMSUNG
  279.     0x98,                                       //¶«Ö¥TOSHIBA
  280.     0xad,                                       //º£Á¦Ê¿HYNIX
  281.     0xc1,                                       //Ó¢·ÉÁèINFINEON
  282.     0x2c,                                       //ÃÀ¹âMICRON
  283.     0x07,                                       //ÈðÈøRENESAS
  284.     0x20,                                       //Òâ·¨°ëµ¼ÌåST
  285.     0x89                                        //Ó¢Ìضûintel
  286. };
  287.  
  288. /*******************************
  289. Æ÷¼þID±í
  290. ********************************/
  291. uint8 DeviceCode[]=
  292. {
  293.     0x76,                                       //small 8bit-64MB
  294.     0x79,                                       //small 8bit-128MB
  295.     0xF1,                                       //large 8bit-128M
  296.     0xDA,                                       //large 8bit-256M
  297.     0xDC,                                       //large 8bit-512M
  298.     0xD3,                                       //large 8bit-1G
  299.     0xD5,                                       //large 8bit-2G
  300.     0xD7,                                       //large 8bit-4G
  301.     0xD9                                        //large 8bit-8G
  302. };
  303.  
  304. /*******************************
  305. Æ÷¼þÐÅÏ¢±í
  306. ********************************/
  307. uint32 DeviceInfo[]=            //phisical sectors
  308. {
  309.     0x20000,                                    // DI_64M,      small page
  310.     0x40000,                                    // DI_128M,     small page
  311.     0x40000,                                    // DI_128M,     large page
  312.     0x80000,                                    // DI_256M,     large page
  313.     0x100000,                                   // DI_512M,     large page
  314.     0x200000,                                   // DI_1G,   large page
  315.     0x400000,                                   // DI_2G,   large page
  316.     0x800000,                                   // DI_4G,   large page
  317.     0x1000000                                   // DI_8G,   large page
  318. };
  319.  
  320. #if 0
  321. const char* VonderDesc[]=
  322. {
  323.     "Samsung",
  324.     "Toshiba",
  325.     "Hynix",
  326.     "Infineon",
  327.     "Micron",
  328.     "Renesas",
  329.     "ST",
  330.     "Intel"
  331. };
  332. #endif
  333. #else
  334. extern  uint8   ManufactureIDTbl[];
  335. extern  uint8   DeviceCode[];
  336. extern  uint32  DeviceInfo[];
  337. #endif
  338. #endif
clone this paste RAW Paste Data