目录
1.实验目标
本实验使用SDIOC一线式读取SD卡相关信息并打印到USB-UART,同时将SD卡容量显示到TFT。等待KEY1按下进入第0区块读取.将读取结果打印到USB-UART同时在TFT显示状态提示。
2.实验准备
硬件搭建:ZW-HC32F460-BZ标准版开发板1套
软件搭建:MDK5.22
3.硬件原理
HC32F460开发板板载的SD卡座支持SD和SPI模式,SD模式支持1线和4线方式传输数据,SPI模式相对于SD模式速度要慢一点,本次实验采用的是SD模式实验1线方式传输数据。
4.驱动代码
【SD初始化函数】
函数原型: u8 Sdio_Sd_int( void )
功能说明: SD卡SDIO模式初始化
输入参数: 无
输出参数: 0为成功,其它为不成功
特殊备注: 无
u8 Sdio_Sd_int( void )
{
en_result_t enTestResult = Ok;
stc_sdcard_init_t stcCardInitCfg =
{
(en_sdioc_bus_width_t)SDIO_BUS_WIDTH,
(en_sdioc_clk_freq_t)SDIO_CLK_FREQ,
(en_sdioc_speed_mode_t)SDIO_SPEED_MODE,
NULL,
};
SdioInitPins();
MEM_ZERO_STRUCT( stcSdhandle );
stcSdhandle.SDIOCx = SDIOC_UNIT;
if ( Ok != SDCARD_Init( &stcSdhandle, &stcCardInitCfg ) )
{
enTestResult = Error;
}
return (u8)(enTestResult);
}
【TFT与SD卡共用脚处理函数】
函数原型: void SdioCmdPinFuc( en_port_func_t fuc )
功能说明: TFT与SD卡共用脚处理
输入参数: 引脚功能
输出参数: 无
特殊备注: 无
void SdioCmdPinFuc( en_port_func_t fuc )
{
PORT_SetFunc( (en_port_t)SDIOC_CMD_PORT, SDIOC_CMD_PIN, fuc, Disable);
}
由于SDIOC的CMD引脚是与LCD的D2引脚共用的,所以使用相应功能时,需要切换对应的引脚功能。
【获取SD卡信息函数】
函数原型: void Sdio_Sd_info_printf( void )
功能说明: 在SDIO模式下获取SD信息
输入参数: 无
输出参数: 无
特殊备注: 无
void Sdio_Sd_info_printf( void )
{
stc_sd_card_info_t *sdInfo;
sdInfo = &stcSdhandle.stcSdCardInfo;
SDCardInfo.CardBlockSize = sdInfo->u32BlockSize;
SDCardInfo.CardCapacity = (long long)sdInfo->u32BlockNbr;
SDCardInfo.CardCapacity *= SDCardInfo.CardBlockSize;
switch( sdInfo->u32CardType )
{
case SDIO_STD_CAPACITY_SD_CARD_V1_1:
DDL_Printf( "Card Type:SDSC V1.1\r\n" );
break;
case SDIO_STD_CAPACITY_SD_CARD_V2_0: