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

📄 s29gl256n.cpp

📁 系统通过JTAG接口烧结挂接在LXFXP2 上的s29gl256N的FLASH的代码,
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        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 + -