i28f016.c
来自「非tffs格式的flash读写程序。其实大体格式都一样」· C语言 代码 · 共 245 行
C
245 行
/*#include <stdio.h>
#include <asm/io.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <errno.h>
#include <time.h>
#include "flash2.h"*/
#include "vxWorks.h"
#include "ioLib.h"
#include "errno.h"
#include "stdio.h"
#include "string.h"
/*#include "time.h"*/
extern unsigned char *get_flash_memptr(int sector);
boberase ()
{
int i,j,c,a,b;
char *cp;
int *ip;
char * sp;
char *sp1;
int fd,fd1;
/* time_t tm,tm1,tm2;*/
char * buf;
char sc,sc1;
int sector;
/*size_t size = getpagesize();*/
sp=(char *)0x70000000;
printf("----------------------------------------------\n");
printf("Flash Erase Utility Version 1.0 TE28F016B3.\n");
printf("Copyright(C) 1998-2002,BCNG.\n");
printf("All rights reserved.\n");
printf("----------------------------------------------\n");
/*fd=open ("/dev/mem",O_RDWR);
sp=(char *)mmap(0,((BUF_SIZE/size)+1)*size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,FLASH_ADDRESS);
fprintf(stderr,"Reset Flash .... [OK]\n");
fflush(stderr);*/
/**(short *)(sp)=0xf0;*/
/* sp=(char *)get_flash_memptr(sector);*/
*(char *)(sp)=0x90;
printf("Manufacturer Code: 0x%x\n",*sp);
*(char *)(sp)=0x90;
printf("Device ID: 0x%x\n",*(sp+1));
printf("clear lock Chip ...");
/* fflush(stderr);*/
*(char *)(sp)=0x30;
*(char *)(sp)=0xd0;
/* clear status register*/
*(char *)(sp)=0x50;
/*clear block lock */
*(short *)(sp)=0x60;
*(short *)(sp)=0xd0;
/* tm=time(NULL);
tm1=tm;*/
while(1)
{
*(char *)(sp)=0x70;
sc= *sp; /* read status register */
sc1=sc;
sc&=0x80;
sc>>7;
if ( sc ) break;
/* if ( ( time(NULL) - tm ) >= 1 )
{
fprintf(stderr,"0x%x.",sc1);
fflush(stderr);
tm=time(NULL);
}
if ( (time(NULL) -tm1 ) >= 20 )
{
fprintf(stderr," Time out,maybe chip broken?\n");
fflush(stderr);
exit(1);
}*/
}
/* tm=time(NULL);
tm2=tm;*/
printf("Erase Chip ...");
/* fflush(stderr);*/
for (i=0;i<8;i++)
{
*(char *)(sp)=0x50;
*(char *)(sp+0x2000*i)=0x20;
*(char *)(sp+0x2000*i)=0xd0;
/* tm=time(NULL);
tm1=tm;*/
while(1)
{
*(char *)(sp)=0x70;
sc= *sp; /* read status register */
sc1=sc;
sc&=0x80;
sc>>7;
if ( sc ) break;
/* if ( ( time(NULL) - tm ) >= 1 )
{
fprintf(stderr,"0x%x.",sc1);
fflush(stderr);
tm=time(NULL);
}
if ( (time(NULL) -tm1 ) >= 20 )
{
fprintf(stderr," Time out,maybe chip broken?\n");
fflush(stderr);
exit(1);
}*/
}
}
/* fflush(stderr);*/
for (i=1;i<32;i++)
{
*(char *)(sp)=0x50;
*(char *)(sp+0x10000*i)=0x20;
*(char *)(sp+0x10000*i)=0xd0;
/* tm=time(NULL);
tm1=tm;*/
while(1)
{
*(char *)(sp)=0x70;
sc= *sp; /* read status register */
sc1=sc;
sc&=0x80;
sc>>7;
if ( sc ) break;
/* if ( ( time(NULL) - tm ) >= 1 )
{
fprintf(stderr,"0x%x.",sc1);
fflush(stderr);
tm=time(NULL);
}
if ( (time(NULL) -tm1 ) >= 20 )
{
fprintf(stderr," Time out,maybe chip broken?\n");
fflush(stderr);
exit(1);
}
*/
}
}
*(char *)(sp)=0x70;
sc= *sp; /* read status register */
printf("*sp=0x%x\n",*sp);
sc&=0x0400;
if (sc ) {
printf("[Failed]\n ");
/*printf("[Failed] used %d seconds.\n",time(NULL)-tm2 );*/
}
else {
printf("[ok]\n");
/*printf("[OK] used %d seconds.\n",time(NULL)-tm2 ); */
}
*(char *)(sp)=0xff;
}
/*该部分没有经过正式的验证,可能会有问题*/
bobwrite()
{
int i,j,c,a,b;
char *cp;
int *ip;
char * sp;
char *sp1;
char *sp2;
int fd,fd1;
char * buf;
sp=(char *)0x70000000;
*(char *)(sp)=0x50;
fprintf(stderr,"Porgramming chip ...");
for (i=0;i<8;i++) {
*(char *)(sp+0x2000*i)=0x40;
*(sp+0x2000*i)=i;
while(1) {
if ( (*sp) & 0x80 ) break;
}
*(char *)(sp)=0x50;
}
for (i=1;i<32;i++) {
*(char *)(sp+0x10000*i)=0x40;
*(sp+0x10000*i)=i;
while(1) {
if ( (*sp) & 0x80 ) break;
}
*(char *)(sp)=0x50;/* clear status */
}
}
unsigned char *get_flash_memptr(int sector)
{
if(sector==0)
return (char*)0x70000000;
else if(sector==1)
return (char*)0x70002000;
else if(sector==2)
return (char*)0x70004000;
else if(sector==3)
return (char*)0x70006000;
else if(sector==4)
return (char*)0x70008000;
else if(sector==5)
return (char*)0x7000a000;
else if(sector==6)
return (char*)0x7000c000;
else if(sector==7)
return (char*)0x7000e000;
else if(sector>7&§or<32)
return (char*)(0x70000000+(sector-7)*0x10000);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?