Description
Source
Call Graph
Start Line: 161
int main(void)
{
unsigned int blockNumber, block, blockSize, blockAddress, pageSize, packetSize, i;
unsigned char testFailed;
const unsigned char busWidth[3] = {FLASH_CHIP_WIDTH_8BITS, FLASH_CHIP_WIDTH_16BITS, FLASH_CHIP_WIDTH_32BITS};
// Configure pins and DBGU
#ifdef PINS_NORFLASH
PIO_Configure(pPins, PIO_LISTSIZE(pPins));
#endif
TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
printf("-- Basic NorFlash Project %s --\n\r", SOFTPACK_VERSION);
printf("-- %s\n\r", BOARD_NAME);
printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__);
norFlash.norFlashInfo.baseAddress = BOARD_NORFLASH_ADDR;
// Check device CFI and get Vendor setting from it.
printf("-I- \t Common Flash Interface detecting...\n\r");
for (i = 0; i < 3; i++) {
// Configure SMC for Norflash accesses
TRACE_INFO("\t Try bus width %d bits\n\r", busWidth[i] * 8);
BOARD_ConfigureNorFlash48MHz(busWidth[i] * 8);
if(! NorFlash_CFI_Detect(&norFlash, busWidth[i])) break;
}
if (norFlash.norFlashInfo.cfiCompatible == 0) {
TRACE_ERROR("Device Unknown\n\r");
testFailed = 1;
goto exit;
}
printf("-I- \t CFI detected and driver initialized\n\r");
printf("-I- \t manufactureID : 0x%08x, deviceID : 0x%08x\n\r",
NORFLASH_ReadManufactoryID(&norFlash),
NORFLASH_ReadDeviceID(&norFlash));
// Test all pages
testFailed = 0;
block = 0;
blockNumber = NorFlash_GetDeviceNumOfBlocks(&(norFlash.norFlashInfo));
pageSize = min(NorFlash_GetDeviceMinBlockSize(&(norFlash.norFlashInfo)), 1024);
while (!testFailed && (block < blockNumber)) {
TRACE_INFO("Test in progress on block: %6d\r", block);
// Erase block
NORFLASH_EraseSector(&norFlash, NorFlash_GetDeviceSectorAddress(&(norFlash.norFlashInfo), block));
blockSize = NorFlash_GetDeviceBlockSize(&(norFlash.norFlashInfo), block);
blockAddress = NorFlash_GetDeviceSectorAddress(&(norFlash.norFlashInfo), block);
packetSize = pageSize;
while (blockSize) {
// Verify that page has been erased correctly
memset(pBuffer, 0, packetSize);
NORFLASH_ReadData(&norFlash, blockAddress, pBuffer, packetSize);
for (i=0; i < packetSize; i++) {
if (pBuffer[i] != 0xFF) {
TRACE_ERROR("Could not erase block %d\n\r", block);
testFailed = 1;
goto exit;
}
}
blockAddress += packetSize;
blockSize -= packetSize;
if (blockSize < pageSize) {
packetSize = blockSize;
}
}
blockSize = NorFlash_GetDeviceBlockSize(&(norFlash.norFlashInfo), block);
blockAddress = NorFlash_GetDeviceSectorAddress(&(norFlash.norFlashInfo), block);
packetSize = pageSize;
while (blockSize) {
// Write page
for (i = 0; i < packetSize; i++) {
pBuffer[i] = i & 0xFF;
}
NORFLASH_WriteData(&norFlash, blockAddress, pBuffer, packetSize);
// Check that data has been written correctly
memset(pBuffer, 0, packetSize);
NORFLASH_ReadData(&norFlash, blockAddress, pBuffer, packetSize);
for (i = 0; i < packetSize; i++) {
if (pBuffer[i] != (i & 0xFF)) {
TRACE_ERROR("Could not write block %d\n\r", block);
testFailed = 1;
goto exit;
}
}
blockAddress += packetSize;
blockSize -= packetSize;
if (blockSize < pageSize) {
packetSize = blockSize;
}
}
block++;
}
exit:
// Display test result
if (testFailed) {
printf("-E- Test failed.\n\r");
}
else {
printf("\n\r-I- Test passed.\n\r");
}
return 0;
}