00001 /* ---------------------------------------------------------------------------- 00002 * ATMEL Microcontroller Software Support 00003 * ---------------------------------------------------------------------------- 00004 * Copyright (c) 2010, Atmel Corporation 00005 * 00006 * All rights reserved. 00007 * 00008 * Redistribution and use in source and binary forms, with or without 00009 * modification, are permitted provided that the following conditions are met: 00010 * 00011 * - Redistributions of source code must retain the above copyright notice, 00012 * this list of conditions and the disclaimer below. 00013 * 00014 * Atmel's name may not be used to endorse or promote products derived from 00015 * this software without specific prior written permission. 00016 * 00017 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR 00018 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00019 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 00020 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, 00021 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00022 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 00023 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00024 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00025 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 00026 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00027 * ---------------------------------------------------------------------------- 00028 */ 00029 00030 /** 00031 * \file 00032 * 00033 * Type and methods for manipulating NandFlash models. 00034 * 00035 * -# Find the model of a NandFlash using its device ID with the NandFlashModel_Find function. 00036 * 00037 * -# Retrieve parameters of a NandFlash model using the following functions: 00038 * - NandFlashModel_GetDeviceId 00039 * - NandFlashModel_GetDeviceSizeInBlocks 00040 * - NandFlashModel_GetDeviceSizeInPages 00041 * - NandFlashModel_GetDeviceSizeInBytes 00042 * - NandFlashModel_GetBlockSizeInPages 00043 * - NandFlashModel_GetBlockSizeInBytes 00044 * - NandFlashModel_GetPageDataSize 00045 * - NandFlashModel_GetPageSpareSize 00046 * - NandFlashModel_GetDataBusWidth 00047 * - NandFlashModel_UsesSmallBlocksRead 00048 * - NandFlashModel_UsesSmallBlocksWrite 00049 */ 00050 00051 #ifndef NANDFLASHMODEL_H 00052 #define NANDFLASHMODEL_H 00053 00054 /*---------------------------------------------------------------------------- 00055 * Forward declarations 00056 *----------------------------------------------------------------------------*/ 00057 struct NandSpareScheme; 00058 00059 /*---------------------------------------------------------------------------- 00060 * Definitions 00061 *----------------------------------------------------------------------------*/ 00062 00063 /** 00064 * NandFlashModel_opts NandFlashModel options 00065 * - NandFlashModel_DATABUS8 00066 * - NandFlashModel_DATABUS16 00067 * - NandFlashModel_COPYBACK 00068 */ 00069 00070 /** Indicates the Nand uses an 8-bit databus. */ 00071 #define NandFlashModel_DATABUS8 (0 << 0) 00072 00073 /** Indicates the Nand uses a 16-bit databus.*/ 00074 #define NandFlashModel_DATABUS16 (1 << 0) 00075 00076 /** The Nand supports the copy-back function (internal page-to-page copy).*/ 00077 #define NandFlashModel_COPYBACK (1 << 1) 00078 00079 00080 /*---------------------------------------------------------------------------- 00081 * Types 00082 *----------------------------------------------------------------------------*/ 00083 00084 /** \brief Describes a particular model of NandFlash device.*/ 00085 struct NandFlashModel { 00086 00087 /** Identifier for the device.*/ 00088 uint8_t deviceId; 00089 /** Special options for the NandFlash.*/ 00090 uint8_t options; 00091 /** Size of the data area of a page, in bytes.*/ 00092 uint16_t pageSizeInBytes; 00093 /** Size of the device in MB.*/ 00094 uint16_t deviceSizeInMegaBytes; 00095 /** Size of one block in kilobytes.*/ 00096 uint16_t blockSizeInKBytes; 00097 /** Spare area placement scheme*/ 00098 const struct NandSpareScheme *scheme; 00099 }; 00100 00101 /*---------------------------------------------------------------------------- 00102 * Exported functions 00103 *----------------------------------------------------------------------------*/ 00104 extern uint8_t NandFlashModel_Find( 00105 const struct NandFlashModel *modelList, 00106 uint32_t size, 00107 uint32_t id, 00108 struct NandFlashModel *model); 00109 00110 extern uint8_t NandFlashModel_TranslateAccess( 00111 const struct NandFlashModel *model, 00112 uint32_t address, 00113 uint32_t size, 00114 uint16_t *block, 00115 uint16_t *page, 00116 uint16_t *offset); 00117 00118 extern const struct NandSpareScheme * NandFlashModel_GetScheme( 00119 const struct NandFlashModel *model); 00120 00121 extern uint8_t NandFlashModel_GetDeviceId( 00122 const struct NandFlashModel *model); 00123 00124 extern uint16_t NandFlashModel_GetDeviceSizeInBlocks( 00125 const struct NandFlashModel *model); 00126 00127 extern uint32_t NandFlashModel_GetDeviceSizeInPages( 00128 const struct NandFlashModel *model); 00129 00130 extern unsigned long long NandFlashModel_GetDeviceSizeInBytes( 00131 const struct NandFlashModel *model); 00132 00133 extern uint32_t NandFlashModel_GetDeviceSizeInMBytes( 00134 const struct NandFlashModel *model); 00135 00136 extern uint16_t NandFlashModel_GetBlockSizeInPages( 00137 const struct NandFlashModel *model); 00138 00139 extern uint32_t NandFlashModel_GetBlockSizeInBytes( 00140 const struct NandFlashModel *model); 00141 00142 extern uint16_t NandFlashModel_GetPageDataSize( 00143 const struct NandFlashModel *model); 00144 00145 extern uint8_t NandFlashModel_GetPageSpareSize( 00146 const struct NandFlashModel *model); 00147 00148 extern uint8_t NandFlashModel_GetDataBusWidth( 00149 const struct NandFlashModel *model); 00150 00151 extern uint8_t NandFlashModel_HasSmallBlocks( 00152 const struct NandFlashModel *model); 00153 00154 extern uint8_t NandFlashModel_SupportsCopyBack( 00155 const struct NandFlashModel *model); 00156 00157 #endif /*#ifndef NANDFLASHMODEL_H*/ 00158