小磷光一

BF533实现CF卡读写校验功能

0
阅读(2291)

 

#include "cdefBF533.h"
#include "ccblkfn.h"
#include 
#include "dm_bf5xx.h"
#include "dm_cpu.h"
#include "dm_types.h"
volatile  uint_t decLow, decHigh ;
extern int_t SanFileCont;
uint16_t   Boot_Sector[256];
uint16_t   W_Sector_Data[256];
uint16_t   R_Sector_Data[256];
uint16_t   Root_Sector[256];
/****************************************************************************
* 名称 : Test_data
* 功能 : 生成测试数据
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
Test_data()
{
	int_t i;
	for(i=0;i<512;i++)
	W_Sector_Data[i] = i;
}
/****************************************************************************
* 名称 : CheckTest
* 功能 : 检验测试数据,读写100个扇区,将写入的数据读出做比较。
* 入口参数 :无
* 出口参数 :无
****************************************************************************/		
CheckTest()
{
	int_t cont,tem;
	int_t flag = 1;
	printf("CheckTest Data,Waiting...\n\r");
	for(cont=1;cont<100;cont++)
	{
		Write_LBA(cont,W_Sector_Data);
		Read_LBA(cont,R_Sector_Data);
		for(tem=0;tem<256;tem++)
		{
			if(W_Sector_Data[tem] != R_Sector_Data[tem])
			{	
				flag = 0;
				break;
			}
		}	
	}
	if(flag)	
		printf("CheckTest is OK\n\r");
	else 
		printf("CheckTest is ERROE!\n\r");
}
/****************************************************************************
* 名称 : Init_CfCard
* 功能 : 配置CF卡工作模式
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Init_CfCard(void)
{
    *ConfigOption_Reg=PIOMODE; // 00010
    *CardStatus_Reg=0x00;
    *CardCopy_Reg=0x00;
}

uint_t statusok=0;
/****************************************************************************
* 名称 : Init_PCMCIAIO
* 功能 : 配置CF卡工作模式为PIO模式
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Init_PCMCIAIO(void)
{
	int_t status,time=100;
	Init_EBIU();
	*pCtrIner_Flag_OE= ~PCM_MEM;	//选择MEMORY模式
	udelay(100);
	CF_Soft_Reset();
	Init_CfCard();					//配置CF模式为IO模式	
	*pCtrIner_Flag_OE = ~PCM_IO;
	udelay(1000);					//延时等待进入IO模式
	do{
		mdelay(100);
		time--;
		status = *STATUS_REGISTER;
	}while((time!=0)&(status != 0x5000));
	if(status==0x5000)
	{
		printf("STATUS_REG is %x\n\r",*STATUS_REGISTER );
		statusok=1;
	}
	else
	{
		printf("time out... \n\r");
		printf("PCMCIA error !Please check it.. \n\r" );
		statusok=0;
	}
}

/****************************************************************************
* 名称 : Check_Pcmcia
* 功能 : 配置CF卡工作模式为PIO模式
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Check_Pcmcia(void)
{
	if(statusok==1)
	{
	
	DBR_Sector();
	Test_data();
	Write_LBA(10,W_Sector_Data);
	Read_LBA(10,R_Sector_Data);
	CheckTest();
	statusok =0;
	}
}
/****************************************************************************
* 名称 : main
* 功能 : CF卡读写测试主函数
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void main(void)
{		
	int_t i;
	Set_PLL(22,5);	
	printf("CF Card initialization...\n\r");
    Init_PCMCIAIO();
		
	printf("Make Test Data...\n\r");
	Test_data();
	CheckTest();	
	printf("Test END\n\r");	
	while(1);
}