📄 flash_example.c
字号:
/************************************************************************************
* Copyright (c), 2004-2007,西安铭朗电子科技有限责任公司
* All rights reserved.
*
* Http: www.mlarm.com
* Email: mlarm@mlarm.com
*
* File name: Flash_Example.c
* Project : ML-F020ICB
* Processor: C8051F020
* Compiler : Keil C51 Compiler
*
* Author: 李林利
* Version: 1.20
* Date: 2007.6.1
* Email: GavinLi@126.com
*
* Description: 本文件是FLASH存储器测试程序文件;
*
* Others: none;
*
* Function List:
* 1. void Flash_Proc(void)
*
* History:
* 1. Author: 李林利
* Version: 1.10
* Date: 2007.3.12
* Modification: none
*
* 2. Author: 李林利
* Version: 1.00
* Date: 2004.11.24
* Modification: 建立文件
*
*************************************************************************************/
/************************************************************************************/
// 引用外部头文件
#include "..\config\C8051f020.h"
#include "..\config\Const.h"
#include "..\driver\uart.h"
#include "..\driver\delay.h"
#include "..\driver\Flash.h"
/************************************************************************************/
/************************************************************************************/
// 常量及全局变量定义
/************************************************************************************/
unsigned char code ASCII[16] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};
/*************************************************************************************/
//
// FLASH存储器测试程序函数定义
//
/*************************************************************************************/
/***********************************************************************************
* Function: Flash_Proc;
*
* Description: FLASH存储器测试程序;
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Flash_Proc(void)
{
unsigned char cmd,j;
unsigned int i,val,k;
unsigned char xdata buf[4096];
Uart0_SendBlock("Flash test starting!\n\r",23,&i);
IOG_Init();
while(1)
{
cmd = 0xff;
if (Uart0_GetCharsRxBuf()>0)
{
Uart0_RecvChar(&cmd);
}
switch (cmd)
{
case '1':
Uart0_SendBlock("Flash ID = 0x",14,&i);
val = FLASH_ReadID();
//Uart0_SendChar(ASCII[(val>>4)&0x0f]);
//Uart0_SendChar(ASCII[val&0x0f]);
//Uart0_SendBlock(" 0x",4,&i);
Uart0_SendChar(ASCII[(val>>4)&0x0f]);
Uart0_SendChar(ASCII[val&0x0f]);
Uart0_SendChar('1');
Uart0_SendChar('8');
Uart0_SendChar('\n');
Uart0_SendChar('\r');
Uart0_SendBlock("This device is ",16,&i);
switch (val&0xff)
{
case 0xD4:
Uart0_SendBlock("SST39LF/VF512\n\r",16,&i);
break;
case 0xD5:
Uart0_SendBlock("SST39LF/VF010\n\r",16,&i);
break;
case 0xD6:
Uart0_SendBlock("SST39LF/VF020\n\r",16,&i);
break;
case 0xD7:
Uart0_SendBlock("SST39LF/VF040\n\r",16,&i);
break;
default:
break;
}
break;
case '2':
Flash_Erase();
Uart0_SendBlock("Flash erase finish!\n\r",22,&i);
break;
case '3':
for (j=0;j<32;j++)
{
for (i=0;i<16384;i++)
Flash_WriteByte((unsigned long)j*0x4000+i, (unsigned char)i);
Uart0_SendBlock("Flash bank",11,&i);
Uart0_SendChar(ASCII[j/10]);
Uart0_SendChar(ASCII[j%10]);
Uart0_SendBlock(" write finish!\n\r",17,&i);
}
for (j=0;j<32;j++)
{
k = 0;
for (i=0;i<16384;i++)
{
if(Flash_ReadByte((unsigned long)j*0x4000+i) == (unsigned char)i)
k++;
}
if (k==16384)
{
Uart0_SendBlock("Flash bank",11,&i);
Uart0_SendChar(ASCII[j/10]);
Uart0_SendChar(ASCII[j%10]);
Uart0_SendBlock(" read&verify OK!\n\r",19,&i);
}
else
{
Uart0_SendBlock("Flash bank",11,&i);
Uart0_SendChar(ASCII[j/10]);
Uart0_SendChar(ASCII[j%10]);
Uart0_SendBlock(" read&verify error!\n\r",22,&i);
}
}
break;
case '4':
//Flash_Erase();
for (j=0;j<(512/4);j++)
{
Flash_EraseSector(j);
Uart0_SendBlock("Flash erase sector",19,&i);
Uart0_SendChar(ASCII[j/100]);
Uart0_SendChar(ASCII[(j%100)/10]);
Uart0_SendChar(ASCII[j%10]);
Uart0_SendBlock(" finish!\n\r",11,&i);
}
break;
case '5':
for (i=0;i<4096;i++)
buf[i] = (unsigned char)i;
for (j=0;j<(512/4);j++)
{
Flash_Write((unsigned long)j*4096,buf,4096);
Uart0_SendBlock("Flash write sector",19,&i);
Uart0_SendChar(ASCII[j/100]);
Uart0_SendChar(ASCII[(j%100)/10]);
Uart0_SendChar(ASCII[j%10]);
Uart0_SendBlock(" finish!\n\r",11,&i);
}
for (j=0;j<(512/4);j++)
{
for (i=0;i<4096;i++)
buf[i] = 0;
Flash_Read((unsigned long)j*4096,buf,4096);
k=0;
for (i=0;i<4096;i++)
{
if (buf[i]==(unsigned char)i)
k++;
}
if (k==4096)
{
Uart0_SendBlock("Flash read&verify sector",25,&i);
Uart0_SendChar(ASCII[j/100]);
Uart0_SendChar(ASCII[(j%100)/10]);
Uart0_SendChar(ASCII[j%10]);
Uart0_SendBlock(" OK!\n\r",7,&i);
}
else
{
Uart0_SendBlock("Flash read&verify sector",25,&i);
Uart0_SendChar(ASCII[j/100]);
Uart0_SendChar(ASCII[(j%100)/10]);
Uart0_SendChar(ASCII[j%10]);
Uart0_SendBlock(" error!\n\r",10,&i);
}
}
break;
case '9':
Uart0_SendBlock("Flash test end!\n\r",17,&i);
return;
break;
default:
break;
}
}
}
/***********************************************************************************/
// 文件结束
/***********************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -