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 + -
显示快捷键?