国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

stm32讀寫SD卡(SDIO模式)

這篇具有很好參考價值的文章主要介紹了stm32讀寫SD卡(SDIO模式)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、SD卡簡介

二、源碼下載

三、移植條件

1、芯片參數(shù)

2、硬件連接

四、驅(qū)動代碼

1、依賴宏如下

2、驅(qū)動代碼實(shí)現(xiàn)

3、測試代碼

4、運(yùn)行截圖

五、總結(jié)


一、SD卡簡介

SD卡有SDIO驅(qū)動模式和SPI驅(qū)動模式,本例中使用SDIO模式驅(qū)動SD卡。

二、源碼下載

https://download.csdn.net/download/qq_30095023/88702705https://download.csdn.net/download/qq_30095023/88702705

三、移植條件

1、芯片參數(shù)

芯片類型:STM32F407ZGT6。

flash大小為1024KB,RAM大小 128KB。

2、硬件連接

本例使用開發(fā)板上的SD卡插口,測試所用SD卡容量大小為8GB。

stm32讀寫SD卡(SDIO模式),stm32,嵌入式硬件,單片機(jī)

stm32讀寫SD卡(SDIO模式),stm32,嵌入式硬件,單片機(jī)

四、驅(qū)動代碼

note: u8 、u16、u32等為自定義數(shù)據(jù)類型,編譯報(bào)錯請按需修改。LOG_XX為日志打印,請按需替換。

1、依賴宏如下

定義一些SD卡的類型

//SD卡類型
#define ERR         0x00
#define MMC         0x01
#define V1          0x02
#define V2          0x04
#define V2HC        0x06

2、驅(qū)動代碼實(shí)現(xiàn)


1)、ENTER_SD_BLOCK_SIZE定義SD卡的物理扇區(qū)大小為512Byte。

2)、 函數(shù)b_sd_read_write_byte用來讀寫數(shù)據(jù)(兼容SPI模式,忽略)。

3)、函數(shù)b_sd_read_data用來從SD卡讀取指定長度的數(shù)據(jù)。

4)、函數(shù)b_sd_send_block_data用來向SD卡寫入數(shù)據(jù)。

5)、函數(shù)b_sd_init用來初始化SD卡,需要在使用SD卡前調(diào)用一次。

6)、函數(shù)b_sd_get_cid用來查詢SD卡的CID。

7)、函數(shù)b_sd_get_csd用來查詢SD卡的CSD。

8)、函數(shù)b_sd_read_sector用來讀扇區(qū)數(shù)據(jù),該接口一般用于FatFs文件系統(tǒng)。

9)、函數(shù)b_sd_write_sector用來寫扇區(qū)數(shù)據(jù),該接口一般用于FatFs文件系統(tǒng)。

FatFs文件系統(tǒng)移植請參考:FatFs移植到STM32(SD卡)_BIN-XYB的博客-CSDN博客

10)、函數(shù)b_sd_get_sector_number用來查詢SD卡的扇區(qū)數(shù)量。

11)、函數(shù)b_sd_sync_data用來保存SD卡的數(shù)據(jù)。

完整源碼如下:

#include "sd_driver.h"

static u8 sd_type = 0;
#define ENTER_SD_BLOCK_SIZE      (512)
#define ENTER_SD_SECTOR_SIZE     (ENTER_SD_BLOCK_SIZE)

inline void b_sd_set_speed(u32 speed)
{
    return;
}

u8 b_sd_init(void)
{
    if(HAL_SD_GetCardState(&hsd) == HAL_SD_CARD_TRANSFER)
    {
        HAL_SD_CardInfoTypeDef sdcard_info;
        HAL_SD_GetCardInfo(&hsd, &sdcard_info);
        sd_type = sdcard_info.CardType;
        return HAL_OK;
    }
    else
    {
        return HAL_ERROR;
    }
}

u8 b_sd_get_cid(u8* cid_data)
{
    if(HAL_SD_GetCardState(&hsd) == HAL_SD_CARD_TRANSFER)
    {
        HAL_SD_CardCIDTypeDef sdcard_cid;
        HAL_SD_GetCardCID(&hsd,&sdcard_cid);
        memcpy(cid_data, hsd.CID, 16);
    }
    else
    {
        return HAL_ERROR;
    }
    return HAL_OK;
}

u8 b_sd_get_csd(u8 *csd_data)
{
    if(HAL_SD_GetCardState(&hsd) == HAL_SD_CARD_TRANSFER)
    {
        HAL_SD_CardCSDTypeDef sdcard_csd;
        HAL_SD_GetCardCSD(&hsd,&sdcard_csd);
        memcpy(csd_data, hsd.CSD, 16);
    }
    else
    {
        return HAL_ERROR;
    }
    return HAL_OK;
}

s32 b_sd_read_sector(u32 sector, u8 number, u8*data, u32 timeout)
{
    sector <<= 9;
    if(HAL_SD_ReadBlocks(&hsd, data, sector, number, number * 10) == HAL_OK)
    {
        while(HAL_SD_GetCardState(&hsd) != HAL_SD_CARD_TRANSFER){};
    }
    else
    {
        return HAL_ERROR;
    }
    return HAL_OK;
}


s32 b_sd_write_sector(u32 sector, u8 number, u8 *data, u32 timeout)
{
    sector <<= 9;
    if(HAL_SD_WriteBlocks(&hsd, data, sector, number, number * 10) == HAL_OK)
    {
        while(HAL_SD_GetCardState(&hsd) != HAL_SD_CARD_TRANSFER){};
    }
    else
    {
        return HAL_ERROR;
    }
    return HAL_OK;
}

u32 b_sd_get_sector_number(void)
{
    u32 capacity = 0;

    if(HAL_SD_GetCardState(&hsd) == HAL_SD_CARD_TRANSFER)
    {
        HAL_SD_CardInfoTypeDef sdcard_info;
        HAL_SD_GetCardInfo(&hsd, &sdcard_info);
        capacity = sdcard_info.BlockNbr;
    }
    else
    {
        return HAL_ERROR;
    }
    return capacity;
}

u32 b_sd_get_sector_size(void)
{
    return ENTER_SD_SECTOR_SIZE;
}

u32 b_sd_get_block_size(void)
{
    return ENTER_SD_BLOCK_SIZE;
}

u32 b_sd_sync_data(void)
{
    return 0;
}

u8 b_sd_read_write_byte(u8 tx_data)
{
    u8 rx_data = 0;
    return rx_data;
}

3、測試代碼

void b_sd_test_demo(void)
{
    static u8 test_buffer[ENTER_SD_SECTOR_SIZE] = {0};
    LOG_INFO("start b_sd_init\r\n");
    u8 ret = b_sd_init();
    u8 *p = test_buffer;
    LOG_INFO("b_sd_init:%d\r\n", sd_type);
    
    memset(test_buffer, 0, ENTER_SD_SECTOR_SIZE);
    ret = b_sd_get_cid(test_buffer);
    LOG_INFO("cid:%02X,%02X,%02X,%02X\r\n", p[0],p[1],p[2],p[3]);
    LOG_INFO("cid:%02X,%02X,%02X,%02X\r\n", p[4],p[5],p[6],p[7]);
    LOG_INFO("cid:%02X,%02X,%02X,%02X\r\n", p[8],p[9],p[10],p[11]);
    LOG_INFO("cid:%02X,%02X,%02X,%02X\r\n", p[12],p[13],p[14],p[15]);
    LOG_INFO("b_sd_get_cid:%d\r\n", ret);
    
    memset(test_buffer, 0, ENTER_SD_SECTOR_SIZE);
    ret = b_sd_get_csd(test_buffer);
    LOG_INFO("csd:%02X,%02X,%02X,%02X\r\n", p[0],p[1],p[2],p[3]);
    LOG_INFO("csd:%02X,%02X,%02X,%02X\r\n", p[4],p[5],p[6],p[7]);
    LOG_INFO("csd:%02X,%02X,%02X,%02X\r\n", p[8],p[9],p[10],p[11]);
    LOG_INFO("csd:%02X,%02X,%02X,%02X\r\n", p[12],p[13],p[14],p[15]);
    LOG_INFO("b_sd_get_csd:%d\r\n", ret);

    u32 num = b_sd_get_sector_number();
    LOG_INFO("b_sd_get_sector_number:%d\r\n", num);
    LOG_INFO("sd_type:%d\r\n", sd_type);
}

4、運(yùn)行截圖

stm32讀寫SD卡(SDIO模式),stm32,嵌入式硬件,單片機(jī)

如上圖所示,可以成功讀取到SD卡cid和csd。

五、總結(jié)

如有問題請指出,感謝!文章來源地址http://www.zghlxwxcb.cn/news/detail-821757.html

到了這里,關(guān)于stm32讀寫SD卡(SDIO模式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 嵌入式硬件——stm32F103C8T6

    嵌入式硬件——stm32F103C8T6

    如下圖:? ? 處理器核心:STM32F103C8T6內(nèi)置了ARM Cortex-M3處理器,這是一種高性能、低功耗的32位RISC處理器,適用于嵌入式系統(tǒng)。 時鐘速度:它可以工作在不同的時鐘速度,最高主頻可達(dá)72 MHz。 存儲器:包括64KB的Flash程序存儲器用于存儲程序代碼,以及20KB的SRAM用于存儲數(shù)據(jù)和

    2024年02月05日
    瀏覽(125)
  • 嵌入式畢設(shè)分享 stm32人臉識別快遞柜系統(tǒng)(源碼+硬件+論文)

    嵌入式畢設(shè)分享 stm32人臉識別快遞柜系統(tǒng)(源碼+硬件+論文)

    ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年04月10日
    瀏覽(150)
  • 嵌入式畢設(shè)分享 stm32 RFID智能倉庫管理系統(tǒng)(源碼+硬件+論文)

    嵌入式畢設(shè)分享 stm32 RFID智能倉庫管理系統(tǒng)(源碼+硬件+論文)

    ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月20日
    瀏覽(96)
  • 嵌入式畢設(shè)分享 stm32智能魚缸監(jiān)控投喂系統(tǒng)(源碼+硬件+論文)

    嵌入式畢設(shè)分享 stm32智能魚缸監(jiān)控投喂系統(tǒng)(源碼+硬件+論文)

    ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年03月17日
    瀏覽(30)
  • STM32CubeMX系列09——SDIO(SD卡讀寫、SD卡移植FATFS文件系統(tǒng))

    STM32CubeMX系列09——SDIO(SD卡讀寫、SD卡移植FATFS文件系統(tǒng))

    ==== 文章匯總(有代碼匯總) ==== 準(zhǔn)備看看這方面的知識,一時間還沒不清有什么區(qū)別,先補(bǔ)補(bǔ)課,不需要的跳過。 參考文章(內(nèi)容來源):http://www.360doc.com/content/21/1125/22/59057945_1005908465.shtml 主要寫這兩個:SD卡、TF卡 共同點(diǎn):SD、TF、MMC都是在MMC基礎(chǔ)上演化發(fā)展不同的規(guī)范,

    2024年02月09日
    瀏覽(25)
  • STM32CubeMX教程28 SDIO - 使用FatFs文件系統(tǒng)讀寫SD卡

    正點(diǎn)原子stm32f407探索者開發(fā)板V2.4 STM32CubeMX軟件(Version 6.10.0) keil μVision5 IDE(MDK-Arm) ST-LINK/V2驅(qū)動 野火DAP仿真器 XCOM V2.6串口助手 使用STM32CubeMX軟件配置STM32F407開發(fā)板 SDIO使用FatFs中間件讀寫4線SD卡,并實(shí)現(xiàn)以輪詢方式讀寫SD卡或以DMA方式讀取SD卡 FatFs文件系統(tǒng)相關(guān)知識請讀者

    2024年02月19日
    瀏覽(30)
  • 【嵌入式】STM32計(jì)時器編碼器接口模式使用

    【嵌入式】STM32計(jì)時器編碼器接口模式使用

    使用STM32調(diào)試電機(jī)或傳感器時經(jīng)常會使用到計(jì)數(shù)器的編碼器接口模式,本文主要記錄該模式的固件庫配置方法,并給出使用該模式獲取光柵測距值的實(shí)例。 硬件: STM32F103C8T6 光柵測距傳感器 編碼器接口模式為STM32計(jì)時器的一種特殊使用模式,該模式下可對編碼器輸出的脈沖信

    2024年02月20日
    瀏覽(20)
  • 嵌入式-Stm32-江科大基于標(biāo)準(zhǔn)庫的GPIO的八種模式

    嵌入式-Stm32-江科大基于標(biāo)準(zhǔn)庫的GPIO的八種模式

    (推薦先看文章:《 嵌入式-32單片機(jī)-GPIO推挽輸出和開漏輸出》) 下文圖都是從參考手冊借閱:STM32F10xxx(中文),大概頁數(shù)是110/775左右 GPIO (General Purpose Input Output)通用輸入輸出口 可配置為8種輸入輸出模式 引腳電平:0V~3.3V,部分引腳可容忍5V(有FT標(biāo)識) 輸出模式 下可控

    2024年01月20日
    瀏覽(94)
  • stm32在SDIO模式下SD寫入錯誤的問題

    stm32在SDIO模式下SD寫入錯誤的問題

    1、問題描述 使用FAT32 f_write 多次執(zhí)行寫操作時,會報(bào)FR_DISK_ERR錯誤,而且是剛開始寫不報(bào)錯,寫幾次后會一直報(bào)錯。 設(shè)斷點(diǎn)跟蹤到HAL_SD_WriteBlocks中,在調(diào)用SDMMC_CmdWriteMultiBlock時,會報(bào)SDMMC_ERROR_TX_UNDERRUN,意思 是Transmit FIFO underrun 2、原因分析 如下圖所示,SDMMC開始寫操作時,首

    2023年04月24日
    瀏覽(31)
  • STM32 PWM模式與輸出比較模式的區(qū)別。PWM占空比不生效,在STM32CubeMX中配置PWM的兩種模式——藍(lán)橋杯嵌入式

    STM32 PWM模式與輸出比較模式的區(qū)別。PWM占空比不生效,在STM32CubeMX中配置PWM的兩種模式——藍(lán)橋杯嵌入式

    ? ??【藍(lán)橋杯嵌入式】專題正在持續(xù)更新中,原理圖解析?,各模塊分析?以及歷年真題講解?都已更新完畢,歡迎大家前往訂閱本專題?? ??【藍(lán)橋杯嵌入式】藍(lán)橋杯第十屆省賽真題 ??【藍(lán)橋杯嵌入式】藍(lán)橋杯第十二屆省賽程序真題 ??【藍(lán)橋杯嵌入式】藍(lán)橋杯第十三屆

    2023年04月15日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包