📄 flash_main.c
字号:
/*
* File: flash_main.c
* Purpose: Test the AM29LV160CB Flash on the M5275EVB
*
*/
#include "m5275evb.h"
int sector_erase(uint32);
void main(void)
{
uint16 i;
uint16 data = 0xA5A5;
printf("\n\nStarting Flash Example\n");
/* Erase sector 0, 2, 5, 10 */
if (!sector_erase(0))
return;
if (!sector_erase(0x3000))
return;
if (!sector_erase(0x40000))
return;
if (!sector_erase(0xE0000))
return;
/* Unlock Bypass command */
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0AAA)) = 0x00AA;
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0554)) = 0x0055;
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0AAA)) = 0x0020;
/* Unlock Bypass Program command */
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) = 0x00A0;
/* Wait between unlock bypass and writes */
for (i = 0; i < 1000; i++){};
/* Program 16-bits of data to the 5 sectors */
*((uint16 *)(EXT_FLASH_ADDRESS)) = data;
while(*((uint16 *)(EXT_FLASH_ADDRESS)) != data){};
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) = 0x00A0;
*((uint16 *)(EXT_FLASH_ADDRESS + 0x3000)) = data;
while(*((uint16 *)(EXT_FLASH_ADDRESS + 0x3000)) != data){};
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) = 0x00A0;
*((uint16 *)(EXT_FLASH_ADDRESS + 0x40000)) = data;
while(*((uint16 *)(EXT_FLASH_ADDRESS + 0x40000)) != data){};
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) = 0x00A0;
*((uint16 *)(EXT_FLASH_ADDRESS + 0xE0000)) = data;
while(*((uint16 *)(EXT_FLASH_ADDRESS + 0xE0000)) != data){};
/* Unlock Bypass Reset command */
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) = 0x0090;
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) = 0x0000;
/* Verify Data in all 5 sectors */
if (*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) != data)
{
printf("Write Failed at offset 0x0000\n");
}
if (*((uint16 *)(EXT_FLASH_ADDRESS + 0x3000)) != data)
{
printf("Write Failed at offset 0x3000\n");
}
if (*((uint16 *)(EXT_FLASH_ADDRESS + 0x40000)) != data)
{
printf("Write Failed at offset 0x40000\n");
}
if (*((uint16 *)(EXT_FLASH_ADDRESS + 0xE0000)) != data)
{
printf("Write Failed at offset 0xE0000\n");
}
/* Test passed... Erase sector 0, 2, 5, and 10 again */
if (!sector_erase(0))
return;
if (!sector_erase(0x3000))
return;
if (!sector_erase(0x40000))
return;
if (!sector_erase(0xE0000))
return;
printf("Flash Example Finished\n");
}
/********************************************************************/
int sector_erase(uint32 address)
{
int i;
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0AAA)) = 0x00AA;
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0554)) = 0x0055;
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0AAA)) = 0x0080;
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0AAA)) = 0x00AA;
*((uint16 *)(EXT_FLASH_ADDRESS + 0x0554)) = 0x0055;
*((uint16 *)(EXT_FLASH_ADDRESS + address)) = 0x0030;
for (i = 0; i < 40000000; i++)
{
if (*((uint16*)(EXT_FLASH_ADDRESS + address)) == 0xFFFF)
break;
}
if (i == 40000000)
{
printf("Erase failed at 0x%x\n",address);
return FALSE;
}
return TRUE;
}
/********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -