📄 flash.c
字号:
/*#include "config.h"#include "regmap.h"#include "global.h"#include "sio.h"#include "epp.h"#include "cpu.h"#include "gpio.h"#include "user_init.h"#include "uartsup.h"*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <cyg/hal/types.h>#include <cyg/kernel/kapi.h>#include "custom.h"#include "gpio.h"//#define BOOTLOADER_CODESIZE 0/*#include "graph.h"*/#include "flash.h"//Yvonne_flash_050720#ifdef UPGRADE_SUCCESS_NEW_UI //added by liuchuanyi 051202.extern void Show_Upgrade_Success(); #endif// Added by houyiwu 9/18/2004 for defining SPHE1000#ifndef SPHE1000#include "ver.h"#endif#if defined(SUPPORT_1M_FLASH) #ifdef _NONUNIFORM64K_SECTOR_IN_FLASH #if defined( MX29LV800T ) || defined( MX29LV800B ) #define MAX_SECTORS 19 #elif defined( AT49BV802AT ) || defined( AT49BV802A ) #define MAX_SECTORS 23 #else //Other Flash #endif #else #define MAX_SECTORS 16 #endif #ifdef _NONUNIFORM64K_SECTOR_IN_FLASH #if defined(MX29LV800T) const FLASHRANGE FlashRange[] = { {0x000000,0x00FFFF}, /*SA0 64K*/ {0x010000,0x01FFFF}, /*SA1 64K*/ {0x020000,0x02FFFF}, /*SA2 64K*/ {0x030000,0x03FFFF}, /*SA3 64K*/ {0x040000,0x04FFFF}, /*SA4 64K*/ {0x050000,0x05FFFF}, /*SA5 64K*/ {0x060000,0x06FFFF}, /*SA6 64K*/ {0x070000,0x07FFFF}, /*SA7 64K*/ {0x080000,0x08FFFF}, /*SA8 64K*/ {0x090000,0x09FFFF}, /*SA9 64K*/ {0x0A0000,0x0AFFFF}, /*SA10 64K*/ {0x0B0000,0x0BFFFF}, /*SA11 64K*/ {0x0C0000,0x0CFFFF}, /*SA12 64K*/ {0x0D0000,0x0DFFFF}, /*SA13 64K*/ {0x0E0000,0x0EFFFF}, /*SA14 64K*/ {0x0F0000,0x0F7FFF}, /*SA15 16K*/ {0x0F8000,0x0F9FFF}, /*SA16 8K*/ {0x0FA000,0x0FBFFF}, /*SA17 8K*/ {0x0FC000,0x0FFFFF} /*SA18 32K*/ }; #elif defined(MX29LV800B) const FLASHRANGE FlashRange[] = { {0x000000,0x003FFF}, /*SA0 16K*/ {0x004000,0x005FFF}, /*SA1 8K*/ {0x006000,0x007FFF}, /*SA2 8K*/ {0x008000,0x00FFFF}, /*SA3 32K*/ {0x010000,0x01FFFF}, /*SA4 64K*/ {0x020000,0x02FFFF}, /*SA5 64K*/ {0x030000,0x03FFFF}, /*SA6 64K*/ {0x040000,0x04FFFF}, /*SA7 64K*/ {0x050000,0x05FFFF}, /*SA8 64K*/ {0x060000,0x06FFFF}, /*SA9 64K*/ {0x070000,0x07FFFF}, /*SA10 64K*/ {0x080000,0x08FFFF}, /*SA11 64K*/ {0x090000,0x09FFFF}, /*SA12 64K*/ {0x0A0000,0x0AFFFF}, /*SA13 64K*/ {0x0B0000,0x0BFFFF}, /*SA14 64K*/ {0x0C0000,0x0CFFFF}, /*SA15 64K*/ {0x0D0000,0x0DFFFF}, /*SA16 64K*/ {0x0E0000,0x0EFFFF}, /*SA17 64K*/ {0x0F0000,0x0FFFFF} /*SA18 64K*/ }; #elif defined( AT49BV802AT ) const FLASHRANGE FlashRange[] = { {0x000000,0x00FFFF}, /*SA0 64K*/ {0x010000,0x01FFFF}, /*SA1 64K*/ {0x020000,0x02FFFF}, /*SA2 64K*/ {0x030000,0x03FFFF}, /*SA3 64K*/ {0x040000,0x04FFFF}, /*SA4 64K*/ {0x050000,0x05FFFF}, /*SA5 64K*/ {0x060000,0x06FFFF}, /*SA6 64K*/ {0x070000,0x07FFFF}, /*SA7 64K*/ {0x080000,0x08FFFF}, /*SA8 64K*/ {0x090000,0x09FFFF}, /*SA9 64K*/ {0x0A0000,0x0AFFFF}, /*SA10 64K*/ {0x0B0000,0x0BFFFF}, /*SA11 64K*/ {0x0C0000,0x0CFFFF}, /*SA12 64K*/ {0x0D0000,0x0DFFFF}, /*SA13 64K*/ {0x0E0000,0x0EFFFF}, /*SA14 64K*/ {0x0F0000,0x0F1FFF}, /*SA15 8K*/ {0x0F2000,0x0F3FFF}, /*SA16 8K*/ {0x0F4000,0x0F5FFF}, /*SA17 8K*/ {0x0F6000,0x0F7FFF}, /*SA18 8K*/ {0x0F8000,0x0F9FFF}, /*SA19 8K*/ {0x0FA000,0x0FBFFF}, /*SA20 8K*/ {0x0FC000,0x0FDFFF}, /*SA21 8K*/ {0x0FE000,0x0FFFFF} /*SA22 8K*/ }; #elif defined( AT49BV802A ) const FLASHRANGE FlashRange[] = { {0x000000,0x001FFF}, /*SA0 8K*/ {0x002000,0x003FFF}, /*SA1 8K*/ {0x004000,0x005FFF}, /*SA2 8K*/ {0x006000,0x007FFF}, /*SA3 8K*/ {0x008000,0x009FFF}, /*SA4 8K*/ {0x00A000,0x00BFFF}, /*SA5 8K*/ {0x00C000,0x00DFFF}, /*SA6 8K*/ {0x00E000,0x00FFFF} /*SA7 8K*/ {0x010000,0x01FFFF}, /*SA8 64K*/ {0x020000,0x02FFFF}, /*SA9 64K*/ {0x030000,0x03FFFF}, /*SA10 64K*/ {0x040000,0x04FFFF}, /*SA11 64K*/ {0x050000,0x05FFFF}, /*SA12 64K*/ {0x060000,0x06FFFF}, /*SA13 64K*/ {0x070000,0x07FFFF}, /*SA14 64K*/ {0x080000,0x08FFFF}, /*SA15 64K*/ {0x090000,0x09FFFF}, /*SA16 64K*/ {0x0A0000,0x0AFFFF}, /*SA17 64K*/ {0x0B0000,0x0BFFFF}, /*SA18 64K*/ {0x0C0000,0x0CFFFF}, /*SA19 64K*/ {0x0D0000,0x0DFFFF}, /*SA20 64K*/ {0x0E0000,0x0EFFFF}, /*SA21 64K*/ {0x0F0000,0x0FFFFF} /*SA22 64K*/ }; #else #endif #else //64K per Sector #if 0 const FLASHRANGE FlashRange[] = { {0x000000,0x00FFFF}, //SA0 64K {0x010000,0x01FFFF}, //SA1 64K {0x020000,0x02FFFF}, //SA2 64K {0x030000,0x03FFFF}, //SA3 64K {0x040000,0x04FFFF}, //SA4 64K {0x050000,0x05FFFF}, //SA5 64K {0x060000,0x06FFFF}, //SA6 64K {0x070000,0x07FFFF}, //SA7 64K {0x080000,0x08FFFF}, //SA8 64K {0x090000,0x09FFFF}, //SA9 64K {0x0A0000,0x0AFFFF}, //SA10 64K {0x0B0000,0x0BFFFF}, //SA11 64K {0x0C0000,0x0CFFFF}, //SA12 64K {0x0D0000,0x0DFFFF}, //SA13 64K {0x0E0000,0x0EFFFF}, //SA14 64K {0x0F0000,0x0FFFFF} //SA15 64K }; #endif #endif#elif defined(SUPPORT_2M_FLASH) #ifdef _NONUNIFORM64K_SECTOR_IN_FLASH #if defined( MX29LV160CT ) || defined( MX29LV160CB ) //MX29LV160CT(Top)/CB(Bottom) #define MAX_SECTORS 35 #else #endif #else #define MAX_SECTORS 32 #endif #ifdef _NONUNIFORM64K_SECTOR_IN_FLASH #if defined( MX29LV160CT ) //MX29LV160CT Top const FLASHRANGE FlashRange[] = { {0x000000,0x00FFFF}, /*SA0 64K*/ {0x010000,0x01FFFF}, /*SA1 64K*/ {0x020000,0x02FFFF}, /*SA2 64K*/ {0x030000,0x03FFFF}, /*SA3 64K*/ {0x040000,0x04FFFF}, /*SA4 64K*/ {0x050000,0x05FFFF}, /*SA5 64K*/ {0x060000,0x06FFFF}, /*SA6 64K*/ {0x070000,0x07FFFF}, /*SA7 64K*/ {0x080000,0x08FFFF}, /*SA8 64K*/ {0x090000,0x09FFFF}, /*SA9 64K*/ {0x0A0000,0x0AFFFF}, /*SA10 64K*/ {0x0B0000,0x0BFFFF}, /*SA11 64K*/ {0x0C0000,0x0CFFFF}, /*SA12 64K*/ {0x0D0000,0x0DFFFF}, /*SA13 64K*/ {0x0E0000,0x0EFFFF}, /*SA14 64K*/ {0x0F0000,0x0FFFFF}, /*SA15 64K*/ {0x100000,0x10FFFF}, /*SA16 64K*/ {0x110000,0x11FFFF}, /*SA17 64K*/ {0x120000,0x12FFFF}, /*SA18 64K*/ {0x130000,0x13FFFF}, /*SA19 64K*/ {0x140000,0x14FFFF}, /*SA20 64K*/ {0x150000,0x15FFFF}, /*SA21 64K*/ {0x160000,0x16FFFF}, /*SA22 64K*/ {0x170000,0x17FFFF}, /*SA23 64K*/ {0x180000,0x18FFFF}, /*SA24 64K*/ {0x190000,0x19FFFF}, /*SA25 64K*/ {0x1A0000,0x1AFFFF}, /*SA26 64K*/ {0x1B0000,0x1BFFFF}, /*SA27 64K*/ {0x1C0000,0x1CFFFF}, /*SA28 64K*/ {0x1D0000,0x1DFFFF}, /*SA29 64K*/ {0x1E0000,0x1EFFFF}, /*SA30 64K*/ {0x1F0000,0x1F7FFF}, /*SA31 32K*/ {0x1F8000,0x1F9FFF}, /*SA32 8K*/ {0x1FA000,0x1FBFFF}, /*SA33 8K*/ {0x1FC000,0x1FFFFF} /*SA34 16K*/ }; #elif defined( MX29LV160CB ) //MX29LV160CB Bottom const FLASHRANGE FlashRange[] = { {0x000000,0x003FFF}, /*SA0 16K*/ {0x004000,0x005FFF}, /*SA1 8K*/ {0x006000,0x007FFF}, /*SA2 8K*/ {0x008000,0x00FFFF}, /*SA3 32K*/ {0x010000,0x01FFFF}, /*SA4 64K*/ {0x020000,0x02FFFF}, /*SA5 64K*/ {0x030000,0x03FFFF}, /*SA6 64K*/ {0x040000,0x04FFFF}, /*SA7 64K*/ {0x050000,0x05FFFF}, /*SA8 64K*/ {0x060000,0x06FFFF}, /*SA9 64K*/ {0x070000,0x07FFFF}, /*SA10 64K*/ {0x080000,0x08FFFF}, /*SA11 64K*/ {0x090000,0x09FFFF}, /*SA12 64K*/ {0x0A0000,0x0AFFFF}, /*SA13 64K*/ {0x0B0000,0x0BFFFF}, /*SA14 64K*/ {0x0C0000,0x0CFFFF}, /*SA15 64K*/ {0x0D0000,0x0DFFFF}, /*SA16 64K*/ {0x0E0000,0x0EFFFF}, /*SA17 64K*/ {0x0F0000,0x0FFFFF}, /*SA18 64K*/ {0x100000,0x10FFFF}, /*SA19 64K*/ {0x110000,0x11FFFF}, /*SA20 64K*/ {0x120000,0x12FFFF}, /*SA21 64K*/ {0x130000,0x13FFFF}, /*SA22 64K*/ {0x140000,0x14FFFF}, /*SA23 64K*/ {0x150000,0x15FFFF}, /*SA24 64K*/ {0x160000,0x16FFFF}, /*SA25 64K*/ {0x170000,0x17FFFF}, /*SA26 64K*/ {0x180000,0x18FFFF}, /*SA27 64K*/ {0x190000,0x19FFFF}, /*SA28 64K*/ {0x1A0000,0x1AFFFF}, /*SA29 64K*/ {0x1B0000,0x1BFFFF}, /*SA30 64K*/ {0x1C0000,0x1CFFFF}, /*SA31 64K*/ {0x1D0000,0x1DFFFF}, /*SA32 64K*/ {0x1E0000,0x1EFFFF}, /*SA33 64K*/ {0x1F0000,0x1FFFFF} /*SA34 64K*/ }; #endif #else //64K per Sector #endif#elif defined(SUPPORT_4M_FLASH)//xsyan add 2006-08-12 #ifdef _NONUNIFORM64K_SECTOR_IN_FLASH #if defined( S29GL032MSOTAIR4 ) #define MAX_SECTORS 71 #endif #else #define MAX_SECTORS 67 #endif #ifdef _NONUNIFORM64K_SECTOR_IN_FLASH #if defined( S29GL032MSOTAIR4 ) //BOTTOM const FLASHRANGE FlashRange[] = { {0x000000,0x001FFF}, /*SA0 8K*/ {0x002000,0x003FFF}, /*SA1 8K*/ {0x004000,0x005FFF}, /*SA2 8K*/ {0x006000,0x007FFF}, /*SA3 8K*/ {0x008000,0x009FFF}, /*SA4 8K*/ {0x00A000,0x00BFFF}, /*SA5 8K*/ {0x00C000,0x00DFFF}, /*SA6 8K*/ {0x00E000,0x0FFFFF}, /*SA7 8K*/ {0x010000,0x01FFFF}, /*SA8 64K*/ {0x020000,0x02FFFF}, /*SA9 64K*/ {0x030000,0x03FFFF}, /*SA10 64K*/ {0x040000,0x04FFFF}, /*SA11 64K*/ {0x050000,0x05FFFF}, /*SA12 64K*/ {0x060000,0x06FFFF}, /*SA13 64K*/ {0x070000,0x07FFFF}, /*SA14 64K*/ {0x080000,0x08FFFF}, /*SA15 64K*/ {0x090000,0x09FFFF}, /*SA16 64K*/ {0x0A0000,0x0AFFFF}, /*SA17 64K*/ {0x0B0000,0x0BFFFF}, /*SA18 64K*/ {0x0C0000,0x0CFFFF}, /*SA19 64K*/ {0x0D0000,0x0DFFFF}, /*SA20 64K*/ {0x0E0000,0x0EFFFF}, /*SA21 64K*/ {0x0F0000,0x0FFFFF}, /*SA22 64K*/ {0x100000,0x00FFFF}, /*SA23 64K*/ {0x110000,0x11FFFF}, /*SA24 64K*/ {0x120000,0x12FFFF}, /*SA25 64K*/ {0x130000,0x13FFFF}, /*SA26 64K*/ {0x140000,0x14FFFF}, /*SA27 64K*/ {0x150000,0x15FFFF}, /*SA28 64K*/ {0x160000,0x16FFFF}, /*SA29 64K*/ {0x170000,0x17FFFF}, /*SA30 64K*/ {0x180000,0x18FFFF}, /*SA31 64K*/ {0x190000,0x19FFFF}, /*SA32 64K*/ {0x1A0000,0x1AFFFF}, /*SA33 64K*/ {0x1B0000,0x1BFFFF}, /*SA34 64K*/ {0x1C0000,0x1CFFFF}, /*SA35 64K*/ {0x1D0000,0x1DFFFF}, /*SA36 64K*/ {0x1E0000,0x1EFFFF}, /*SA37 64K*/ {0x1F0000,0x1FFFFF}, /*SA38 64K*/ {0x200000,0x20FFFF}, /*SA39 64K*/ {0x210000,0x21FFFF}, /*SA40 64K*/ {0x220000,0x22FFFF}, /*SA41 64K*/ {0x230000,0x23FFFF}, /*SA42 64K*/ {0x240000,0x24FFFF}, /*SA43 64K*/ {0x250000,0x25FFFF}, /*SA44 64K*/ {0x260000,0x26FFFF}, /*SA45 64K*/ {0x270000,0x27FFFF}, /*SA46 64K*/ {0x280000,0x28FFFF}, /*SA47 64K*/ {0x290000,0x29FFFF}, /*SA48 64K*/ {0x2A0000,0x2AFFFF}, /*SA49 64K*/ {0x2B0000,0x2BFFFF}, /*SA50 64K*/ {0x2C0000,0x2CFFFF}, /*SA51 64K*/ {0x2D0000,0x2DFFFF}, /*SA52 64K*/ {0x2E0000,0x2EFFFF}, /*SA53 64K*/ {0x2F0000,0x2FFFFF}, /*SA54 64K*/ {0x300000,0x30FFFF}, /*SA55 64K*/ {0x310000,0x31FFFF}, /*SA56 64K*/ {0x320000,0x32FFFF}, /*SA57 64K*/ {0x330000,0x33FFFF}, /*SA58 64K*/ {0x340000,0x34FFFF}, /*SA59 64K*/ {0x350000,0x35FFFF}, /*SA60 64K*/ {0x360000,0x36FFFF}, /*SA61 64K*/ {0x370000,0x37FFFF}, /*SA62 64K*/ {0x380000,0x38FFFF}, /*SA63 64K*/ {0x390000,0x39FFFF}, /*SA64 64K*/ {0x3A0000,0x3AFFFF}, /*SA65 64K*/ {0x3B0000,0x3BFFFF}, /*SA66 64K*/ {0x3C0000,0x3CFFFF}, /*SA67 64K*/ {0x3D0000,0x3DFFFF}, /*SA68 64K*/ {0x3E0000,0x3EFFFF}, /*SA69 64K*/ {0x3F0000,0x3FFFFF} /*SA70 64K*/ }; #endif #endif #endifextern void FSGUI_FillFrameBuf(int x,int y, int xSize,int ySize,UINT16 color_Y,UINT16 color_CrCb);extern void FSGUI_ShowString(int x, int y, const char *s, BYTE iY, UINT16 iCbCr);unsigned short int cmdFlash[][3] = //should be global, not const{ // UNLOCK1_ADDR, UNLOCK2_ADDR, CMD_OFFSET { 0x555, 0x2AA, 0x555 }, //MX29F040, A29040A { 0x5555, 0x2AAA, 0x5555 }, //SST39SF040, SST39VF040, AT49F040, AM29F040 { 0xAAA, 0x555, 0xAAA }, //MX29F800TB, MX29LV800T { 0xAAAA, 0x5554, 0xAAAA }, //AT49F8192AT, AT49F8011};unsigned char iCmd=0;BYTE cur_idM; //A1A0(00):manufacturer codeBYTE cur_idD; //A1A0(01):device code/*void ShowUpgradeOK(int x, int y, int xSize, int ySize, BYTE color_Y, UINT16 color_CrCb){ int i, j; for (j = y; j < y + ySize; j++) { for (i = x; i < x + xSize; i++) { *Y_XY(i, j) = (color_Y) & 0xff; *C_XY(i, j) = color_CrCb; } }}*/void FlashDelay(int n){ while (n--) { asm volatile ("\ .set noreorder; \ li $2,32; \ 1: addiu $2,-1; \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -