📄 s29gl256n.cpp
字号:
return ERROR;
}
if( nBlock < 0 || nBlock > FLASH_SECTOR_NUM || Flashaddr < FLASHSTARTADDRESS
|| Flashaddr > FLASHENDADDRESS)
{
#ifdef ERASE_TEST
printf("->Error in the parameter!\n");
printf("->The parameter : Flashaddr = 0x%08lX,block = %ld\n\n",Flashaddr,nBlock);
#endif
return ERROR;
}
#ifdef ERASE_TEST
printf("->Erase Flash address start at = 0x%08lX,block = %ld\n",Flashaddr,nBlock);
printf("->Erasing..........");
#endif
/* For each block..
*/
Flashaddr = Flashaddr & FLASH_MASK;
/************************************************************************************/
/* ERASE OPERATION */
/************************************************************************************/
while ((Flashaddr < FlashEraseEndAdr)&&(Flashaddr < FLASHENDADDRESS))
{
#ifdef ERASE_TEST
printf("%3ld\b\b\b", ++ii);
#endif
/* Send erase command and confirmation. */
write_command(FLASH_UNLOCK_OFFSET1, FLASH_UNLOCK_CMD1);
write_command(FLASH_UNLOCK_OFFSET2, FLASH_UNLOCK_CMD2);
write_command(FLASH_UNLOCK_OFFSET1, FLASH_ERASE_CMD);
write_command(FLASH_UNLOCK_OFFSET1, FLASH_UNLOCK_CMD1);
write_command(FLASH_UNLOCK_OFFSET2, FLASH_UNLOCK_CMD2);
write_command(Flashaddr, FLASH_SECTOR_ERASE_CONFIRM_CMD);
i = 0;
while(i++ < FLASH_ERASE_BLOCK_LOOP)
{
WindFlashMSDelay(1);
temp = read_command(Flashaddr);
if(temp == 0xFFFF)
{ break; }
}
/* Send Read Array command. Return the flash into read array mode. */
S29glResetFlash();
if(i >= FLASH_ERASE_BLOCK_LOOP)
{
rcval = ERROR;
break;
}
rcval = OK;
/* Move up to the next block. */
Flashaddr += FLASH_SECTOR_SIZE;
}
#ifdef ERASE_TEST
if(rcval == OK) printf(" OK! \n");
else printf(" ERROR! \n");
#endif
/* Send Read Array command. Return the flash into read array mode. */
S29glResetFlash();
return rcval;
}
/******************************************************************************
*
* ReadBlkSR: read sector group protect verify
* Input: offset, address offset to be read
* Output: none
* return: sector group protect verify value
*
******************************************************************************/
int flashManID(WORD *rst)
{
write_command(FLASH_UNLOCK_OFFSET1, FLASH_UNLOCK_CMD1);
write_command(FLASH_UNLOCK_OFFSET2, FLASH_UNLOCK_CMD1);
write_command(FLASH_UNLOCK_OFFSET1, FLASH_IDENTIFIER_CMD);
*rst = read_command(FLASHSTARTADDRESS + FLASH_MANUFACTOR_ID_OFFSET);
S29glResetFlash();
if((*rst == FLASH_MANUFACTOR_ID))
return 0;
else
return -1;
}
/******************************************************************************
*
* ReadBlkSR: read sector group protect verify
* Input: offset, address offset to be read
* Output: none
* return: sector group protect verify value
*
******************************************************************************/
int flashDevID(WORD *rst)
{
write_command(FLASH_UNLOCK_OFFSET1, FLASH_UNLOCK_CMD1);
write_command(FLASH_UNLOCK_OFFSET2, FLASH_UNLOCK_CMD1);
write_command(FLASH_UNLOCK_OFFSET1, FLASH_IDENTIFIER_CMD);
rst[0] = read_command(FLASHSTARTADDRESS + FLASH_DEVICE_ID1_OFFSET);
rst[1] = read_command(FLASHSTARTADDRESS + FLASH_DEVICE_ID2_OFFSET);
rst[2] = read_command(FLASHSTARTADDRESS + FLASH_DEVICE_ID3_OFFSET);
S29glResetFlash();
if(rst[0] != FLASH_DEVICE_ID1)
return -1;
if(rst[1] != FLASH_DEVICE_ID1)
return -1;
if(rst[2] != FLASH_DEVICE_ID1)
return -1;
return 0;
}
/******************************************************************************
*
* ReadBlkSR: read sector group protect verify
* Input: offset, address offset to be read
* Output: none
* return: sector group protect verify value
*
******************************************************************************/
WORD ReadBlkSR(int offset)
{
WORD temp = 0;
DWORD Flashaddr = (FLASHSTARTADDRESS + offset);
write_command(FLASH_UNLOCK_OFFSET1, FLASH_UNLOCK_CMD1);
write_command(FLASH_UNLOCK_OFFSET2, FLASH_UNLOCK_CMD2);
write_command(FLASH_UNLOCK_OFFSET1, FLASH_IDENTIFIER_CMD);
temp = read_command(Flashaddr);
S29glResetFlash();
return temp;
}
/******************************************************************************
*
* S29GL128MRead: Read FLASH Data
* Input: offset, address offset of data to be read
* bufAddr, buffer pointer
* dataLen, length of data to be read, 1 is 4 word
* Output: none
* return: OK or ERROR
*
******************************************************************************/
void S29glResetFlash()
{
write_command(FLASHSTARTADDRESS, FLASH_RESET_CMD);
return ;
}
/******************************************************************************
*
* S29GL128MRead: Read FLASH Data
* Input: offset, address offset of data to be read
* bufAddr, buffer pointer
* dataLen, length of data to be read, 1 is 4 word
* Output: none
* return: OK or ERROR
*
******************************************************************************/
void S29glWrBufAbortResetFlash()
{
write_command(FLASH_UNLOCK_OFFSET1, FLASH_UNLOCK_CMD1);
write_command(FLASH_UNLOCK_OFFSET2, FLASH_UNLOCK_CMD2);
write_command(FLASH_UNLOCK_OFFSET1, FLASH_RESET_CMD);
return ;
}
/******************************************************************************
*
* S29GL128MRead: Read FLASH Data
* Input: offset, address offset of data to be read
* bufAddr, buffer pointer
* dataLen, length of data to be read, 1 is 4 word
* Output: none
* return: OK or ERROR
*
******************************************************************************/
void WindFlashMSDelay(int numMSecond)
{
int dwStart = GetTickCount();
int dwEnd = dwStart;
do
{
dwEnd = GetTickCount()-dwStart;
}while(dwEnd < numMSecond);
}
/******************************************************************************
*
* S29GL128MRead: Read FLASH Data
* Input: offset, address offset of data to be read
* bufAddr, buffer pointer
* dataLen, length of data to be read, 1 is 4 word
* Output: none
* return: OK or ERROR
*
******************************************************************************/
bool S29glCheckToggleRdy(int * Dst, WORD expeted)
{
int i = 0;
WORD temp = 0;
while(i++ < FLASH_ERASE_BLOCK_LOOP)
{
WindFlashMSDelay(1);
temp = read_command((DWORD)(*Dst));
if(temp == expeted)
{
break;
}
}
if(i < FLASH_ERASE_BLOCK_LOOP) return true;
else return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -