Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
IAP.h
00001 /** IAP : internal Flash memory access library 00002 * 00003 * The internal Flash memory access is described in the LPC1768 usermanual. 00004 * http://www.nxp.com/documents/user_manual/UM10360.pdf 00005 * 00006 * Chapter 2: "LPC17xx Memory map" 00007 * Chapter 32: "LPC17xx Flash memory interface and programming" 00008 * refering Rev. 01 - 4 January 2010 00009 * 00010 * Released under the MIT License: http://mbed.org/license/mit 00011 * 00012 * revision 1.0 09-Mar-2010 1st release 00013 * revision 1.1 12-Mar-2010 chaged: to make possible to reserve flash area for user 00014 * it can be set by USER_FLASH_AREA_START and USER_FLASH_AREA_SIZE in IAP.h 00015 */ 00016 00017 #ifndef MBED_IAP 00018 #define MBED_IAP 00019 00020 #include "mbed.h" 00021 00022 /* 00023 * memory map information is available in next URL also. 00024 * http://mbed.org/projects/libraries/svn/mbed/trunk/LPC1768/LPC17xx.h 00025 */ 00026 00027 #ifdef TARGET_LPC1768 00028 00029 #define IAP_LOCATION 0x1fff1ff1 00030 00031 #define FLASH_SECTOR_0 0x00000000 00032 #define FLASH_SECTOR_1 0x00001000 00033 #define FLASH_SECTOR_2 0x00002000 00034 #define FLASH_SECTOR_3 0x00003000 00035 #define FLASH_SECTOR_4 0x00004000 00036 #define FLASH_SECTOR_5 0x00005000 00037 #define FLASH_SECTOR_6 0x00006000 00038 #define FLASH_SECTOR_7 0x00007000 00039 #define FLASH_SECTOR_8 0x00008000 00040 #define FLASH_SECTOR_9 0x00009000 00041 #define FLASH_SECTOR_10 0x0000A000 00042 #define FLASH_SECTOR_11 0x0000B000 00043 #define FLASH_SECTOR_12 0x0000C000 00044 #define FLASH_SECTOR_13 0x0000D000 00045 #define FLASH_SECTOR_14 0x0000E000 00046 #define FLASH_SECTOR_15 0x0000F000 00047 #define FLASH_SECTOR_16 0x00010000 00048 #define FLASH_SECTOR_17 0x00018000 00049 #define FLASH_SECTOR_18 0x00020000 00050 #define FLASH_SECTOR_19 0x00028000 00051 #define FLASH_SECTOR_20 0x00030000 00052 #define FLASH_SECTOR_21 0x00038000 00053 #define FLASH_SECTOR_22 0x00040000 00054 #define FLASH_SECTOR_23 0x00048000 00055 #define FLASH_SECTOR_24 0x00050000 00056 #define FLASH_SECTOR_25 0x00058000 00057 #define FLASH_SECTOR_26 0x00060000 00058 #define FLASH_SECTOR_27 0x00068000 00059 #define FLASH_SECTOR_28 0x00070000 00060 #define FLASH_SECTOR_29 0x00078000 00061 00062 #define FLASH_SECTOR_SIZE_0_TO_15 ( 4 * 1024) 00063 #define FLASH_SECTOR_SIZE_16_TO_29 (32 * 1024) 00064 00065 #define USER_FLASH_AREA_START FLASH_SECTOR_29 00066 #define USER_FLASH_AREA_SIZE (FLASH_SECTOR_SIZE_16_TO_29 * 1) 00067 00068 static char * sector_start_adress[] = { 00069 (char *)FLASH_SECTOR_0, 00070 (char *)FLASH_SECTOR_1, 00071 (char *)FLASH_SECTOR_2, 00072 (char *)FLASH_SECTOR_3, 00073 (char *)FLASH_SECTOR_4, 00074 (char *)FLASH_SECTOR_5, 00075 (char *)FLASH_SECTOR_6, 00076 (char *)FLASH_SECTOR_7, 00077 (char *)FLASH_SECTOR_8, 00078 (char *)FLASH_SECTOR_9, 00079 (char *)FLASH_SECTOR_10, 00080 (char *)FLASH_SECTOR_11, 00081 (char *)FLASH_SECTOR_12, 00082 (char *)FLASH_SECTOR_13, 00083 (char *)FLASH_SECTOR_14, 00084 (char *)FLASH_SECTOR_15, 00085 (char *)FLASH_SECTOR_16, 00086 (char *)FLASH_SECTOR_17, 00087 (char *)FLASH_SECTOR_18, 00088 (char *)FLASH_SECTOR_19, 00089 (char *)FLASH_SECTOR_20, 00090 (char *)FLASH_SECTOR_21, 00091 (char *)FLASH_SECTOR_22, 00092 (char *)FLASH_SECTOR_23, 00093 (char *)FLASH_SECTOR_24, 00094 (char *)FLASH_SECTOR_25, 00095 (char *)FLASH_SECTOR_26, 00096 (char *)FLASH_SECTOR_27, 00097 (char *)FLASH_SECTOR_28, 00098 (char *)FLASH_SECTOR_29 00099 }; 00100 00101 00102 #endif 00103 00104 #ifdef TARGET_LPC2368 00105 #define IAP_LOCATION 0x7FFFFFF1 00106 00107 #define FLASH_SECTOR_0 0x00000000 00108 #define FLASH_SECTOR_1 0x00001000 00109 #define FLASH_SECTOR_2 0x00002000 00110 #define FLASH_SECTOR_3 0x00003000 00111 #define FLASH_SECTOR_4 0x00004000 00112 #define FLASH_SECTOR_5 0x00005000 00113 #define FLASH_SECTOR_6 0x00006000 00114 #define FLASH_SECTOR_7 0x00007000 00115 #define FLASH_SECTOR_8 0x00008000 00116 #define FLASH_SECTOR_9 0x00010000 00117 #define FLASH_SECTOR_10 0x00018000 00118 #define FLASH_SECTOR_11 0x00020000 00119 #define FLASH_SECTOR_12 0x00028000 00120 #define FLASH_SECTOR_13 0x00030000 00121 #define FLASH_SECTOR_14 0x00038000 00122 #define FLASH_SECTOR_15 0x00040000 00123 #define FLASH_SECTOR_16 0x00048000 00124 #define FLASH_SECTOR_17 0x00050000 00125 #define FLASH_SECTOR_18 0x00058000 00126 #define FLASH_SECTOR_19 0x00060000 00127 #define FLASH_SECTOR_20 0x00068000 00128 #define FLASH_SECTOR_21 0x00070000 00129 #define FLASH_SECTOR_22 0x00078000 00130 #define FLASH_SECTOR_23 0x00079000 00131 #define FLASH_SECTOR_24 0x0007A000 00132 #define FLASH_SECTOR_25 0x0007B000 00133 #define FLASH_SECTOR_26 0x0007C000 00134 #define FLASH_SECTOR_27 0x0007D000 00135 00136 #define FLASH_SECTOR_SIZE_0_TO_7 ( 4 * 1024) 00137 #define FLASH_SECTOR_SIZE_8_TO_21 (32 * 1024) 00138 #define FLASH_SECTOR_SIZE_22_TO_27 ( 4 * 1024) 00139 00140 00141 #define USER_FLASH_AREA_START FLASH_SECTOR_21 00142 #define USER_FLASH_AREA_SIZE (FLASH_SECTOR_SIZE_8_TO_21 * 1) 00143 00144 static char * sector_start_adress[] = { 00145 (char *)FLASH_SECTOR_0, 00146 (char *)FLASH_SECTOR_1, 00147 (char *)FLASH_SECTOR_2, 00148 (char *)FLASH_SECTOR_3, 00149 (char *)FLASH_SECTOR_4, 00150 (char *)FLASH_SECTOR_5, 00151 (char *)FLASH_SECTOR_6, 00152 (char *)FLASH_SECTOR_7, 00153 (char *)FLASH_SECTOR_8, 00154 (char *)FLASH_SECTOR_9, 00155 (char *)FLASH_SECTOR_10, 00156 (char *)FLASH_SECTOR_11, 00157 (char *)FLASH_SECTOR_12, 00158 (char *)FLASH_SECTOR_13, 00159 (char *)FLASH_SECTOR_14, 00160 (char *)FLASH_SECTOR_15, 00161 (char *)FLASH_SECTOR_16, 00162 (char *)FLASH_SECTOR_17, 00163 (char *)FLASH_SECTOR_18, 00164 (char *)FLASH_SECTOR_19, 00165 (char *)FLASH_SECTOR_20, 00166 (char *)FLASH_SECTOR_21, 00167 (char *)FLASH_SECTOR_22, 00168 (char *)FLASH_SECTOR_23, 00169 (char *)FLASH_SECTOR_24, 00170 (char *)FLASH_SECTOR_25, 00171 (char *)FLASH_SECTOR_26, 00172 (char *)FLASH_SECTOR_27 00173 }; 00174 00175 00176 #endif 00177 00178 00179 /** Error code by IAP routine 00180 * 00181 * Table 588 "ISP Return Codes Summary", Section 7.15 "ISP Return Codes", usermanual 00182 */ 00183 00184 enum error_code { 00185 CMD_SUCCESS, 00186 INVALID_COMMAND, 00187 SRC_ADDR_ERROR, 00188 DST_ADDR_ERROR, 00189 SRC_ADDR_NOT_MAPPED, 00190 DST_ADDR_NOT_MAPPED, 00191 COUNT_ERROR, 00192 INVALID_SECTOR, 00193 SECTOR_NOT_BLANK, 00194 SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION, 00195 COMPARE_ERROR, 00196 BUSY, 00197 PARAM_ERROR, 00198 ADDR_ERROR, 00199 ADDR_NOT_MAPPED, 00200 CMD_LOCKED, 00201 INVALID_CODE, 00202 INVALID_BAUD_RATE, 00203 INVALID_STOP_BIT, 00204 CODE_READ_PROTECTION_ENABLED 00205 }; 00206 00207 00208 00209 /* 00210 * IAP routine entry 00211 * 00212 * Chapter 8. "IAP commands", usermanual 00213 */ 00214 00215 00216 //#define IAP_LOCATION 0x1fff1ff1 00217 00218 00219 typedef void (*IAP_call)(unsigned int [], unsigned int []); 00220 00221 /** IAP class 00222 * 00223 * Interface for internal flash memory access 00224 */ 00225 00226 00227 class IAP { 00228 public: 00229 00230 /* 00231 * SystemCoreClock ??? : 00232 * http://mbed.org/forum/mbed/topic/229/ 00233 * http://mbed.org/users/simon/programs/SystemCoreClock/16mhsh/ 00234 */ 00235 00236 00237 /** Constructor for IAP 00238 * 00239 */ 00240 00241 IAP() : iap_entry( reinterpret_cast<IAP_call>(IAP_LOCATION) ), cclk_kHz( SystemCoreClock / 1000 ) {} 00242 int read_ID( void ); 00243 int read_serial( void ); 00244 int blank_check( int start, int end ); 00245 int erase( int start, int end ); 00246 int prepare( int start, int end ); 00247 int write( char *source_addr, char *target_addr, int size ); 00248 int compare( char *source_addr, char *target_addr, int size ); 00249 00250 char *reserved_flash_area_start( void ); 00251 int reserved_flash_area_size( void ); 00252 00253 private: 00254 IAP_call iap_entry; 00255 unsigned int IAP_command[ 5 ]; 00256 unsigned int IAP_result[ 5 ]; 00257 int cclk_kHz; 00258 00259 //int cpu_clock( void ); 00260 } 00261 ; 00262 00263 #endif // #ifndef MBED_IAP
Generated on Wed Jul 20 2022 12:22:50 by
1.7.2