?? flash.c
字號:
#include "..\inc\board.h"#include "..\inc\bios.h" #include "..\inc\flash.h"unsigned long flash_base;unsigned short mfr_id;unsigned short dev_id;void send_cmd(unsigned long addr,unsigned char cmd){ *(unsigned short *)(addr*2)=cmd;} void send_unlock() { *(unsigned short *)((ROM_BASE+0x2AAA)*2) =0x55;} int probe_chip(){ int i; /* Enter autoselect mode. */ send_unlock(); send_cmd(ROM_BASE+0x5555, 0x90); mfr_id =*(unsigned short *)(ROM_BASE+0x0*2); dev_id =*(unsigned short *)(ROM_BASE+0x1*2); send_cmd(ROM_BASE, 0xf0); return 0;}int flash_is_busy(unsigned long addr1){ unsigned short d1,d2; d1=*(unsigned short*)(addr1*2) & D6_MASK; d2=*(unsigned short*)(addr1*2) & D6_MASK; return(d1!=d2);// return((*(unsigned short*)addr1 & D7_MASK)==0);}int flash_erase(){ int times_left,ret; send_unlock(); send_cmd(ROM_BASE+0x5555, 0x80); send_unlock(); send_cmd(ROM_BASE+0x5555, 0x10); delay(20); times_left = 0x500000; while (times_left-- && flash_is_busy(0)); if (!times_left) { ret = -1; } send_cmd(ROM_BASE, 0xf0); return ret;}int flash_read(unsigned long from,unsigned long len,unsigned short *buf){ int i; unsigned short buff[100]; for(i=0;i<100;i++) buff[i]=*(unsigned short *)i*2; return 0;}int write_one_word(unsigned long addr, unsigned short dat){ int times_left; int ret = 0; send_unlock(); send_cmd(ROM_BASE+0x5555, 0xA0); *(unsigned short *)(ROM_BASE+addr)= dat; delay(20); times_left = 200000; while (times_left-- && flash_is_busy(ROM_BASE+addr)); if (!times_left) { ret = -1; } return ret;} int flash_write(unsigned long to,unsigned long len,unsigned short *buf){ int n; unsigned short dat,*buff; to=0; len=0x2000; buff=(unsigned short *)0x0c000000; for (n =0; n <len;n++) { dat=buff[n]; write_one_word(n<<1,dat); } return 0;}int flash_init(){ int i; unsigned short buf[100]; probe_chip(); if(flash_erase()==0) { } flash_write(0,0x100,buf); return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -