Exemple #1
0
int iap_entry (unsigned char *data,unsigned int length)
{   
    unsigned char ucErr;
	unsigned int i;
   	unsigned char ramData[256]; // 定义变量区 
	if(length > 256) length = 256;
	for(i = 0;i < length;i ++)
	{
		ramData[i]  = data[i];
	}
    IAP_Entry = (void(*)())IAP_ENTER_ADR;                               /* 初始化函数指针IAP_Entry      */

   // __disable_irq();                                                   /* 在IAP操作前必须关闭所有中断  */
    
    parIdRead();                                                        /* 读器件ID                     */
	codeIdBoot();                                                       /* 读Boot版本号                 */

    sectorPrepare(IAP_SECTOR_NUMBER,IAP_SECTOR_NUMBER);                                                 /* 准备扇区1                    */
    sectorErase(IAP_SECTOR_NUMBER,IAP_SECTOR_NUMBER);                                                   /* 擦除扇区1                    */
    blankChk(IAP_SECTOR_NUMBER,IAP_SECTOR_NUMBER) ;                                                     /* 查空扇区1                    */
   
    sectorPrepare(IAP_SECTOR_NUMBER,IAP_SECTOR_NUMBER);                                                 /* 选择扇区1                    */
    ramCopy(IAP_ADDRESS, (unsigned int)ramData, 256);                               /* 写数据到扇区1                */
	ucErr = dataCompare(IAP_ADDRESS, (unsigned int)ramData, 256);                   /* 比较数据                     */
   
   // __enable_irq();
   
    if (ucErr == CMD_SUCCESS) {                                         /* 成功 */    	

    }    
//    while (1);
}
Exemple #2
0
/*!  \fn       flashEraseSectorXTest(uint8_t* bufferIn, uint8_t* bufferOut, uint16_t bufferSize)
*    \brief    A Testing wrapper that tests erasing SECTOR_START through SECTOR_END
*    \param    bufferIn   One of the two testing buffers -> Should be size of BYTES_PER_PAGE
*    \param    bufferOut  One of the two testing buffers -> Should be size of BYTES_PER_PAGE
*    \param    bufferSize Should always be BYTES_PER_PAGE
*    \return   Test Status
*/
RET_TYPE flashEraseSectorXTest(uint8_t* bufferIn, uint8_t* bufferOut, uint16_t bufferSize)
{
    uint16_t i = 0;
    uint16_t j = 0;
    uint16_t k = 0;
    
    uint16_t sectorPageOffset = 0;
    
    // for each sector
    for(i = SECTOR_START; i <= SECTOR_END; i++)
    {
        // calculate sector page offset
        sectorPageOffset = PAGE_PER_SECTOR * i; 
        
        // for each page in sector (populate sector)
        for(j = 0; j < PAGE_PER_SECTOR; j++)
        {
            // write random data
            initBuffer(bufferIn, bufferSize, FLASH_TEST_INIT_BUFFER_POLICY_RND);
            memcpy(bufferOut, bufferIn, bufferSize);
            
            writeDataToFlash(sectorPageOffset + j, 0, bufferSize, bufferIn);
            
            // re-init bufferIn with 0's
            initBuffer(bufferIn, bufferSize, FLASH_TEST_INIT_BUFFER_POLICY_ZERO);
            
            // read data
            readDataFromFlash(sectorPageOffset + j, 0, bufferSize, bufferIn);
            
            // check buffer contents (verify population)
            for(k = 0; k < bufferSize; k++)
            {
                // compare buffers (should match)
                if(bufferIn[k] != bufferOut[k])
                {
                    return RETURN_NO_MATCH;
                }
            } // end for each byte in page
        } // end for each page in sector
        
        // issue sector erase
        sectorErase(i);
        
        // init compare buffer (1's)
        initBuffer(bufferOut, bufferSize, FLASH_TEST_INIT_BUFFER_POLICY_ONE);
        
        // for each page in sector (check for erased data)
        for(j = 0; j < PAGE_PER_SECTOR; j++)
        {
            // read flash to bufferIn
             readDataFromFlash(sectorPageOffset + j, 0, bufferSize, bufferIn);
            
            // check buffer contents
            for(k = 0; k < bufferSize; k++)
            {
                // compare -> bufferIn == bufferOut
                if(bufferIn[k] != bufferOut[k])
                {
                    return RETURN_NO_MATCH;
                }
            } // end for each byte in page
        } // end for each page in sector    
    } // end for each sector
      
    return RETURN_OK;
}  // End flashEraseSectorXTest