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&&sector<32)
    return (char*)(0x70000000+(sector-7)*0x10000);

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?