色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取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();
}

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

    關注

    5141

    文章

    19528

    瀏覽量

    314930
  • SD卡
    +關注

    關注

    2

    文章

    575

    瀏覽量

    65134
收藏 0人收藏
  • 开山师傅1

評論

相關推薦
熱點推薦

【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

HAL庫的函數調用示例

HAL(Hardware Abstraction Layer,硬件抽象)庫是STM32等微控制器中常用的庫,它為開發者提供了訪問和控制硬件設備的接口。以下是一些常用的HAL庫函數及其
的頭像 發表于 12-02 14:01 ?1368次閱讀

一文帶你了解什么是SD NAND存儲芯片

XST_FAILURE; } return XST_SUCCESS; }   以上是本次實驗使用到的部分代碼,里面包含了外設,標準的打印函數SD控制器的功能,在程序中先進行
發表于 11-13 15:20

Arduino程序:實現SD NAND(貼片sd)的讀寫功能

  單片機上傳程序的時候,有時候感覺它的rom和 ram有時直接限制了他的使用,之前使用eeprom,和sd模塊. []()   然后最近看到了出的SD NAND 就是下面這個
發表于 11-07 17:45

工業級SD:穩健發展,未來可期

SD,自1999年由松下、東芝和SanDisk聯合推出以來,已經走過了二十余年的發展歷程。從最初的2GB容量、150KB/s的傳輸速度,到如今動輒數百GB容量、數GB/s的傳輸速度,SD
的頭像 發表于 11-07 10:16 ?684次閱讀
工業級<b class='flag-5'>SD</b><b class='flag-5'>卡</b>:穩健發展,未來可期

SD是什么?從速度等級到存儲奧秘全揭秘#pcb設計 #單片機 #電路原理 #硬件 #存儲 #芯片

SD
深圳市雷龍發展有限公司
發布于 :2024年10月29日 18:17:48

SD-WAN能實現幾層防護層級?安全保障怎么實行?

保障措施覆蓋了從物理到應用的多個層面,確保企業網絡的穩定性和安全性。 一、SD-WAN實現的防護層級 1、物理和數據鏈路層(第1
的頭像 發表于 09-26 10:53 ?703次閱讀

瀚海微SD NAND之SD 協議(29)硬件接口

SD存儲硬件接口 SD存儲有6條通信線路和3條供電線路: CMD:命令是雙向信號。主機和
的頭像 發表于 09-24 10:19 ?589次閱讀
瀚海微<b class='flag-5'>SD</b> NAND之<b class='flag-5'>SD</b> 協議(29)<b class='flag-5'>硬件</b>接口

MK米客方德存儲:TFSD的詳細解讀

在這個數字化時代,數據存儲變得至關重要。TF(TransFlash)和SD(Secure Digital)作為兩種常見的存儲介質,它
的頭像 發表于 09-02 11:03 ?1188次閱讀
MK米客方德存儲<b class='flag-5'>卡</b>:TF<b class='flag-5'>卡</b>與<b class='flag-5'>SD</b><b class='flag-5'>卡</b>的詳細解讀

樹莓派4b支持多大的sd

樹莓派4B是一款非常受歡迎的微型計算機,它具有強大的性能和豐富的擴展功能。在樹莓派4B的使用過程中,SD是一個非常重要的組件,因為它是樹莓派的啟動設備,同時也是存儲系統文件和應用程序的地方。 樹莓
的頭像 發表于 08-30 17:02 ?2242次閱讀

貼片式SD功能介紹【MK SD NAND】

SDNAND,通常稱為嵌入式SD、貼片式TFSD Flash、直接貼裝SD、貼裝
的頭像 發表于 07-05 17:03 ?1446次閱讀
貼片式<b class='flag-5'>SD</b><b class='flag-5'>卡</b>功能介紹【MK <b class='flag-5'>SD</b> NAND】

SD、MicroSDSD NAND的性能與應用對比

在當前豐富多元的存儲解決方案領域,SD、MicroSD以及SD NAND憑借其各自的獨特優勢和特定的使用情景,贏得了市場的廣泛認可。每種
的頭像 發表于 06-14 15:48 ?1453次閱讀
<b class='flag-5'>SD</b><b class='flag-5'>卡</b>、MicroSD<b class='flag-5'>卡</b>和<b class='flag-5'>SD</b> NAND的性能與應用對比

SD與Flash存儲究竟存在哪些差異?

SD 是基于閃存技術的一種可移動存儲,由 SD 協會進行開發并標準化,在數碼相機、智能手機、平板電腦等設備中廣泛采用。SD
的頭像 發表于 06-05 15:54 ?2678次閱讀
<b class='flag-5'>SD</b><b class='flag-5'>卡</b>與Flash存儲究竟存在哪些差異?

【GD32H757Z海棠派開發板使用手冊】第十二講 SDIO-SD讀寫實驗

SD是一種主要以Nand Flash作為存儲介質,具有體積小、數據傳輸速度快以及支持熱插拔的優點。如今,已被廣泛應用于數碼相機、便攜式移動設備以及手機等多種設備中。SD
的頭像 發表于 06-05 10:35 ?1212次閱讀
【GD32H757Z海棠派開發板使用手冊】第十二講 SDIO-<b class='flag-5'>SD</b><b class='flag-5'>卡</b>讀寫實驗
主站蜘蛛池模板: 黄片长版看嘛 | 国产亚洲人成网站在线观看播放 | 粉色视频午夜网站入口 | 国产精品网红女主播久久久 | 伊人狠狠丁香婷婷综合尤物 | 日韩视频中文在线一区 | 91原创在线 | 亚洲精品人成电影网 | 天天综合亚洲综合网站 | 妈妈的职业3完整版在线播放 | 成人免费视频在线播放 | 富婆大保健嗷嗷叫普通话对白 | 偷拍 拍自 欧美色区 | 国产亚洲日韩另类在线播放 | 攻把受做哭边走边肉楼梯PLAY | 纯肉无码AV在线看免费看 | 色拍拍噜噜噜啦啦新网站 | 欧美一区二区VA毛片视频 | 国产精品成人影院在线观看 | 老少配xxxxx欧美 | 99久久爱看免费观看 | 性色爽爱性色爽爱网站 | 动漫护士被乳羞羞漫 | 全肉高H短篇合集 | 久久99亚洲热最新地址获取 | 肉蒲团从国内封禁到日本成经典 | 久久国产精品二区99 | 国产亚洲精品看片在线观看 | 欧美一区二区激情视频 | 国产亚洲制服免视频 | 中文字幕久久熟女人妻AV免费 | 激情丛林电影完整在线 | 2017天天拍天天拍香蕉视频 | 久久99国产综合精品AV蜜桃 | 熟妇无码乱子成人精品 | 久久精品免视看国产 | 超碰97人在线视频 | 无人区大片中文字幕在线 | 亚洲中文久久久久久国产精品 | 日本亚洲欧洲免费旡码 | 国产亚洲精品久久久久久白晶晶 |

電子發燒友

中國電子工程師最喜歡的網站

  • 2931785位工程師會員交流學習
  • 獲取您個性化的科技前沿技術信息
  • 參加活動獲取豐厚的禮品