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

📄 sd.c

📁 SDIO实现底层驱动文件.非常有用.经典!
💻 C
📖 第 1 页 / 共 5 页
字号:
	if((status = SD_WaitDatRdyOrTo())!=NO_ERROR)
		goto ERR_Exit;
	
	DisableMSDC_DMA();
	MSDC_CLR_FIFO();	
	gSD.mCSD.ext_csd = (T_EXT_CSD_MMC40 *)rxbuffer;
	return NO_ERROR;	
	
ERR_Exit:

	if(retry_4bit == KAL_FALSE)
	{
		retry_4bit = KAL_TRUE;
		MSDC_SET_BIT32(SDC_CFG,SDC_CFG_MDLEN);
		gSD.bus_width = 4;
		goto start;
	}
	gSD.bus_width = 1;
	DisableMSDC_DMA();
	MSDC_CLR_FIFO();	
	RESET_MSDC();

	return status;
}


#endif //  defined(__MSDC_SD_MMC__)

#ifdef MSDC_DEBUG

#define TST_ADRS	512*12
static kal_uint8 rxbuffer[512*32],txbuffer[512*32];
//static kal_uint8 rxbuffer[512],txbuffer[512];
kal_uint32 SD_MMC_Test(void)
{

	kal_uint32 result,resp;
	int i;
	SDC_CMD_STATUS status;

	// initialize MSDC
	MSDC_Initialize();
	// initialize SDC
	SD_Initialize();
		

//////////////////////////
//Mass data Tansfer(8M)//
//////////////////////////
#ifdef MASS
{
	int block_num,i,j,cmp,loop = 1;
	kal_uint32 ticks;
	
#ifdef BITS4_BUS
	if(gMSDC_Handle.mMSDC_type == SD_CARD){
		if(status = SD_SetBusWidth(BIT_4W))
			return status;
	}
#endif

	for(i=0;i<512*32;i++)
		txbuffer[i] = i%256;
		
	j=0;
	ticks = NU_Retrieve_Clock();	
	while(loop){
		status = SD_WriteMultiBlock(j*512*32,(uint32*)txbuffer,32);
		if(status) 
		{
			ticks = NU_Retrieve_Clock()- ticks  ;	
			//dbg_print("SD_WriteMultiBlock failed! %d \n\r",ticks);
			//while(1);
		}

		status = SD_ReadMultiBlock(j*512*32,(uint32*)rxbuffer,32);	
		if(status) 
		{
			ticks = NU_Retrieve_Clock()- ticks  ;	
			//dbg_print("SD_ReadMultiBlock failed! %d \n\r",ticks);
			//while(1);
		}
		ticks = NU_Retrieve_Clock()- ticks  ;
		
		cmp = memcmp(txbuffer,rxbuffer,512*32);
		if(cmp)
		{
			ticks = NU_Retrieve_Clock()- ticks  ;	
			//dbg_print("compare failed! %d \n\r",ticks);
			//while(1);
		}
		//dbg_print("Check %d OK!\t",j);
		kal_mem_set(rxbuffer,0,512*32);
		j++;
		if(j*32 >= gSD.mBKNum-32)
		{
			static count = 0;
			ticks = NU_Retrieve_Clock()- ticks  ;	
			//dbg_print("\n\r###############################\n\r",ticks);			
			//dbg_print("end of card %d at count %d\n\r",ticks,count++);
			//dbg_print("\n\r###############################\n\r",ticks);			
			
			j=0;
			ticks = NU_Retrieve_Clock();	

			//while(1);
		}
	}
/*	
	// (1) using single block transfer
	ticks = NU_Retrieve_Clock();
	block_num  = 32;
	//block_num  = 1024;
	for(i=0;i<block_num;i++)
		if(status = SD_WriteSingleBlock(i*512,(kal_uint32*)txbuffer))
			break;

	ticks = NU_Retrieve_Clock()- ticks  ;
	ticks = NU_Retrieve_Clock();
	for(i=0;i<block_num;i++)
	{
		if(status = SD_ReadSingleBlock(i*512,(kal_uint32*)rxbuffer))
			break;
	}
	ticks = NU_Retrieve_Clock()- ticks  ;

	// (2) using multiple block transfer(requied to rewind the buffer pointer)
	ticks = NU_Retrieve_Clock();
	status = SD_WriteMultiBlock(0,(kal_uint32*)txbuffer,block_num);
	ticks = NU_Retrieve_Clock()- ticks  ;
	
	ticks = NU_Retrieve_Clock();
	status = SD_ReadMultiBlock(0,(kal_uint32*)rxbuffer,block_num);
	ticks = NU_Retrieve_Clock()- ticks  ;
*/	

}
#endif // end of MASS

#ifdef SD_ERASE
	// there are differences between SD and MMC
	// tag erase start(CMD32)
	if(status = SD_EraseCmdClass(SDC_CMD_CMD32,0))
		return status;
	// tag erase end(CMD33)
	if(status = SD_EraseCmdClass(SDC_CMD_CMD33,512*32))
		return status;
	// erase...(CMD38)
	if(status = SD_EraseCmdClass(SDC_CMD_CMD38,0))
		return status;

	// check result of erase
	// single block read (CMD17)
	if(status = SD_ReadSingleBlock(0,(kal_uint32*)rxbuffer))
		return status;
	result = 0;
	for(i=0;i<512;i++)
	{	
		if(gSD.mSCR.dat_after_erase)
		{
			if(rxbuffer[i] != 0xff)
				result++;
		}
		else
		{
			if(rxbuffer[i] != 0x00)
				result++;
		}
	}
#endif

#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#ifdef BITS4_BUS
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif // end of 0
	
}
#endif	// FPGA_DEBUG

⌨️ 快捷键说明

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