⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sd_main.c

📁 blackfin平台实现对SD卡的支持
💻 C
字号:


#include <cdefBF533.h>
#include "cpld.h"
//#include "spi_dma.h"
#include "sd.h"
section("SD_test_buff")unsigned char MAXDataBuff[2000000];
unsigned char buff_t[512];
unsigned char buff_r[512];

/****************************************************************************
* 名称 : Init_EBIU
* 功能 : 初始化EBIU
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Init_EBIU(void)
{
	*pEBIU_AMBCTL0	= 0x7bb07bb0;
	*pEBIU_AMBCTL1	= 0xbbd0ccd0;
	*pEBIU_AMGCTL	= 0x000f;
}
/****************************************************************************
* 名称 : INIT_PLLs
* 功能 : 配置bf533内核和系统时钟,系统时钟为1/5内核时钟
* 入口参数 :MSEL,
* 出口参数 :无
****************************************************************************/
void Init_PLL(int MSEL)
{
	int new_PLL_CTL;
	*pPLL_DIV = 0x0005;
	asm("ssync;");	
	new_PLL_CTL = (MSEL & 0x3f) << 9;		
	*pSIC_IWR |= 0xffffffff;
	if (new_PLL_CTL != *pPLL_CTL) 
	{	
		*pPLL_CTL = new_PLL_CTL;
		asm("ssync;");
		asm("idle;");
	}
}//end Init_PLL

section("moviebuff")unsigned char fillmovie_data[2500000];
section("moviebuff")unsigned char readmovie_data[2500000];

/****************************************************************************
* 名称 : write_test
* 功能 : 连续写指定大小的数据,测试写函数稳定性,参数datasize单位:MByte
* 入口参数 :datasize
* 出口参数 :无
****************************************************************************/
void write_test(unsigned int datasize)
{
	int i,j;
		for(i=0;i<datasize;i++)
	{
		for(j=0;j<2000;j++)
		{
			sd_writeSector(1,j,buff_t);
		}
	}
}
/****************************************************************************
* 名称 : read_test
* 功能 : 连续读指定大小的数据,测试写函数稳定性,参数datasize单位:MByte
* 入口参数 :datasize
* 出口参数 :无
****************************************************************************/
void read_test(unsigned int datasize)
{
	int i,j;
	for(i=0;i<datasize;i++)
	{
		for(j=0;j<2000;j++)
		{
			sd_readSector(1,j,buff_r,512);
		}
	}
}
/****************************************************************************
* 名称 : check_test
* 功能 : 校验写入的数据,将写入的数据读出做比较
* 入口参数 :datasize
* 出口参数 :无
****************************************************************************/
check_sector(int i)
{
	int j;

    sd_readSector(1,i,buff_r,512);
	for(j=0;j<512;j++)
	{
	    printf("%02x ", buff_r[j]);
		if((j+1)%8 == 0)
		    printf("\n");
		if(j==511)
			printf("Sector %d done!\n", i);
	}	
}

check_test()
{
	int i,j;

	//for(i=0;i<512;i++)
    //buff_t[i] = i+3;
    
    i = 243;
    while(1)
	{
		//sd_writeSector(1,1,buff_t);
		sd_readSector(1,i,buff_r,512);
		//for(j=0;j<512;j++)
		//{
		    //printf("%02x ", buff_r[j]);
		    //if((j+1)%8 == 0)
		    //	printf("\n");
			//if(buff_t[j] != buff_r[j])
			//{
			//	printf("ERROR!\n");
			//	break;
			//}	
			//if(j==511)
			//printf("Sector %d done!\n", i);
		//}	
		if(buff_r[0] != 0xff && buff_r[0] != 0x00)
			printf("Sector %d is not empty, first byte is 0x%02x\n", i, buff_r[0]);
		else
			printf("%d ", i);

		i++;
	}
}

main()
{
	int i,j;
    Init_PLL(0x16);
    Init_EBIU();
     *pCtrIner_Flag_OE =0xff&&(~SPI_OE) ; 	//SPI_switc 允许 
 	 *pCtrOut_Flag_B =SPI_A1; 				// 选择SD_SPISS
    SD_HardwareInitial();					//配置SPI设置		
    sd_Init(1);								//初始化设备

    //check_sector(243);  // the BPB
    //check_sector(275);  // FAT Region
    check_sector(992);
	//check_test();							//连续作正确性校验
	//write_test(50);

	//read_test(50);
	while(1);
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -