Description
Source
Call Graph
Start Line: 507
int main(void)
{
unsigned int jedecId;
unsigned int numPages;
unsigned int pageSize;
unsigned int i, j;
unsigned int address;
unsigned char pBuffer[MAXPAGESIZE];
// Configure the DBGU
TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
printf("-- Basic Serial Firmware Dataflash Project %s --\n\r", SOFTPACK_VERSION);
printf("-- %s\n\r", BOARD_NAME);
printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__);
// Initialize the SPI and serial flash
PIO_Configure(pins, PIO_LISTSIZE(pins));
AIC_ConfigureIT(SPI_ID, 0, ISR_Spi);
SPID_Configure(&spid, SPI_BASE, SPI_ID);
AT26_Configure(&at26, &spid, SPI_CS);
AIC_EnableIT(SPI_ID);
TRACE_INFO("SPI and AT26 drivers initialized\n\r");
// Read the JEDEC ID of the device to identify it
jedecId = AT26_ReadJedecId(&at26);
if (AT26_FindDevice(&at26, jedecId)) {
TRACE_INFO("%s serial flash detected\n\r", AT26_Name(&at26));
}
else {
TRACE_ERROR("Failed to recognize the device (JEDEC ID is 0x%08X).\n\r", jedecId);
return 1;
}
ASSERT(MAXPAGESIZE >= AT26_PageSize(&at26), "-F- MAXPAGESIZE too small\n\r");
// Get device parameters
numPages = AT26_PageNumber(&at26);
pageSize = AT26_PageSize(&at26);
// Unprotected the flash
AT26_Unprotect(&at26);
TRACE_INFO("Flash unprotected\n\r");
// Erase the chip
TRACE_INFO("Chip is being erased...\n\r");
AT26_EraseChip(&at26);
TRACE_INFO("Checking erase ...\n\r");
// Check that the chip has been erased correctly
address = 0;
for (i=0; i < numPages; i++) {
TRACE_INFO("Checking page #%u\r", i);
AT26_Read(&at26, pBuffer, pageSize, address);
for (j=0; j < pageSize; j++) {
if (pBuffer[j] != 0xFF) {
TRACE_ERROR("Failed erase on page%u:byte%u\n\r", i, j);
TRACE_ERROR(
"-E- Expected 0xFF, read 0x%02X\n\r",
pBuffer[j]);
return 2;
}
}
address += pageSize;
}
TRACE_INFO("Erase successful.\n\r");
// Program a "walking one" pattern on each page
TRACE_INFO("Programming a walking 1 on all pages ...\n\r");
address = 0;
for (i=0; i < numPages; i++) {
TRACE_INFO("Programming page #%u\r", i);
// Fill buffer
for (j=0; j < pageSize; j++) {
pBuffer[j] = 1 << (j & 0x7);
}
// Write buffer
AT26_Write(&at26, pBuffer, pageSize, address);
// Read page back and check result
memset(pBuffer, 0, pageSize);
AT26_Read(&at26, pBuffer, pageSize, address);
for (j=0; j < pageSize; j++) {
if (pBuffer[j] != (1 << (j & 0x7))) {
TRACE_ERROR("Failed program on page%u:byte%u\n\r", i, j);
TRACE_ERROR(
"-E- Expected 0x%02X, read 0x%02X\n\r",
1 << (j & 0x7),
pBuffer[j]);
return 3;
}
}
address += pageSize;
}
TRACE_INFO("Walking 1 test successful.\n\r");
return 0;
}