SDIO如何控制多个卡

2019-07-21 03:02发布

同时接多个卡,官方例程要怎么改?广播命令的时候,响应同时传回如何接收吗?
SD_Error SD_InitializeCards(void)
{
  SD_Error errorstatus=SD_OK;
u16 rca = 0x01;
  if((SDIO->POWER&0X03)==0)return SD_REQUEST_NOT_APPLICABLE;//检查电源状态,确保为上电状态
  if(SDIO_SECURE_DIGITAL_IO_CARD!=CardType)   //非SECURE_DIGITAL_IO_CARD
{
  SDIO_Send_Cmd(SD_CMD_ALL_SEND_CID,3,0);   //发送CMD2,取得CID,长响应  
  errorstatus=CmdResp2Error();      //等待R2响应   
  if(errorstatus!=SD_OK)return errorstatus;    //响应错误      
   CID_Tab[0]=SDIO->RESP1;
  CID_Tab[1]=SDIO->RESP2;
  CID_Tab[2]=SDIO->RESP3;
  CID_Tab[3]=SDIO->RESP4;
}
if((SDIO_STD_CAPACITY_SD_CARD_V1_1==CardType)||(SDIO_STD_CAPACITY_SD_CARD_V2_0==CardType)||(SDIO_SECURE_DIGITAL_IO_COMBO_CARD==CardType)||(SDIO_HIGH_CAPACITY_SD_CARD==CardType))//判断卡类型
{
  SDIO_Send_Cmd(SD_CMD_SET_REL_ADDR,1,0);   //发送CMD3,短响应
  errorstatus=CmdResp6Error(SD_CMD_SET_REL_ADDR,&rca);//等待R6响应
  if(errorstatus!=SD_OK)return errorstatus;    //响应错误      
}   
    if (SDIO_MULTIMEDIA_CARD==CardType)
    {
   SDIO_Send_Cmd(SD_CMD_SET_REL_ADDR,1,(u32)(rca<<16));//发送CMD3,短响应     
  errorstatus=CmdResp2Error();      //等待R2响应   
  if(errorstatus!=SD_OK)return errorstatus;    //响应错误  
    }
if (SDIO_SECURE_DIGITAL_IO_CARD!=CardType)   //非SECURE_DIGITAL_IO_CARD
{
  RCA = rca;
  SDIO_Send_Cmd(SD_CMD_SEND_CSD,3,(u32)(rca<<16));//发送CMD9+卡RCA,取得CSD,长响应     
  errorstatus=CmdResp2Error();      //等待R2响应   
  if(errorstatus!=SD_OK)return errorstatus;    //响应错误      
    CSD_Tab[0]=SDIO->RESP1;
  CSD_Tab[1]=SDIO->RESP2;
  CSD_Tab[2]=SDIO->RESP3;      
  CSD_Tab[3]=SDIO->RESP4;         
}
return SD_OK;//卡初始化成功
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。