亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mmc.c

?? 這個(gè)是我調(diào)通的在2410下運(yùn)行文件系統(tǒng)的程序. 用2410驅(qū)動(dòng)sd卡來(lái)實(shí)現(xiàn)fat文件系統(tǒng). 歡迎大家來(lái)測(cè)試. 用法很簡(jiǎn)單, 如下 FILE *fp // 文件指針
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
	rSDIDCON=(1<<19)|(1<<17)|(Wide<<16)|(2<<12)|(1<<0);
		// Rx after cmd, blk, 4bit bus, Rx start, blk num, 4 block

    rSDICARG=addr<<9;	// CMD17/18(addr)
    //rSDICARG=0;

RERDCMD:
		rSDICCON=(0x1<<9)|(0x1<<8)|0x51;    // sht_resp, wait_resp, dat, start, CMD17
		if(!Chk_CMDend(17, 1))	//-- Check end of CMD17
		    goto RERDCMD;	    

	    //rSDICSTA=0xa00;	// Clear cmd_end(with rsp)	    
	    while(rd_cnt<128)	// 512*block bytes
	    {
		if((rSDIDSTA&0x20)==0x20) // Check timeout 
		{
		    rSDIDSTA=0x1<<0x5;  // Clear timeout flag
		    break;
		}
		status=rSDIFSTA;
		if((status&0x1000)==0x1000)	// Is Rx data?
		{
		   // *Rx_buffer++=rSDIDAT;
		    Rx_buffer[rd_cnt] =rSDIDAT;
		    rd_cnt++;
		}
		}
	  #ifdef SD_INFO
	    Uart_Printf("rd_cnt is %d\n", rd_cnt);
	  #endif
    //-- Check end of DATA
    if(!Chk_DATend()) 
	Uart_Printf("dat error\n");
    rSDIDSTA=0x10;	// Clear data Tx/Rx end

// 這里可以用另外的方式實(shí)現(xiàn)
   for(i=0; i<512; i+=4)
    {
      Buffer[i] = (U8) (Rx_buffer[i/4]>>24);
      Buffer[i+1]=(U8) (Rx_buffer[i/4]>>16);
      Buffer[i+2]=(U8) (Rx_buffer[i/4]>>8);
      Buffer[i+3]=(U8) Rx_buffer[i/4];
    }
   return TRUE;

}

S8 Mmc_Write_Sector(U32 addr,U8 *Buffer)
{
    int status;
    wt_cnt=0;    


    rSDICON |= rSDICON|(1<<1);	// FIFO reset
	rSDIDCON=(1<<20)|(1<<17)|(Wide<<16)|(3<<12)|(4<<0);
		    // Tx after rsp, blk, 4bit bus, Tx start, blk num, 4 block

    //rSDICARG=addr<<9;	    // CMD24/25(addr)
    rSDICARG=0;

REWTCMD:
    rSDICCON=(0x1<<9)|(0x1<<8)|0x59;	//sht_resp, wait_resp, dat, start, CMD25
		if(!Chk_CMDend(25, 1))	//-- Check end of CMD25
		    goto REWTCMD;

    //rSDICSTA=0xa00;	// Clear cmd_end(with rsp)
    while(wt_cnt<512)
    {
    	status=rSDIFSTA;
		if((status&0x2000)==0x2000) 
		{
		    rSDIDAT=*Buffer++;
		    wt_cnt++;
		}
	}
	
    //-- Check end of DATA
    if(!Chk_DATend()) 
	Uart_Printf("dat error\n");

    rSDIDSTA=0x10;	// Clear data Tx/Rx end


	//--Stop cmd(CMD12)
REWCMD12:    
	rSDIDCON=(1<<18)|(1<<17)|(0<<16)|(1<<12)|(4<<0);
	
	rSDICARG=0x0;	    //CMD12(stuff bit)
	rSDICCON=(0x1<<9)|(0x1<<8)|0x4c;    //sht_resp, wait_resp, start, CMD12

	//-- Check end of CMD12
	if(!Chk_CMDend(12, 1)) 
	    goto REWCMD12;
	//rSDICSTA=0xa00;	// Clear cmd_end(with rsp)

	//-- Check end of DATA(with busy state)
	if(!Chk_BUSYend()) 
	    Uart_Printf("error\n");
	rSDIDSTA=0x08;

	
	
	return TRUE;
}

int Chk_BUSYend(void)
{
    int finish;

    finish=rSDIDSTA;
    while( !( ((finish&0x08)==0x08) | ((finish&0x20)==0x20) ))
	finish=rSDIDSTA;

    if( (finish&0xfc) != 0x08 )
    {
        Uart_Printf("DATA:finish=0x%x\n", finish);
        rSDIDSTA=0xf4;  //clear error state
        return 0;
    }
    return 1;
}
int Chk_DATend(void)
{
    int finish;

    finish=rSDIDSTA;
    while( !( ((finish&0x10)==0x10) | ((finish&0x20)==0x20) ))	
	// Chek timeout or data end
	finish=rSDIDSTA;
    if( (finish&0xfc) != 0x10 )
    {
        Uart_Printf("DATA:finish=0x%x\n", finish);
        rSDIDSTA=0xec;  // Clear error state
        return 0;
    }
    return 1;
}

void Set_1bit_bus(void)
{
    Wide=0;
    if(!MMC)
	SetBus();
	#ifdef SD_INFO
    Uart_Printf("\n****1bit bus****\n");
    #endif
}

void Set_4bit_bus(void)
{
    Wide=1;
    SetBus();
    #ifdef SD_INFO
    Uart_Printf("\n****4bit bus****\n");
    #endif
}

int Chk_MMC_OCR(void)
{
    int i;

    //-- Negotiate operating condition for MMC, it makes card ready state
    for(i=0;i<15;i++)
    {
    	rSDICARG=0xffc000;	    	    //CMD1(OCR:2.6V~3.6V)
//	rSDICARG=0xff8000;	    	    //CMD1(OCR:2.7V~3.6V)
    	rSDICCON=(0x1<<9)|(0x1<<8)|0x41;    //sht_resp, wait_resp, start, CMD1

    	//-- Check end of CMD1
    	if(Chk_CMDend(1, 1) & rSDIRSP0==0x80ffc000) 
//	if(Chk_CMDend(1, 1) & rSDIRSP0==0x80ff8000) 
	{
	    //rSDICSTA=0xa00;	// Clear cmd_end(with rsp)
	    return 1;	// Success
	}
    }
    //rSDICSTA=0xa00;	// Clear cmd_end(with rsp)
    return 0;		// Fail
}

int Chk_SD_OCR(void)
{
    int i;

    //-- Negotiate operating condition for SD, it makes card ready state
    for(i=0;i<15;i++)
    {
    	CMD55();    // Make ACMD

    	rSDICARG=0xff8000;	//ACMD41(OCR:2.7V~3.6V)
    	rSDICCON=(0x1<<9)|(0x1<<8)|0x69;//sht_resp, wait_resp, start, ACMD41

	//-- Check end of ACMD41
    	if( Chk_CMDend(41, 1) & rSDIRSP0==0x80ff8000 ) 
	{
	    //rSDICSTA=0xa00;	// Clear cmd_end(with rsp)

	    return 1;	// Success	    
	}
	Delay(200); // Wait Card power up status
    }
    //Uart_Printf("SDIRSP0=0x%x\n",rSDIRSP0);
    //rSDICSTA=0xa00;	// Clear cmd_end(with rsp)
    return 0;		// Fail
}


int CMD55(void)
{
    //--Make ACMD
    rSDICARG=RCA<<16;			//CMD7(RCA,stuff bit)
    rSDICCON=(0x1<<9)|(0x1<<8)|0x77;	//sht_resp, wait_resp, start, CMD55

    //-- Check end of CMD55
    if(!Chk_CMDend(55, 1)) 
	return 0;

    //rSDICSTA=0xa00;	// Clear cmd_end(with rsp)
    return 1;
}

int CMD13(void)//SEND_STATUS
{
    int response0;

    rSDICARG=RCA<<16;			// CMD13(RCA,stuff bit)
    rSDICCON=(0x1<<9)|(0x1<<8)|0x4d;	// sht_resp, wait_resp, start, CMD13

    //-- Check end of CMD13
    if(!Chk_CMDend(13, 1)) 
	return 0;
    //Uart_Printf("rSDIRSP0=0x%x\n", rSDIRSP0);
    if(rSDIRSP0&0x100)
	Uart_Printf("Ready for Data\n");
    else 
	Uart_Printf("Not Ready\n");
    response0=rSDIRSP0;
    response0 &= 0x3c00;
    response0 = response0 >> 9;
    Uart_Printf("Current Status=%d\n", response0);
    // removed by ldqmoon
   // if(response0==6)
	//Test_SDI();

    //rSDICSTA=0xa00;	// Clear cmd_end(with rsp)
    return 1;
}

void CMD0(void)
{
    //-- Make card idle state 
    rSDICARG=0x0;	    // CMD0(stuff bit)
    rSDICCON=(1<<8)|0x40;   // No_resp, start, CMD0

    //-- Check end of CMD0
    Chk_CMDend(0, 0);
    //rSDICSTA=0x800;	    // Clear cmd_end(no rsp)
}

int CMD9(void)//SEND_CSD
{
    rSDICARG=RCA<<16;				// CMD9(RCA,stuff bit)
    rSDICCON=(0x1<<10)|(0x1<<9)|(0x1<<8)|0x49;	// long_resp, wait_resp, start, CMD9

    Uart_Printf("\n****CSD register****\n");
    //-- Check end of CMD9
    if(!Chk_CMDend(9, 1)) 
	return 0;

    Uart_Printf(" SDIRSP0=0x%x\n SDIRSP1=0x%x\n SDIRSP2=0x%x\n SDIRSP3=0x%x\n", rSDIRSP0,rSDIRSP1,rSDIRSP2,rSDIRSP3);
    return 1;
}


int Chk_CMDend(int cmd, int be_resp)
//0: Timeout
{
    int finish0;

    if(!be_resp)    // No response
    {
    	finish0=rSDICSTA;
	while((finish0&0x800)!=0x800)	// Check cmd end
	    finish0=rSDICSTA;

	rSDICSTA=finish0;// Clear cmd end state

	return 1;
    }
    else	// With response
    {
    	finish0=rSDICSTA;
	while( !( ((finish0&0x200)==0x200) | ((finish0&0x400)==0x400) ))    // Check cmd/rsp end
    	    finish0=rSDICSTA;

	if(cmd==1 | cmd==9 | cmd==41)	// CRC no check
	{
	    if( (finish0&0xf00) != 0xa00 )  // Check error
	    {
		rSDICSTA=finish0;   // Clear error state

		if(((finish0&0x400)==0x400))
		    return 0;	// Timeout error
    	    }
	    rSDICSTA=finish0;	// Clear cmd & rsp end state
	}
	else	// CRC check
	{
	    if( (finish0&0x1f00) != 0xa00 )	// Check error
	    {
		//Uart_Printf("CMD%d:rSDICSTA=0x%x, rSDIRSP0=0x%x\n",cmd, rSDICSTA, rSDIRSP0);
		rSDICSTA=finish0;   // Clear error state

		if(((finish0&0x400)==0x400))
		    return 0;	// Timeout error
    	    }
	    rSDICSTA=finish0;
	}
	return 1;
    }
}

void Card_sel_desel(char sel_desel)
{
    //-- Card select or deselect
    if(sel_desel)
    {
RECMDS7:	
	rSDICARG=RCA<<16;	// CMD7(RCA,stuff bit)
	rSDICCON= (0x1<<9)|(0x1<<8)|0x47;   // sht_resp, wait_resp, start, CMD7

	//-- Check end of CMD7
	if(!Chk_CMDend(7, 1))
	    goto RECMDS7;
	//rSDICSTA=0xa00;	// Clear cmd_end(with rsp)

	//--State(transfer) check
	if( rSDIRSP0 & 0x1e00!=0x800 )
	    goto RECMDS7;
    }
    else
    {
RECMDD7:	
	rSDICARG=0<<16;		//CMD7(RCA,stuff bit)
	rSDICCON=(0x1<<8)|0x47;	//no_resp, start, CMD7

	//-- Check end of CMD7
	if(!Chk_CMDend(7, 0))
	    goto RECMDD7;
	//rSDICSTA=0x800;	// Clear cmd_end(no rsp)
    }
}


void SetBus(void)
{
SET_BUS:
    CMD55();	// Make ACMD
    //-- CMD6 implement
    rSDICARG=Wide<<1;	    //Wide 0: 1bit, 1: 4bit
    rSDICCON=(0x1<<9)|(0x1<<8)|0x46;	//sht_resp, wait_resp, start, CMD55

    if(!Chk_CMDend(6, 1))   // ACMD6
	goto SET_BUS;
    //rSDICSTA=0xa00;	    // Clear cmd_end(with rsp)
}

void Set_Prt(void)
{
    //-- Set protection addr.0 ~ 262144(32*16*512) 
    Uart_Printf("[Set protection(addr.0 ~ 262144) test]\n");

RECMD28:
    //--Make ACMD
    rSDICARG=0;	    // CMD28(addr) 
    rSDICCON=(0x1<<9)|(0x1<<8)|0x5c;	//sht_resp, wait_resp, start, CMD28

    //-- Check end of CMD28
    if(!Chk_CMDend(28, 1)) 
	goto RECMD28;
    //rSDICSTA=0xa00;	// Clear cmd_end(with rsp)
}

void Clr_Prt(void)
{
    //-- Clear protection addr.0 ~ 262144(32*16*512) 
    Uart_Printf("[Clear protection(addr.0 ~ 262144) test]\n");

RECMD29:
    //--Make ACMD
    rSDICARG=0;	    // CMD29(addr)
    rSDICCON=(0x1<<9)|(0x1<<8)|0x5d;	//sht_resp, wait_resp, start, CMD29

    //-- Check end of CMD29
    if(!Chk_CMDend(29, 1)) 
	goto RECMD29;
    //rSDICSTA=0xa00;	// Clear cmd_end(with rsp)
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av一级电影| 国产不卡一区视频| 亚洲精品网站在线观看| 国产欧美一区二区精品婷婷| 91麻豆精品国产自产在线 | 日韩欧美三级在线| 久久99国产精品成人| 一区二区三区中文字幕| 国产精品福利av| 欧美国产一区二区| 久久精品欧美一区二区三区麻豆 | 高清在线成人网| 激情亚洲综合在线| 青青青爽久久午夜综合久久午夜| 亚洲视频在线一区二区| 自拍偷拍欧美精品| 亚洲欧洲日产国产综合网| 最新国产精品久久精品| 国产精品久久午夜| 中文久久乱码一区二区| 欧美激情一区二区三区不卡| 日韩限制级电影在线观看| 欧美精品成人一区二区三区四区| 欧美偷拍一区二区| 欧美日韩精品专区| 欧美精品亚洲二区| 欧美男生操女生| 在线不卡免费欧美| 51久久夜色精品国产麻豆| 欧洲一区二区三区免费视频| 欧美三级午夜理伦三级中视频| 色美美综合视频| 欧美亚洲图片小说| 欧美日韩一级大片网址| 欧美高清dvd| 91精品婷婷国产综合久久性色| 欧美一区二区三区啪啪| 欧美mv日韩mv国产网站app| 久久欧美一区二区| 精品国产乱码久久久久久1区2区| 亚洲精品在线电影| 欧美国产精品劲爆| 亚洲免费在线电影| 亚洲午夜影视影院在线观看| 偷窥少妇高潮呻吟av久久免费| 午夜精品久久久久久久| 免费一级片91| 国产精品123| caoporm超碰国产精品| 色综合视频在线观看| 欧美日韩国产天堂| 51精品久久久久久久蜜臀| 精品国产sm最大网站免费看| 国产日韩欧美高清| 一区二区高清视频在线观看| 日韩在线卡一卡二| 国产剧情一区二区三区| 成人av午夜影院| 欧美日精品一区视频| 日韩欧美国产小视频| 亚洲国产高清不卡| 亚洲专区一二三| 久久99日本精品| 91在线观看高清| 欧美一区二区日韩| 国产精品麻豆欧美日韩ww| 亚洲成在人线免费| 麻豆91精品视频| 一本到三区不卡视频| 精品少妇一区二区三区视频免付费| 欧美国产综合色视频| 亚洲成人激情自拍| 国产精品一二三四区| 94色蜜桃网一区二区三区| 欧美一级一区二区| 国产精品每日更新| 麻豆一区二区在线| 色综合一个色综合| 久久久99精品久久| 亚洲影视在线播放| 丰满亚洲少妇av| 6080亚洲精品一区二区| 亚洲欧美在线视频观看| 国产最新精品免费| 欧美日韩成人综合天天影院 | 懂色av一区二区三区蜜臀| 欧美色区777第一页| 欧美激情综合五月色丁香| 亚洲一区二区三区视频在线 | 日本韩国一区二区| 精品国产一区二区三区不卡 | 美女性感视频久久| 色婷婷国产精品久久包臀| 日韩欧美黄色影院| 亚洲五码中文字幕| www.色综合.com| 久久久久国产一区二区三区四区| 国产精品家庭影院| 国产原创一区二区| 欧美精品xxxxbbbb| 亚洲一区二区三区免费视频| 不卡电影一区二区三区| 国产婷婷一区二区| 国产在线看一区| 日韩女优电影在线观看| 美国一区二区三区在线播放| 日韩欧美一级二级三级| 久久精工是国产品牌吗| 精品国产乱码久久久久久影片| 国产综合一区二区| 亚洲国产精品激情在线观看| 国产99久久久国产精品潘金网站| 久久久久久97三级| 成人一级片网址| 中文字幕中文在线不卡住| 91丨porny丨国产| 亚洲狠狠丁香婷婷综合久久久| 色婷婷av一区二区三区软件| 亚洲成人av电影在线| 9191国产精品| 精品一区二区三区视频在线观看| 久久综合久久综合亚洲| 高潮精品一区videoshd| 亚洲精品网站在线观看| 欧美精品一级二级| 国产一区二区三区精品视频| 欧美国产日韩精品免费观看| 91麻豆123| 天天综合网天天综合色| 久久亚洲免费视频| 99精品国产视频| 一区二区日韩电影| 日韩免费观看2025年上映的电影| 国产一区二区三区视频在线播放| 欧美激情艳妇裸体舞| 欧美曰成人黄网| 蜜臀av一区二区| 国产精品无圣光一区二区| 欧美在线影院一区二区| 日本sm残虐另类| 国产精品色噜噜| 欧美日韩在线观看一区二区 | 国产精品77777竹菊影视小说| 国产精品美女一区二区三区| 欧美亚洲国产bt| 国内国产精品久久| 亚洲美女免费视频| 91麻豆精品久久久久蜜臀| 成人sese在线| 日本三级亚洲精品| 国产精品色噜噜| 欧美一区二区三区视频在线| 成人动漫视频在线| 日本成人超碰在线观看| 国产精品福利一区二区三区| 欧美一级片在线看| av午夜精品一区二区三区| 免费人成精品欧美精品| 国产精品不卡在线| 日韩欧美中文字幕精品| 95精品视频在线| 国产资源在线一区| 丝袜亚洲精品中文字幕一区| 中文字幕视频一区二区三区久| 91精品在线观看入口| 91丝袜高跟美女视频| 国产精品综合二区| 日产欧产美韩系列久久99| 中文字幕在线一区免费| 欧美成人一区二区三区片免费| 色综合视频在线观看| 国产精品99久久久| 欧美aaa在线| 一级做a爱片久久| 中文字幕av资源一区| 日韩欧美中文字幕精品| 欧美日韩国产综合久久| 97se亚洲国产综合自在线观| 韩国三级电影一区二区| 亚洲成人激情av| 亚洲欧洲av色图| 日本一区二区三区高清不卡| 日韩欧美一二三区| 欧美精品在线一区二区| 欧美在线啊v一区| 色偷偷成人一区二区三区91| 国产91高潮流白浆在线麻豆| 另类小说视频一区二区| 亚洲高清三级视频| 亚洲精品视频一区二区| 中文字幕日韩精品一区| 亚洲国产精品二十页| 久久久天堂av| 精品奇米国产一区二区三区| 6080午夜不卡| 91麻豆精品国产| 91精品欧美福利在线观看| 欧美妇女性影城| 91精品国产综合久久久久久| 欧美日韩国产综合一区二区三区 |