am29lv160d Flash相关操作
发布时间:2020-12-15 06:52:38 所属栏目:百科 来源:网络整理
导读:? #define FLASH_BASE 0x08000000//读取一个ID unsigned short ReadID(){unsigned short *BaseAdd = (unsigned short *)FLASH_BASE;*(BaseAdd + 0x555) = 0xaa;*(BaseAdd + 0x2aa) = 0x55;*(BaseAdd + 0x555) = 0x90;return (*(BaseAdd + 1));}//开启快写功
?
#define FLASH_BASE 0x08000000 //读取一个ID unsigned short ReadID() { unsigned short *BaseAdd = (unsigned short *)FLASH_BASE; *(BaseAdd + 0x555) = 0xaa; *(BaseAdd + 0x2aa) = 0x55; *(BaseAdd + 0x555) = 0x90; return (*(BaseAdd + 1)); } //开启快写功能 int Unlock_Bypass(void) { unsigned short *BaseAdd = (unsigned short *)FLASH_BASE; *(BaseAdd + 0x555) = 0xaa; *(BaseAdd + 0x2aa) = 0x55; *(BaseAdd + 0x555) = 0x20; return 1; } //开启快写功能复位 int Unlock_Bypass_ReSet() { unsigned short *BaseAdd = (unsigned short *)FLASH_BASE; *(BaseAdd + 0x555) = 0x90; *(BaseAdd + 0x555) = 0x20; return 1; } //擦除全部 int Chip_Erase(void) { unsigned short *BaseAdd = (unsigned short *)FLASH_BASE; *(BaseAdd + 0x555) = 0xaa; *(BaseAdd + 0x2aa) = 0x55; *(BaseAdd + 0x555) = 0x80; *(BaseAdd + 0x555) = 0xaa; *(BaseAdd + 0x2aa) = 0x55; *(BaseAdd + 0x555) = 0x10; int i = 0; do { i ++; if(i > 0x100000)//超时 return 0; }while((*BaseAdd & 0x0020) == 0); if (*BaseAdd != 0xffff) { return 0; } return 1; } //擦除一段 int Sector_Erase(int addr) { int i = 0; unsigned short * BaseAdd = (unsigned short *)FLASH_BASE; unsigned short tmpData; *(BaseAdd + 0x555) = 0xaa; *(BaseAdd + 0x2aa) = 0x55; *(BaseAdd + 0x555) = 0x80; *(BaseAdd + 0x555) = 0xaa; *(BaseAdd + 0x2aa) = 0x55; *(BaseAdd + 0x555) = 0x30; do { tmpData = *(BaseAdd + addr); i ++; if(i > 0x100000) { return 0; } }while((tmpData & 0x0020) == 0); if (tmpData != 0xffff) { return 0; } return 1; } //写操作 int WriteInfo(int address,unsigned short mydata) { unsigned short *BaseAdd = (unsigned short *)FLASH_BASE; unsigned short tmpData; *(BaseAdd + 0x555) = 0xaa; *(BaseAdd + 0x2aa) = 0x55; *(BaseAdd + 0x555) = 0xa0; *(BaseAdd + address) = mydata; int i = 0; do { tmpData = *(BaseAdd + address); if (((tmpData^mydata) & 0x0080)== 0) { return 1; } i ++; if (i > 0x100000) { return 0; } }while ((tmpData & 0x0020) == 0); tmpData = *(BaseAdd + address); if ((tmpData^mydata) & 0x0080 != 0) { return 0; } return 1; } //快速写操作 int FastWrite(int addr,unsigned short myData) { int i = 0; unsigned short *BaseAdd = (unsigned short *)FLASH_BASE; unsigned short tmpData; *(BaseAdd + 0xaaa) = 0xa0; *(BaseAdd + addr) = myData; do { tmpData = *(BaseAdd + addr); if (((tmpData^myData) & 0x0080) == 0) { return 1; } i ++; if (i > 0x100000) { return 0; } }while(tmpData & 0x0020 == 0); tmpData = *(BaseAdd + addr); if ((tmpData^myData) & 0x0080 != 0) { return 0; } return 1; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |