⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sst39vf160.c

📁 Linux下通过jtag烧写flash的源代码
💻 C
字号:
#include <stdio.h>#include <time.h>#include "s3c4510.h"#include "SST39VF160.h"#include "def.h"int Check_SST_39VF160(void){    WORD SST_id1;    WORD SST_id2;	int  ReturnStatus;    write_rom2( SST39_CMD_ADDRESS1, SST39_READ_ID1);    write_rom2( SST39_CMD_ADDRESS2, SST39_READ_ID2);    write_rom2( SST39_CMD_ADDRESS1, SST39_READ_ID3);    access_bus2(HOLD, SST39_CMD_ADDRESS1, SST39_READ_ID2, IP);    SST_id1 = read_rom2(0x00000000);    SST_id2 = read_rom2(0x00000001);    //printf("id1:%x id2:%x\n",SST_id1,SST_id2);    if ((SST_id1 == SST_ID) && (SST_id2 == SST_39VF160))        ReturnStatus = 0;    else        ReturnStatus = -1;    write_rom2( SST39_CMD_ADDRESS1, SST39_READ_ID1);    write_rom2( SST39_CMD_ADDRESS2, SST39_READ_ID2);  // exit get id    write_rom2( SST39_CMD_ADDRESS1, SST39_EXIT_READ_ID);    return(ReturnStatus);}int Read_39VF160(FILE* stream, DWORD Src,DWORD size){	int i,count;	DWORD SrcReadAddress = Src;	WORD wTemp;     		// 16 bit access	if( NULL == stream )	   return -1;	fseek( stream,0,SEEK_SET );	count = 0;	for( i = 1; i <= (int)(size/sizeof(WORD)); i++ ) 	{		wTemp = read_rom2( SrcReadAddress++ );		printf("%.4x ",wTemp);		if( i%8 == 0 ) printf("\n");		fwrite((char*)&wTemp,sizeof(WORD),1,stream );	}	return 0;}int Write_39VF160(unsigned char *Src, DWORD Dst){    WORD         *SourceBuf;    DWORD        DestBuf;    DWORD        DestSector;    int          Index;    int          dl;    int          Count;    WORD         SourceWord;    unsigned char   Continue;          /**********************************************************/
    /*                    ERASE OPERATION                     */
    /*                                                        */ 
    /**********************************************************/
    DestSector   = Dst;	    write_rom2( SST39_CMD_ADDRESS1, SST39_AUTO_PG_ERASE1);    write_rom2( SST39_CMD_ADDRESS2, SST39_AUTO_PG_ERASE2);    write_rom2( SST39_CMD_ADDRESS1, SST39_AUTO_PG_ERASE3);    write_rom2( SST39_CMD_ADDRESS1, SST39_AUTO_PG_ERASE4);    write_rom2( SST39_CMD_ADDRESS2, SST39_AUTO_PG_ERASE5);    printf("Erasing 0x%.8x ...",DestSector);    write_rom2( DestSector, SST39_AUTO_PG_ERASE6);    for(dl=0;dl<18800000;dl++);    //printf("Done.\n");    Count = 0;    Continue = TRUE;    /********************************************************************/
    /*                        PROGRAM  OPERATION                        */
    /*                                                                  */
    /********************************************************************/
    SourceBuf = (WORD*)Src;
    DestBuf = Dst;    //for(dl=0;dl<5000000;dl++);    SST39Check_Toggle_Ready(DestBuf);
    for (Index = 0; Index < (SST39_ROW_SIZE/sizeof(WORD)); Index++)
    {        SourceWord = *SourceBuf++;
        if (SourceWord != 0xFFFF)   /* If the data is 0xFF, don,t program it*/
	{	    write_rom2(SST39_CMD_ADDRESS1, SST39_AUTO_PGRM1); 
	    write_rom2(SST39_CMD_ADDRESS2, SST39_AUTO_PGRM2);
	    write_rom2(SST39_CMD_ADDRESS1, SST39_AUTO_PGRM3);
	    write_rom2(DestBuf,SourceWord);  /* program the data */
	    //SST39Check_Toggle_Ready(DestBuf); 
	    /* wait for Toggle bit ready */
            //ProgrammedByte = read_rom(DestBuf);             /* read back the data pragrammed */
            //if (SourceByte != ProgrammedByte)
            //{
            //    Continue = FALSE;
            //    break;
            //}
        }
        DestBuf++;    
    }
    if (!Continue)
	    return(TRUE);                               /* return with error */
    else
	    return(FALSE);                              /* return with NO error */
}

void SST39Check_Toggle_Ready(DWORD Dst)
{
    unsigned char Loop = TRUE;
    WORD PreData;
    WORD CurrData;
    unsigned long TimeOut = 0;

    PreData = read_rom2(Dst);
    PreData = PreData & 0x4040;
    while ((TimeOut< 0x7FFFFFFF) && (Loop))
    {
        CurrData = read_rom2(Dst);
        CurrData = CurrData & 0x4040;
        if (PreData == CurrData)
            Loop = FALSE;        /* ready to exit the while loop */
        PreData = CurrData;
        TimeOut++;
    }
}

⌨️ 快捷键说明

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