test_flash.c
来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· C语言 代码 · 共 235 行
C
235 行
/****************************************************************************
* File: test_flash.c
* Purpose: FLASH TESTS.
***************************************************************************/
//
// Naresh: Removed this file for the time being.
#if 0
#include "standalone.h"
#include "platform.h"
#if (SH_PLATFORM == PLATFORM_ASPEN)
// #ifdef SDBTESTS
// #else SDBTESTS
// #include "main.h"
// #include "flashdrv.h"
// #include "aspen.h"
// #define FLASH_END (flash_t *)((unsigned)FLASH_ADDRESS+FLASH_SIZE)
// #endif SDBTESTS
#define TEST_INTERVAL 4
int (*printFunc)();
extern char *errorText;
void FlashLed(void)
{
register DWORD
i;
// toggle the LEDs
while (1)
{
i = 0x1ffff;
while (i--)
{
if ( !(i & 0xfff) )
;
}
LED ^= 1;
}
}
short TestFlash(short mode)
{
WORD
i,
result = 0;
flash_t
busTestData,
*pDest,
*pStart,
*pEnd;
pStart = FLASH_ADDRESS;
pEnd = FLASH_END;
(*printFunc)("\r\nTesting Flash from %X to %X\r\n", pStart, pEnd);
////////////////////////////////////////////////////////////////////////////
// Erase
////////////////////////////////////////////////////////////////////////////
(*printFunc)("\r\nErasing sector ");
for (i = 0; i <= LAST_SECTOR; i++)
{
(*printFunc)("\b\b\b\b\b\b\b\b%X", i);
FlashErase(i);
}
(*printFunc)("\r\n");
////////////////////////////////////////////////////////////////////////////
// Walking 1 on address bus
////////////////////////////////////////////////////////////////////////////
(*printFunc)("\r\n");
busTestData = 4;
while (busTestData < FLASH_SIZE)
{
pDest = (flash_t *)((DWORD)pStart+busTestData);
busTestData <<= 1;
(*printFunc)("\rWalking '1' across the address bus: %X", pDest);
result = FlashWrite( pDest, (flash_t)pDest );
if (result)
{
errorText = "programming error";
return(result);
}
}
(*printFunc)("\r\nComparing data");
busTestData = 4;
while (busTestData < FLASH_SIZE)
{
pDest = (flash_t *)((DWORD)FLASH_ADDRESS+busTestData);
busTestData <<= 1;
while (pStart < pDest)
{
// check for proper erasure
if ( *pStart != 0xffffffff )
{
(*printFunc)("\r\n\tError at %X. Data: %X", pStart, *pStart);
errorText = "Address bus error";
result = 1;
}
pStart++;
}
if ( *pStart != (flash_t)pDest )
{
// check for correct programming
(*printFunc)("\r\n\tError at %X. Data: %X", pStart, *pStart);
errorText = "Address bus error";
return(1);
}
pStart++;
}
if (result)
return(result);
////////////////////////////////////////////////////////////////////////////
// Erase
////////////////////////////////////////////////////////////////////////////
busTestData = 4;
(*printFunc)("\r\nErasing sector ");
while (busTestData < FLASH_SIZE)
{
i = FlashSector(busTestData);
if (i > LAST_SECTOR)
break;
do
{
busTestData <<= 1;
}
while( FlashSector(busTestData) == i );
(*printFunc)("\b\b\b\b\b\b\b\b%X", i);
FlashErase(i);
}
(*printFunc)("\r\n");
pStart = FLASH_ADDRESS;
while (pStart < pEnd)
{
// check for erasure
if (*pStart != 0xffffffff)
{
(*printFunc)("\r\nErase error at address %X: read %X\r\n", pStart, *pStart);
return(1);
}
pStart++;
}
////////////////////////////////////////////////////////////////////////////
// Walking 1 on data bus
////////////////////////////////////////////////////////////////////////////
(*printFunc)("\r\n");
pStart = FLASH_ADDRESS;
for (i = 0; i < FLASH_WIDTH; i++)
{
busTestData = 1 << i;
(*printFunc)("\rWalking '1' across the data bus: %X", busTestData);
result = FlashWrite( pStart, (flash_t)busTestData);
if (result)
{
errorText = "programming error";
return(result);
}
pStart++;
}
pStart = FLASH_ADDRESS;
for (i = 0; i < FLASH_WIDTH; i++)
{
busTestData = 1 << i;
if (*pStart != busTestData)
{
(*printFunc)("\r\n\tError at %X. Data: %X", pStart, *pStart);
errorText = "Data bus error";
return(2);
}
*pStart++;
}
////////////////////////////////////////////////////////////////////////////
// Erase
////////////////////////////////////////////////////////////////////////////
(*printFunc)("\r\nErasing sector ");
for (i = 0; i < 1; i++)
{
(*printFunc)("\b\b\b\b\b\b\b\b%X", i);
FlashErase(i);
}
(*printFunc)("\r\n");
////////////////////////////////////////////////////////////////////////////
// Copy program for flash boot test
////////////////////////////////////////////////////////////////////////////
(*printFunc)("\r\nCopying program to FLASH\r\n");
pDest = FLASH_ADDRESS;
pStart = (flash_t *)FlashLed;
pEnd = (flash_t *)TestFlash;
while (pStart < pEnd)
{
(*printFunc)("\r%X -> %X", pStart, pDest);
result = FlashWrite( pDest++, *pStart++ );
if (result)
{
errorText = "programming error";
return(result);
}
}
(*printFunc)("\r\nFLASH memory boot enabled!");
(*printFunc)("\r\n");
return(result);
}
#endif (SH_PLATFORM == PLATFORM_ASPEN)
#endif 0
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?