?? sst39vf160.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 + -