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

📄 main.c

📁 东南大学开发ARM7芯片SD卡测试程序
💻 C
📖 第 1 页 / 共 3 页
字号:
    SendCmdWaitIdle(0x52a,0x80ff8000,0xfff); //ACMD41
       
    }while(*(RP)SDC_RESPONSE0<0X80008000);

    SendCmdWaitRespIni(0x49,0X0,0X0,0x0,0x0,0Xfff);//CMD2
    
    SendCmdWaitRespIni(0x6a,0X0,0X0,0x0,0x0,0Xfff);//CMD3
    
    rca=*(RP)SDC_RESPONSE0;
    
    SendCmdWaitRespIni(0xea,rca,0X0,0x0,0x0,0Xfff);//CMD7
    
    return rca;   
}

/*************************************************************
* FUNCTION                                                              
*                                                                       
*       void SdSingleW1r1(U32 rca)                                              
*                                                                       
* DESCRIPTION                                                           
*                                                                       
*       单块一位写一位读
*                                                                       
* AUTHOR                                                                
*                                                                       
*       yao                   
*                                                                       
* INPUTS 
*                                                               
*       rca    SD卡的rca地址号                
*                                                                       
* OUTPUTS                                                               
*                                                                       
*       无                  
*                                                                       
*************************************************/
void SdSingleW1r1(U32 rca)
{
	U32 i,complete;
    erase();//擦除
    
    //***********************配置DMA2进行一位写*************************
    *(RP)DMAC_C2SRCADDR  = MEM_BLOCK_BEGIN;
	*(RP)DMAC_C2DESTADDR = SDC_WRITE_BUFER_ACCESS;
	*(RP)DMAC_C2CONTROL  = 0x20149b;  //0x1e149b                                                  				
	*(RP)DMAC_C2CONFIGURATION = 0x380b;								       				 	    
    
   
    //配置SD卡位单线传输模式
    SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
    SendCmdWaitIdle(0xca,0x0,0xfff); //ACMD6
 
    //发送单块写命令   
    SendCmdWaitResp(0x30e,0x00000000,0X2,0x0200,0x1,0Xfff);  //CMD24  1bit mode
    
    complete = *(RP)SDC_INTERRUPT_STATUS;
    
    while((complete |0xfffffffe) !=0xfffffffe)
    {
      printf("CRC ERROR");
      complete = *(RP)SDC_INTERRUPT_STATUS;
    } 
    
    for (i=0;i<500;i++);
    
    //***********************配置DMA2进行一位读*************************						
    *(RP)DMAC_C2SRCADDR  = SDC_READ_BUFER_ACCESS;
	*(RP)DMAC_C2DESTADDR = END(0); 
	*(RP)DMAC_C2CONTROL  = 0x20249b;                                          				
	*(RP)DMAC_C2CONFIGURATION = 0x38d;	
	
	//发送单块读命令 
    SendCmdWaitResp(0x22e,0x00000000,0X0,0x0200,0x1,0Xfff); //CMD17 1bit mode
    complete = *(RP)SDC_INTERRUPT_STATUS;
   
    while((complete |0xfffffffd) !=0xfffffffd)
    {
      printf("CRC ERROR");
      complete = *(RP)SDC_INTERRUPT_STATUS;
    } 
	CompareMem(MEM_BLOCK_BEGIN,END(0),0x200);
}


/*************************************************************
* FUNCTION                                                              
*                                                                       
*       void SdSingleW1r4(U32 rca)                                              
*                                                                       
* DESCRIPTION                                                           
*                                                                       
*       单块一位写四位读
*                                                                       
* AUTHOR                                                                
*                                                                       
*       yao                   
*                                                                       
* INPUTS 
*                                                               
*       rca    SD卡的rca地址号                
*                                                                       
* OUTPUTS                                                               
*                                                                       
*       无                  
*                                                                       
*************************************************/
void SdSingleW1r4(U32 rca)
{
	U32 i,complete;
    erase();//擦除
    //***********************配置DMA1进行一位写*************************
    *(RP)DMAC_C2SRCADDR = MEM_BLOCK_BEGIN;
	*(RP)DMAC_C2DESTADDR = SDC_WRITE_BUFER_ACCESS;
	*(RP)DMAC_C2CONTROL = 0x20149b;  //0x1e149b                                                  				
	*(RP)DMAC_C2CONFIGURATION = 0x380b;								       				 	    
    
    SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
    SendCmdWaitIdle(0xca,0x0,0xfff); //ACMD6
       
    SendCmdWaitResp(0x30e,0x00000000,0X2,0x0200,0x1,0Xfff);  //CMD24  1bit mode
 
 	complete = *(RP)SDC_INTERRUPT_STATUS;
    while((complete |0xfffffffe) !=0xfffffffe)
    {
      printf("CRC ERROR");
      complete = *(RP)SDC_INTERRUPT_STATUS;
    } 
    
    for (i=0;i<5000;i++);
   

    //***********************配置DMA1进行*************************
    *(RP)DMAC_C2SRCADDR  = SDC_READ_BUFER_ACCESS;
	*(RP)DMAC_C2DESTADDR = END(1); 
	*(RP)DMAC_C2CONTROL  = 0x20249b;
	*(RP)DMAC_C2CONFIGURATION = 0x38d;	
	
	SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
	SendCmdWaitIdle(0xca,0x2,0xfff); //ACMD6
   
    //***********************配置DMA1进行四位读*************************						
    SendCmdWaitResp(0x22e,0x00000000,0X1,0x0200,0x1,0Xfff); //CMD17 4bit mode
    complete = *(RP)SDC_INTERRUPT_STATUS;
    while((complete |0xfffffffd) !=0xfffffffd)
    {
      printf("CRC ERROR");
      complete = *(RP)SDC_INTERRUPT_STATUS;
    } 
	CompareMem(MEM_BLOCK_BEGIN,END(1),0x200);
    
}

/*************************************************************
* FUNCTION                                                              
*                                                                       
*       void SdSingleW4r1(U32 rca)                                              
*                                                                       
* DESCRIPTION                                                           
*                                                                       
*       单块四位写一位读
*                                                                       
* AUTHOR                                                                
*                                                                       
*       yao                   
*                                                                       
* INPUTS 
*                                                               
*       rca    SD卡的rca地址号                
*                                                                       
* OUTPUTS                                                               
*                                                                       
*       无                  
*                                                                       
*************************************************/
void SdSingleW4r1(U32 rca)
{
	U32 i,complete;
    erase();//擦除
    //***********************配置DMA1进行一位写*************************
    *(RP)DMAC_C2SRCADDR  = MEM_BLOCK_BEGIN;
	*(RP)DMAC_C2DESTADDR = SDC_WRITE_BUFER_ACCESS;
	*(RP)DMAC_C2CONTROL  = 0x20149b;  //0x1e149b                                                  				
	*(RP)DMAC_C2CONFIGURATION = 0x380b;								       				 	    
    
    
    SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
    SendCmdWaitIdle(0xca,0x2,0xfff); //ACMD6
    
  
    SendCmdWaitResp(0x30e,0x00000000,0X3,0x0200,0x1,0Xfff);  //CMD24  1bit mode
    
 
    complete = *(RP)SDC_INTERRUPT_STATUS;
    while((complete |0xfffffffe) !=0xfffffffe)
    {
      printf("CRC ERROR");
      complete = *(RP)SDC_INTERRUPT_STATUS;
    } 
 	
 
    for (i=0;i<5000;i++);
   
   
    *(RP)DMAC_C2SRCADDR  = SDC_READ_BUFER_ACCESS;
	*(RP)DMAC_C2DESTADDR = END(2); 
	*(RP)DMAC_C2CONTROL  = 0x20249b;//0x2024ad;//                                                  				
	*(RP)DMAC_C2CONFIGURATION = 0x38d;	
	
	
	SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
    SendCmdWaitIdle(0xca,0x0,0xfff); //ACMD6
    
   
    //***********************配置DMA1进行一位读*************************						
    SendCmdWaitResp(0x22e,0x00000000,0X0,0x0200,0x1,0Xfff); //CMD17 1bit mode
    complete = *(RP)SDC_INTERRUPT_STATUS;
    while((complete |0xfffffffd) !=0xfffffffd)
    {
      printf("CRC ERROR");
      complete = *(RP)SDC_INTERRUPT_STATUS;
    } 
  	CompareMem(MEM_BLOCK_BEGIN,END(2),0x200);
    for (i=0;i<10000;i++);
}

/*************************************************************
* FUNCTION                                                              
*                                                                       
*       void SdSingleW4r4(U32 rca)                                              
*                                                                       
* DESCRIPTION                                                           
*                                                                       
*       单块四位写四位读
*                                                                       
* AUTHOR                                                                
*                                                                       
*       yao                   
*                                                                       
* INPUTS 
*                                                               
*       rca    SD卡的rca地址号                
*                                                                       
* OUTPUTS                                                               
*                                                                       
*       无                  
*                                                                       
*************************************************/
void SdSingleW4r4(U32 rca)
{
	U32 i,complete;
    erase();//擦除
    //***********************配置DMA1进行一位写*************************
    *(RP)DMAC_C2SRCADDR  = MEM_BLOCK_BEGIN;
	*(RP)DMAC_C2DESTADDR = SDC_WRITE_BUFER_ACCESS;
	*(RP)DMAC_C2CONTROL  = 0x20149b;  //0x1e149b                                                  				
	*(RP)DMAC_C2CONFIGURATION = 0x380b;								       				 	    
    
    SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
    SendCmdWaitIdle(0xca,0x2,0xfff); //ACMD6
    
    SendCmdWaitResp(0x30e,0x00000000,0X3,0x0200,0x1,0Xfff);  //CMD24  1bit mode
    
    complete = *(RP)SDC_INTERRUPT_STATUS;
    while ((complete & 0x00000040) != 0x00000040)
    {
      complete = *(RP)SDC_INTERRUPT_STATUS;
    } 
    
    while((complete |0xfffffffe) != 0xfffffffe)
    {
      printf("CRC ERROR");
      complete = *(RP)SDC_INTERRUPT_STATUS;
    } 
 
    for (i=0;i<5000;i++);
   
   
    *(RP)DMAC_C2SRCADDR  = SDC_READ_BUFER_ACCESS;
	*(RP)DMAC_C2DESTADDR = END(3); 
	*(RP)DMAC_C2CONTROL  = 0x20249b;//0x2024ad;//                                                  				
	*(RP)DMAC_C2CONFIGURATION = 0x38d;	
	
	SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
    SendCmdWaitIdle(0xca,0x2,0xfff); //ACMD6
   
    //***********************配置DMA1进行一位读*************************						
    SendCmdWaitResp(0x22e,0x00000000,0X1,0x0200,0x1,0Xfff); //CMD17 1bit mode
    complete = *(RP)SDC_INTERRUPT_STATUS;
    while((complete |0xfffffffd) != 0xfffffffd)
    {
      printf("CRC ERROR");
      complete = *(RP)SDC_INTERRUPT_STATUS;
    } 
    CompareMem(MEM_BLOCK_BEGIN,END(3),0x200);
}

/*************************************************************
* FUNCTION                                                              
*                                                                       
*       void SdMultiW1r1(U32 rca)                                              
*                                                                       
* DESCRIPTION                                                           
*                                                                       
*       多块一位写一位读
*                                                                       
* AUTHOR                                                                
*                                                                       
*       yao                   
*                                                                       
* INPUTS 
*                                                               
*       rca    SD卡的rca地址号                
*                                                                       
* OUTPUTS                                                               
*                                                                       
*       无                  
*                                                                       
*************************************************/
void SdMultiW1r1(U32 rca)
{
	U32 i,complete;
    erase();//擦除
    //***********************配置DMA1进行一位写*************************
    *(RP)DMAC_C2SRCADDR = MEM_BLOCK_BEGIN;
	*(RP)DMAC_C2DESTADDR = SDC_WRITE_BUFER_ACCESS;
	*(RP)DMAC_C2CONTROL = 0x80149b;                                             				
	*(RP)DMAC_C2CONFIGURATION = 0x380b;								       				 	    
  
    SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55
    SendCmdWaitIdle(0xca,0x0,0xfff); //ACMD6         配置传输模式为单线模式
      
    SendCmdWaitResp(0x32e,0,0X2,0x0200,0x4,0Xfff);   // CMD25 多块写命令 1bit mode
    
    SendCmdWaitIdle(0x18a,0x0,0xfff); //stop CMD12  多块传输需要发送stop命令以停止传输
    
    complete = *(RP)SDC_INTERRUPT_STATUS;
    while((complete |0xfffffffe) != 0xfffffffe)
    {
      printf("CRC ERROR");
      complete = *(RP)SDC_INTERRUPT_STATUS;
    } 
    
    //***********************配置DMA1进行一位读*************************	
    *(RP)DMAC_C2SRCADDR  = SDC_READ_BUFER_ACCESS;
	*(RP)DMAC_C2DESTADDR = END(4); 
	*(RP)DMAC_C2CONTROL  = 0x80249b;                                           				
	*(RP)DMAC_C2CONFIGURATION = 0x38d;	
	
	SendCmdWaitIdle(0x6ea,rca,0xfff);//CMD55

⌨️ 快捷键说明

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