STM32 SDIO 通信问题
我调程序时,CMD0可以正常,但CMD8超时,一般会因为什么原因造成这种情况!请赐教RE:STM32 SDIO
这是我的部分程序,请大家指教int main(void)
{
#ifdef DEBUG
debug();
#endif
// Interrupt Config
NVIC_Configuration();
/////////////////////////////////////////////////////////////////////
//////// SDCARD Initialisation //////////////////////////////////////
/////////////////Section adapted from ST example/////////////////////
/*-------------------------- SD Init ----------------------------- */
Status = SD_Init();
if (Status == SD_OK)
{
/*----------------- Read CSD/CID MSD registers ------------------*/
Status = SD_GetCardInfo(&SDCardInfo);
}
if (Status == SD_OK)
{
/*----------------- Select Card --------------------------------*/
Status = SD_SelectDeselect((u32) (SDCardInfo.RCA > 31) == 1) ? 1 : 0);
count++;
}
if (count >= SD_MAX_VOLT_TRIAL)
{
errorstatus = SD_INVALID_VOLTRANGE;
return(errorstatus);
}
if (response &= SD_HIGH_CAPACITY)
{
CardType = SDIO_HIGH_CAPACITY_SD_CARD;
}
}/* else MMC Card */
return(errorstatus);
}
static void GPIO_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
/* Enable the SDIO AHB Clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE);
/* GPIOC and GPIOD Periph clock enable */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD, ENABLE);
GPIO_PinAFConfig(GPIOC,GPIO_PinSource8|GPIO_PinSource9|GPIO_PinSource10|GPIO_PinSource11|GPIO_PinSource12,GPIO_AF_SDIO);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource2,GPIO_AF_SDIO);
/* Configure PC.08, PC.09, PC.10, PC.11, PC.12 pin: D0, D1, D2, D3, CLK pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* Configure PD.02 CMD line */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
RE:STM32 SDIO
有可能这里没写好,我的试过读几次都是0x01,1)最好在SPI_ReadWriteByte(crc);之后把这时接受到的垃圾数据取走,因为SPI是双向通信,每一个发送同时都会收到一个数据。
2)最好在CS设置高后发送8一个DUMMY字节。
回复:STM32 SDIO
回复第 3 楼 于2011-09-14 01:54:07发表:有可能这里没写好,我的试过读几次都是0x01,
1)最好在SPI_ReadWriteByte(crc);之后把这时接受到的垃圾数据取走,因为SPI是双向通信,每一个发送同时都会收到一个数据。
2)最好在CS设置高后发送8一个DUMMY字节。
您好!我采用的SDIO方式,程序里没有SPI_ReadWriteByte(crc);这个函数啊,还有程序中没有给CS置高啊
问题幼稚,见谅!
RE:STM32 SDIO
下面这段代码,你把CMD8都屏蔽掉了。/* CMD8: SEND_IF_COND --------------------------------------------------------*/
/* Send CMD8 to verify SD card interface operating condition */
/* Argument: - : Reserved (shall be set to '0')
- : Supply Voltage (VHS) 0x1 (Range: 2.7-3.6 V)
- : Check Pattern (recommended 0xAA) */
/* CMD Response: R7 */
// SDIO_CmdInitStructure.SDIO_Argument = SD_CHECK_PATTERN;
// SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SEND_IF_COND;
// SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
// SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
// SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
// for(;i < 74; i++)
// { }
// SDIO_SendCommand(&SDIO_CmdInitStructure);
// errorstatus = CmdResp7Error(); //errorstatus is SD_CMD_RSP_TIMEOUT
回复:STM32 SDIO
之前调试时没屏蔽,不好意思,后来想屏蔽下试试,但后面的CMD55还是一样出问题,也是超时,我刚测我的CLK也就是PC12脚没有波形输出,是不是这个问题?怎么解决呢?1.没屏蔽时CMD8超时
2.SDIO_CLK没时钟输出
回复:STM32 SDIO
回复第 5 楼 于2011-09-14 06:37:38发表:下面这段代码,你把CMD8都屏蔽掉了。
/* CMD8: SEND_IF_COND --------------------------------------------------------*/
/* Send CMD8 to verify SD card interface operating condition */
/* Argument: - : Reserved (shall be set to '0')
- : Supply Voltage (VHS) 0x1 (Range: 2.7-3.6 V)
- : Check Pattern (recommended 0xAA) */
/* CMD Response: R7 */
// SDIO_CmdInitStructure.SDIO_Argument = SD_CHECK_PATTERN;
// SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SEND_IF_COND;
// SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
// SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
// SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
// for(;i < 74; i++)
// { }
// SDIO_SendCommand(&SDIO_CmdInitStructure);
// errorstatus = CmdResp7Error(); //errorstatus is SD_CMD_RSP_TIMEOUT
之前调试时没屏蔽,不好意思,后来想屏蔽下试试,但后面的CMD55还是一样出问题,也是超时,我刚测我的CLK也就是PC12脚没有波形输出,是不是这个问题?怎么解决呢?
1.没屏蔽时CMD8超时
2.SDIO_CLK没时钟输出
RE:STM32 SDIO
没有开启SDIO的时钟。你开启试试。RCC_AHBPeriphClockCmd(RCC_RCC_AHBPeriph_SDIO, ENABLE);
RE:STM32 SDIO
CMD0只是复位SD卡,而并不是通信。所以这个问题还是通信的问题。回复:STM32 SDIO
回复第 9 楼 于2011-09-14 08:09:40发表:CMD0只是复位SD卡,而并不是通信。所以这个问题还是通信的问题。
我用的是207的板子,RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE);开时钟,可为什么打不开呢?:funk:
页:
[1]
2