nand.h
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:5k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. //
  2. // Copyright (c) Microsoft Corporation.  All rights reserved.
  3. //
  4. //
  5. // Use of this source code is subject to the terms of the Microsoft end-user
  6. // license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
  7. // If you did not accept the terms of the EULA, you are not authorized to use
  8. // this source code. For a copy of the EULA, please see the LICENSE.RTF on your
  9. // install media.
  10. //
  11. /*++
  12. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  13. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  14. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  15. PARTICULAR PURPOSE.
  16. --*/
  17. #ifndef __NAND_H__
  18. #define __NAND_H__
  19. #define NUM_BLOCKS                  0x1000       //  64 MB Smartmedia card.
  20. #define SECTOR_SIZE                 512
  21. #define SPARE_SIZE                  16
  22. #define PAGES_PER_BLOCK             32
  23. //  For flash chip that is bigger than 32 MB, we need to have 4 step address
  24. //  
  25. #define NFCONF_INIT                 0xF830  // 512-byte 4 Step Address
  26. #define NEED_EXT_ADDR               1
  27. //#define NFCONF_INIT                 0xA830  // 256-byte 4 Step Address
  28. //#define NEED_EXT_ADDR               0
  29. //#define NFCONF_INIT                0xF840
  30. //  NAND Flash Command. This appears to be generic across all NAND flash chips
  31. #define CMD_READ                    0x00        //  Read
  32. #define CMD_READ1                   0x01        //  Read1
  33. #define CMD_READ2                   0x50        //  Read2
  34. #define CMD_READID                  0x90        //  ReadID
  35. #define CMD_WRITE                   0x80        //  Write phase 1
  36. #define CMD_WRITE2                  0x10        //  Write phase 2
  37. #define CMD_ERASE                   0x60        //  Erase phase 1
  38. #define CMD_ERASE2                  0xd0        //  Erase phase 2
  39. #define CMD_STATUS                  0x70        //  Status read
  40. #define CMD_RESET                   0xff        //  Reset
  41. //  Status bit pattern
  42. #define STATUS_READY                0x40        //  Ready
  43. #define STATUS_ERROR                0x01        //  Error
  44. typedef DWORD  SECTOR_ADDR;
  45. typedef PDWORD PSECTOR_ADDR;
  46. typedef struct _SectorInfo
  47. {
  48. DWORD dwReserved1; // Reserved - used by FAL
  49. BYTE  bOEMReserved; // For use by OEM
  50. BYTE  bBadBlock; // Indicates if block is BAD
  51. WORD  wReserved2; // Reserved - used by FAL
  52. }SectorInfo, *PSectorInfo;
  53.     
  54. #define SECTOR_TO_BLOCK(sector) ((sector) >> 5 )
  55. #define BLOCK_TO_SECTOR(block)  ((block)  << 5 )
  56. //
  57. // ERROR_Xxx
  58. //
  59. #define ERR_SUCCESS               0
  60. #define ERR_DISK_OP_FAIL1         1
  61. #define ERR_DISK_OP_FAIL2         2
  62. #define ERR_INVALID_BOOT_SECTOR   3
  63. #define ERR_INVALID_LOAD_ADDR     4
  64. #define ERR_GEN_FAILURE           5
  65. #define ERR_INVALID_PARAMETER     6
  66. #define ERR_JUMP_FAILED           7
  67. #define ERR_INVALID_TOC           8
  68. #define ERR_INVALID_FILE_TYPE     9
  69. BOOL 
  70. FMD_ReadSector(
  71.     SECTOR_ADDR startSectorAddr, 
  72.     LPBYTE pSectorBuff,
  73.     PSectorInfo pSectorInfoBuff, 
  74.     DWORD dwNumSectors
  75.     );
  76. #ifdef READ_SECTOR_INFO
  77. void 
  78. NAND_ReadSectorInfo(
  79.     SECTOR_ADDR sectorAddr, 
  80.     PSectorInfo pInfo
  81.     );
  82. #endif
  83. void NF_Reset(void);
  84. void NF_Init(void);
  85. #define NF_READID   1
  86.     
  87. #ifdef NF_READID
  88. void NF_ReadID(void);
  89. #else
  90. #define NF_ReadID()
  91. #endif
  92. typedef struct ROMHDR {
  93.     ULONG   dllfirst;               // first DLL address
  94.     ULONG   dlllast;                // last DLL address
  95.     ULONG   physfirst;              // first physical address
  96.     ULONG   physlast;               // highest physical address
  97.     ULONG   nummods;                // number of TOCentry's
  98.     ULONG   ulRAMStart;             // start of RAM
  99.     ULONG   ulRAMFree;              // start of RAM free space
  100.     ULONG   ulRAMEnd;               // end of RAM
  101.     ULONG   ulCopyEntries;          // number of copy section entries
  102.     ULONG   ulCopyOffset;           // offset to copy section
  103.     ULONG   ulProfileLen;           // length of PROFentries RAM 
  104.     ULONG   ulProfileOffset;        // offset to PROFentries
  105.     ULONG   numfiles;               // number of FILES
  106.     ULONG   ulKernelFlags;          // optional kernel flags from ROMFLAGS .bib config option
  107.     ULONG   ulFSRamPercent;         // Percentage of RAM used for filesystem 
  108.                                         // from FSRAMPERCENT .bib config option
  109.                                         // byte 0 = #4K chunks/Mbyte of RAM for filesystem 0-2Mbytes 0-255
  110.                                         // byte 1 = #4K chunks/Mbyte of RAM for filesystem 2-4Mbytes 0-255
  111.                                         // byte 2 = #4K chunks/Mbyte of RAM for filesystem 4-6Mbytes 0-255
  112.                                         // byte 3 = #4K chunks/Mbyte of RAM for filesystem > 6Mbytes 0-255
  113.     ULONG   ulDrivglobStart;        // device driver global starting address
  114.     ULONG   ulDrivglobLen;          // device driver global length
  115.     USHORT  usCPUType;              // CPU (machine) Type
  116.     USHORT  usMiscFlags;            // Miscellaneous flags
  117.     PVOID   pExtensions;            // pointer to ROM Header extensions
  118.     ULONG   ulTrackingStart;        // tracking memory starting address
  119.     ULONG   ulTrackingLen;          // tracking memory ending address
  120. } ROMHDR, *PROMHDR;
  121. #endif /*__NAND_H__*/