国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于庫函數的SD卡硬件驅動層代碼實現方案

嵌入式應用開發 ? 來源:嵌入式應用開發 ? 作者:嵌入式應用開發 ? 2022-06-14 17:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式開發中經常會用到對外部SD卡進行相關的讀寫操作。下圖是CPU硬件連接示意圖

poYBAGKoTYqAQogKAAKby66bF-c220.pngCPU硬件連接

引腳配置瑞如下:

void SD_LowLevel_DeInit(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  
  /*!< Disable SDIO Clock */
  SDIO_ClockCmd(DISABLE);

  /*!< Set Power State to OFF */
  SDIO_SetPowerState(SDIO_PowerState_OFF);

  /*!< DeInitializes the SDIO peripheral */
  SDIO_DeInit();

  /*!< Disable the SDIO AHB Clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, DISABLE);

  /*!< 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_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /*!< Configure PD.02 CMD line */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
}

DMA部分配置如下:

void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize)
{

  DMA_InitTypeDef DMA_InitStructure;

  DMA_ClearFlag(SD_SDIO_DMA_FLAG_TC | SD_SDIO_DMA_FLAG_TE | SD_SDIO_DMA_FLAG_HT | SD_SDIO_DMA_FLAG_GL);

  /*!< DMA2 Channel4 disable */
  DMA_Cmd(SD_SDIO_DMA_CHANNEL, DISABLE);

  /*!< SDIO DMA CHANNEL Config */
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDIO_FIFO_ADDRESS;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)BufferSRC;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
  DMA_InitStructure.DMA_BufferSize = BufferSize / 4;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(SD_SDIO_DMA_CHANNEL, &DMA_InitStructure);

  DMA_ITConfig(SD_SDIO_DMA_CHANNEL, DMA_IT_TC, ENABLE);

  /*!< SDIO DMA CHANNEL enable */
  DMA_Cmd(SD_SDIO_DMA_CHANNEL, ENABLE);  
}



void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize)
{
  DMA_InitTypeDef DMA_InitStructure;

  DMA_ClearFlag(SD_SDIO_DMA_FLAG_TC | SD_SDIO_DMA_FLAG_TE | SD_SDIO_DMA_FLAG_HT | SD_SDIO_DMA_FLAG_GL);

  /*!< SDIO DMA CHANNEL disable */
  DMA_Cmd(SD_SDIO_DMA_CHANNEL, DISABLE);

  /*!< SDIO DMA CHANNEL Config */
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDIO_FIFO_ADDRESS;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)BufferDST;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  DMA_InitStructure.DMA_BufferSize = BufferSize / 4;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(SD_SDIO_DMA_CHANNEL, &DMA_InitStructure);

  DMA_ITConfig(SD_SDIO_DMA_CHANNEL, DMA_IT_TC, ENABLE);

  /*!< SDIO DMA CHANNEL enable */
  DMA_Cmd(SD_SDIO_DMA_CHANNEL, ENABLE);  
}


  
  

uint32_t SD_DMAEndOfTransferStatus(void)
{
  return (uint32_t)DMA_GetFlagStatus(DMA2_FLAG_TC4);
}

SDIO函數中斷部分

///sd卡狀態判斷
void SDCARD_Config(void)
{
	SD_Error Status = SD_OK;
	Status = SD_Init();	        //初始化SDIO
	if (Status != SD_OK)
	{
		Display_ErrorWithoutSD((u8 *)"No_SDCard");
	}
	SDCARD_NVIC_Config();	
}



//中斷配置 部分

void SDCARD_NVIC_Config(void)
{
	NVIC_InitTypeDef NVIC_InitStructure;

	/* Configure the NVIC Preemption Priority Bits */
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

	NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
}



中斷函數
void SDIO_IRQHandler(void)
{
	/* Process All SDIO Interrupt Sources */
	SD_ProcessIRQSrc();
}

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5198

    文章

    20442

    瀏覽量

    333966
  • SD卡
    +關注

    關注

    2

    文章

    589

    瀏覽量

    68683
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    ESP32 驅動瀚海微SD NAND 完整方案 + FAT/FAT32 驅動核心區別

    ESP32?驅動 SD NAND?的核心是基于SDIO?接口(SD NAND?主流通信方式,兼容 SPI?但速率更高),借助樂鑫官方esp-idf框架的SDMMC?驅動
    的頭像 發表于 02-02 11:38 ?238次閱讀
    ESP32 <b class='flag-5'>驅動</b>瀚海微<b class='flag-5'>SD</b> NAND 完整<b class='flag-5'>方案</b> + FAT/FAT32 <b class='flag-5'>驅動</b>核心區別

    SD多設備高頻切換讀寫沖突:問題、場景與成因深度解析

    讀寫場景中,讀寫沖突問題頻發,嚴重影響數據可靠性與系統穩定性。本文將系統剖析該問題的具體表現、典型應用場景,并從硬件、協議、文件系統及應用多維度挖掘深層成因。 一、讀寫沖突的核心問題表現 SD卡在多設備高頻切換讀寫時的沖突問
    的頭像 發表于 01-09 10:12 ?357次閱讀

    SD NAND、TFSD的應用領域大揭秘

    在如今這個數據爆炸的時代,各類存儲設備猶如繁星般閃耀,而SD NAND、TFSD更是其中的佼佼者。它們看似相似,實則各有千秋,在不同的領域和場景中發揮著獨特的作用。今天,就讓我們
    的頭像 發表于 11-30 15:16 ?953次閱讀
    <b class='flag-5'>SD</b> NAND、TF<b class='flag-5'>卡</b>、<b class='flag-5'>SD</b><b class='flag-5'>卡</b>的應用領域大揭秘

    解鎖SD NAND、TFSD的應用密碼

    在科技飛速發展的今天,數據存儲的需求滲透到生活與工作的每一個角落——從手腕上的智能手表,到專業攝影師的相機,再到工廠里的工業路由器,都離不開高效可靠的存儲介質。SD NAND、TFSD
    的頭像 發表于 11-24 11:04 ?521次閱讀
    解鎖<b class='flag-5'>SD</b> NAND、TF<b class='flag-5'>卡</b>、<b class='flag-5'>SD</b><b class='flag-5'>卡</b>的應用密碼

    深度剖析Nios II 處理器的硬件抽象

    )與ANSI C標準庫綜合在一起,可使用類似C語言的庫函數來訪問硬件設備或文件,如printf()、fopen()、fwrite()等函數。軟件工程師可非常方便的使用這些函數來與底層
    的頭像 發表于 10-31 15:25 ?4997次閱讀
    深度剖析Nios II 處理器的<b class='flag-5'>硬件</b>抽象<b class='flag-5'>層</b>

    解鎖存儲密碼:SD NAND、TFSD的應用全景

    在數據洪流的時代,存儲介質就如同數字世界的基石,支撐著各類設備的正常運轉。SD NAND、TFSD,雖同屬NAND Flash存儲介質家族,卻因各自獨特的“個性”,在不同領域綻放
    的頭像 發表于 10-29 14:24 ?650次閱讀

    SD初始化原理講解與實現

    分享內容:SD 我們對 SD 的讀寫協議一般有 SPI 模式和SDIO 模式兩種,由于SPI 在芯片管腳上只占用四根線,而且SPI實現SD
    發表于 10-29 06:33

    CS創世SD NAND在北京君正平臺和瑞芯微RK平臺的應用

    ,并為HOST 驅動提供了接口函數 3.host : 是這個文件夾屬于 Linux 內核中 MMC/SD 子系統 的
    發表于 08-22 17:01

    SDIO SD電路設計速成攻略:核心步驟+調試技巧 !

    針對時間緊迫的開發者,本攻略直擊SDIO外接SD電路設計的核心步驟,并補充實用調試技巧,幫助你在最短時間完成從理論到可用的電路實現。 今天一起來聊聊 SDIO外接SD
    的頭像 發表于 08-15 14:32 ?702次閱讀
    SDIO <b class='flag-5'>SD</b><b class='flag-5'>卡</b>電路設計速成攻略:核心步驟+調試技巧 !

    SD—雷龍 SD NAND

    一、SD介紹 1.基本介紹 本質:nand flash + 控制芯片 1.SD ,Secure Digital Card,稱為安全數字
    的頭像 發表于 07-21 17:59 ?3745次閱讀
    <b class='flag-5'>SD</b><b class='flag-5'>卡</b>—雷龍 <b class='flag-5'>SD</b> NAND

    【嵌入式開發】SD—雷龍 SD NAND

    完全相同的代碼驅動 三、SDIO模式 1.SD常用命令介紹 SD總線上的通信基于命令和數據位流傳輸。 命令 :應用相關命令(ACMD)
    發表于 07-21 17:56

    第二十五章 SDIO——SD讀寫測試

    本章介紹了W55MH32的SDIO接口,其可與SD 等通信,采用9針接口,分識別與數據傳輸模式。還提及SDIO功能框圖、初始化結構體,并有SD
    的頭像 發表于 06-20 14:01 ?1986次閱讀
    第二十五章 SDIO——<b class='flag-5'>SD</b><b class='flag-5'>卡</b>讀寫測試

    貼片式SD如何在STM32硬件實現高效日志記錄#貼片式sd #貼片式tf #stm32 #硬件

    硬件
    深圳市雷龍發展有限公司
    發布于 :2025年06月18日 17:10:22

    【STM32系統】基于STM32設計的SD數據讀取與上位機顯示系統(SDIO接口驅動、雷龍貼片SD

      5. 系統實現   5.1 系統架構   5.2 硬件連接與調試   6. 實驗與測試   6.1 實驗方案設計   6.2 實驗過程   6.2.1 SD
    發表于 05-09 16:11

    Nand flash 和SDSD NAND)存儲扇區分配表異同

    NAND)接口與主機設備連接,主機設備通過文件系統接口來訪問 SDSD NAND),對存儲扇區分配表的操作是通過文件系統的函數和接口來間接實現
    發表于 03-13 10:45