📄 sd_main.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 + -