Changeset 107 for uKadecot/trunk/src/ukadecot/data_flash.c
- Timestamp:
- Jun 10, 2015, 8:40:31 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uKadecot/trunk/src/ukadecot/data_flash.c
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=SHIFT_JIS
r101 r107 4 4 * Copyright (C) 2014 Cores Co., Ltd. Japan 5 5 * 6 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 7 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 8 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 9 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 10 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 11 * XR[hÉÜÜêÄ¢é±ÆD 12 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 13 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 14 gip 15 * Ò}j 16 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 17 * ̳ÛØKèðfÚ·é±ÆD 18 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 19 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 20 * ÆD 21 * (a) Äzzɺ¤hL 22 gipÒ}j 23 AÈÇjÉCãLÌ 24 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 25 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 26 * ñ·é±ÆD 27 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 28 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 29 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 30 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 31 * ÆÓ·é±ÆD 6 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 7 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 8 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 9 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 10 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 11 * スコード中に含まれていること. 12 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 13 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 14 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 15 * の無保証規定を掲載すること. 16 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 17 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 18 * と. 19 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 20 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 21 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 22 * 報告すること. 23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 25 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 26 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 27 * 免責すること. 32 28 * 33 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨34 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI35 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF36 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»37 * ÌÓCðíÈ¢D29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 33 * の責任を負わない. 38 34 * 39 35 * @(#) $Id$ … … 41 37 42 38 /* 43 * TvvO(1)Ì{Ì39 * サンプルプログラム(1)の本体 44 40 */ 45 41 … … 129 125 ER ret; 130 126 131 /* E2f[^tbV 132 ÌÇÝÝ */ 127 /* E2データフラッシュの読み込み許可 */ 133 128 sil_wrh_mem(FLASH_DFLRE0_ADDR, 0x2DFF); 134 129 sil_wrh_mem(FLASH_DFLRE1_ADDR, 0xD2FF); 135 /* E2f[^tbV 136 Ì«Ý */ 130 /* E2データフラッシュの書き込み許可 */ 137 131 sil_wrh_mem(FLASH_DFLWE0_ADDR, 0x1EFF); 138 132 sil_wrh_mem(FLASH_DFLWE1_ADDR, 0xE1FF); … … 141 135 fcu_check_frdy(240000); 142 136 143 /* G[mF*/137 /* エラー確認 */ 144 138 fcu_check_error(); 145 139 146 /* FCU t@[EFAÌRs[*/140 /* FCUファームウェアのコピー */ 147 141 fcu_copy_firm(); 148 142 149 /* P/E [hÚs*/143 /* P/Eモード移行 */ 150 144 fcu_pe_mode(); 151 145 152 /* P/E m[}[hÚs*/146 /* P/E ノーマルモード移行 */ 153 147 *((uint8_t *)DATA_FLASH_BASE_ADDR) = 0xFF; 154 148 155 /* G[mF*/149 /* エラー確認 */ 156 150 fcu_check_error(); 157 151 158 /* üÓNbNÊmR}hs*/152 /* 周辺クロック通知コマンド発行 */ 159 153 ret = fcu_notify_clock(); 160 154 161 /* [h[hÚs*/155 /* リードモード移行 */ 162 156 fcu_read_mode(); 163 157 … … 170 164 uint16_t *dst = (uint16_t *)data; 171 165 172 /* P/E [hÚs*/166 /* P/Eモード移行 */ 173 167 fcu_pe_mode(); 174 168 175 /* Løf[^`FbN*/169 /* 有効データチェック */ 176 170 if(!fcu_check_valid(blockno)){ 177 /* [h[hÚs*/171 /* リードモード移行 */ 178 172 fcu_read_mode(); 179 173 return E_OBJ; 180 174 } 181 175 182 /* [h[hÚs*/176 /* リードモード移行 */ 183 177 fcu_read_mode(); 184 178 … … 186 180 end = &wa[DATA_FLASH_BLOCK_SIZE/sizeof(uint16_t)]; 187 181 188 /* ÇÝoµ*/182 /* 読み出し */ 189 183 for(; wa < end; wa++, dst++){ 190 184 *dst = *wa; … … 198 192 bool_t ret = true; 199 193 200 /* P/E [hÚs*/194 /* P/Eモード移行 */ 201 195 fcu_pe_mode(); 202 196 203 /* uN`FbN*/197 /* ブランクチェック */ 204 198 if(!fcu_check_blank(blockno)){ 205 /* uNÅÈ¢ÈçubNÁ*/199 /* ブランクでないならブロック消去 */ 206 200 ret = fcu_erase(blockno); 207 201 if(!ret) … … 210 204 211 205 if(ret){ 212 /* «Ý*/206 /* 書き込み */ 213 207 ret = fcu_write(blockno, data); 214 208 if(!ret) … … 216 210 } 217 211 218 /* [h[hÚs*/212 /* リードモード移行 */ 219 213 fcu_read_mode(); 220 214 … … 226 220 unsigned int *src, *dst, *end; 227 221 228 /* [h[hÚs*/222 /* リードモード移行 */ 229 223 if(sil_reh_mem(FLASH_FENTRYR_ADDR) != 0) 230 224 sil_wrh_mem(FLASH_FENTRYR_ADDR, 0xAA00); 231 225 232 /* FCU RAM ANZXÂ*/226 /* FCU RAMアクセス許可 */ 233 227 sil_wrh_mem(FLASH_FCURAME_ADDR, 0xC401); 234 228 235 /* FCU t@[EFAðFCU RAMÉRs[*/229 /* FCUファームウェアをFCU RAMにコピー */ 236 230 src = (unsigned int *)FCU_FIRMWARE_ADDR; 237 231 dst = (unsigned int *)FCU_RAM_ADDR; … … 249 243 wa = (volatile uint16_t *)ra; 250 244 251 /* ügðÝè*/245 /* 周波数を設定 */ 252 246 sil_wrh_mem(FLASH_PCKAR_ADDR, 48/*FREQ_PCLK / 1000*/); 253 247 254 /* üÓNbNÊmR}hs*/248 /* 周辺クロック通知コマンド発行 */ 255 249 *ra = 0xE9; 256 250 *ra = 0x03; … … 260 254 *ra = 0xD0; 261 255 262 /* 120 Ês */256 /* 120μs */ 263 257 fcu_check_frdy(120); 264 258 265 /* G[mF*/259 /* エラー確認 */ 266 260 return !fcu_check_error(); 267 261 } 268 262 269 263 /* 270 * [h[hÚs264 * リードモード移行 271 265 */ 272 266 static void fcu_read_mode() … … 290 284 291 285 /* 292 * P/E [hÚs286 * P/Eモード移行 293 287 */ 294 288 static void fcu_pe_mode() … … 309 303 for(wa = (volatile uint16_t *)ra; wa < end; wa++, src++) 310 304 { 311 /* vOR}hs*/305 /* プログラムコマンド発行 */ 312 306 *ra = 0xE8; 313 307 *ra = 0x01; … … 315 309 *ra = 0xD0; 316 310 317 /* 2ms ~1.1 */311 /* 2ms×1.1 */ 318 312 fcu_check_frdy(2200); 319 313 320 /* G[mF*/314 /* エラー確認 */ 321 315 if(fcu_check_error()) 322 316 return false; … … 332 326 ra = (volatile uint8_t *)(DATA_FLASH_BLOCK_SIZE * blockno + (intptr_t)DATA_FLASH_BASE_ADDR); 333 327 334 /* C[XR}hs*/328 /* イレースコマンド発行 */ 335 329 *ra = 0x20; 336 330 *ra = 0xD0; 337 331 338 /* 20ms ~1.1 */332 /* 20ms×1.1 */ 339 333 fcu_check_frdy(22000); 340 334 341 /* G[mF*/335 /* エラー確認 */ 342 336 return !fcu_check_error(); 343 337 } … … 361 355 *ra = 0xD0; 362 356 363 /* 30 Ês~1.1 */357 /* 30μs×1.1 */ 364 358 fcu_check_frdy(33); 365 359 366 /* G[mF*/360 /* エラー確認 */ 367 361 if(fcu_check_error()) 368 362 return false; 369 363 370 /* uNmF*/364 /* ブランク確認 */ 371 365 if((sil_reh_mem(FLASH_DFLBCSTAT_ADDR) & FLASH_DFLBCSTAT_BCST_BIT) != 0) 372 366 return false; … … 394 388 *ra = 0xD0; 395 389 396 /* 30 Ês~1.1 */390 /* 30μs×1.1 */ 397 391 fcu_check_frdy(33); 398 392 399 /* G[mF*/393 /* エラー確認 */ 400 394 if(fcu_check_error()) 401 395 return false; 402 396 403 /* uNmF*/397 /* ブランク確認 */ 404 398 if((sil_reh_mem(FLASH_DFLBCSTAT_ADDR) & FLASH_DFLBCSTAT_BCST_BIT) == 0) 405 399 return false; … … 423 417 } 424 418 425 /* Xe[^XNAR}hs*/419 /* ステータスクリアコマンド発行 */ 426 420 *((uint8_t *)DATA_FLASH_BASE_ADDR) = 0x50; 427 421 } … … 437 431 438 432 for(i = 0; i < tWAIT; i++){ 439 /* õ®¹ÈçI¹*/433 /* 準備完了なら終了 */ 440 434 if((sil_reb_mem(FLASH_FSTATR0_ADDR) & FLASH_FSTATR0_FRDY_BIT) != 0) 441 435 return true; 442 436 443 /* 1 Ês? */437 /* 1μs? */ 444 438 for(j = 0; j < 100; j++); 445 439 } … … 447 441 syslog(LOG_WARNING, "fcu_check_frdy timeout"); 448 442 449 /* FCU ú»*/443 /* FCU初期化 */ 450 444 fcu_init(); 451 445 … … 459 453 sil_wrh_mem(FLASH_FRESETR_ADDR, 0xCC01); 460 454 461 // 200 Ês? */455 // 200μs? */ 462 456 for(j = 0; j < 20000; j++); 463 457 -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.