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

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

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

3天內不再提示

【產品應用】AWorksLP例程介紹(MR6450)—— SD卡

ZLG致遠電子 ? 2023-05-10 09:42 ? 次閱讀

AWorksLP對存儲類設備進行了高度抽象化,為存儲類設備提供了通用的文件操作接口,應用程序可以輕松跨平臺。本文以MR6450平臺為例,介紹AWorksLP基于FatFs的SD卡的基本用法。

4602f868-ed47-11ed-ba01-dac502259ad0.jpg ?簡介

SD卡(Secure Digital Card)即安全數字卡。是一種基于半導體快閃記憶器的新一代記憶設備,從MMC的基礎上發展而來。由于它的體積小、數據傳輸速度快、可熱拔插等優點,被廣泛的運用于便攜式和嵌入式設備上。FatFs是一種面向小型嵌入式系統的通用的FAT文件系統。它完全是由ANSIC語言編寫并且完全獨立于底層I/O。因此它可以很容易的移植到不同且資源有限的微控制器中。
由此可見在嵌入式開發中對SD卡中的文件進行管理時,FatFs是使用的最多的文件系統。在AWorksLP中已經集成了FatFs文件系統,并支持使用該文件系統對SD卡的文件進行管理。


46085808-ed47-11ed-ba01-dac502259ad0.jpg ?相關API

在SD卡例程中,是通過文件接口實現對SD卡中文件進行操作的。在本文中僅介紹用到的文件接口,其他文件接口,請參考SDK中《AWorksLP OS 標準API參考手冊(html)》。

AWorksLP函數列表:

460dc554-ed47-11ed-ba01-dac502259ad0.png

部分接口參數屬性表:

46198c36-ed47-11ed-ba01-dac502259ad0.png

46085808-ed47-11ed-ba01-dac502259ad0.jpg ?工程編譯

環境的搭建、Eclipse工程的編譯與配置、開發板的仿真與調試、請參考《AWorksLPSDK快速入門(MR6450)——開箱體驗》


46085808-ed47-11ed-ba01-dac502259ad0.jpg ?例程介紹

本文介紹例程在{SDK}\demos\peripheral\sdcard目錄下。

在src目錄下的demo_sdcard_fs.c例程代碼中的第149行到第157行使用了while循環如代碼1示,在循環中每隔500ms打開一次SD卡設備,通過檢查返回值來檢測是否有SD卡插入。如檢測到返回值大于等于0則表明有SD卡插入。需要注意的是打開SD卡的設備名(“__BLK_NAME”在demo_sdcard_fs.c的第67行中默認被宏定義為“/dev/sdcardB0”)需要與實際檢測到的SD卡設備名一致。在AWorksLP中SD卡默認是動態監測,在SD卡插入時會在串口打印設備信息如圖1示,串口顯示SD卡設備名為“sdcardA0”,所以我們需要修改“__BLK_NAME”的宏定義為“/dev/sdcardA0”。

64 /* sd卡設備分區名,是由sd卡設備分區注冊為字符型設備65 * sd卡設備分區名一般是由SD卡設備名加上part number66 */67 #define __BLK_NAME "/dev/sdcardB0"149 do{150 fd = aw_open(__BLK_NAME, AW_O_RDWR, 0);151 if (fd < 0) {152 ? ? ? ? aw_kprintf("open device failed\r\n");153 ? ? ? ? aw_mdelay(500);154 ? ? } 155 }while(fd < 0);156 157 ? ?aw_close(fd);

代碼1SD卡設備檢測流程

462e2470-ed47-11ed-ba01-dac502259ad0.png

圖1串口打印SD卡設備名代碼2中第159行到172行的功能為使用aw_make_fs函數接口將SD卡格式化為FatFs文件系統。第159行的宏定義默認為#if 0,本次例程為了演示該步驟將宏改為#if 1。需要注意的是格式化會把卡內的數據清除,在執行格式化之前需要確保卡內沒有重要數據。

159 #if 1 /* 格式化一次即可 */160 161 /* 卷名為"awdisk", 卷大小為4k */162 struct aw_fs_format_arg fmt = {"awdisk", 1024 * 4, 0};163 164 /* 制作文件系統 ,將存儲器名為 "/dev/sd0"制作為"vfat"類型的文件系統 */165 ret = aw_make_fs(__BLK_NAME, "vfat", &fmt);166 if (ret != AW_OK) {167 AW_ERRF(("failed: %d\n", ret));168 return;169 }170 AW_INFOF(("make fs OK\n"));171 172 #endif

代碼2SD卡格式化

格式化完成后,代碼3中第174行通過aw_mkdir函數創建一個名為“/sd”的目錄,以該目錄為SD卡的掛載點。創建目錄的文件模式為文件所有者、用戶組和其他用戶都可以對該目錄進行讀寫。第181行通過aw_mount函數將SD卡掛載在“/sd”目錄中。需要注意的掛載前需要確保目錄存在,如果將SD卡掛載在不存在的目錄上,掛載會失敗。掛載的文件系統也需要與SD卡格式化的文件系統格式一致,否則掛載同樣會失敗。

173 /* 創建掛載節點 */174 ret = aw_mkdir("/sd", AW_S_IRWXU | AW_S_IRWXG | AW_S_IRWXO);175 if (ret != AW_OK) {176 AW_ERRF(("/sd create error: %d!\n", ret));177 return;178 }179 180 /* 文件系統掛載到"/sd"節點 */181 ret = aw_mount("/sd", __BLK_NAME, "vfat", 0, NULL);182 if (ret != AW_OK) {183 AW_ERRF(("/sd mount FATFS error: %d!\n", ret));184 return;185 }186 AW_INFOF(("mount OK\n"));187 188 /* SD 卡讀寫測試 */189 __fs_file_rw();

代碼3掛載SD卡

最終例程會在第189行調用__fs_file_rw函數,函數體如代碼4所示。在該函數中會在“/sd”目錄下創建一個名為“aworks_sd_test.txt”的測試文件,通過對該文件進行讀寫測試,讀寫完成后對數據進行效驗,效驗通過則表明SD卡讀寫測試成功。至此SD卡例程執行完畢,整個過程會有串口信息打印如圖2所示。

69 aw_local void __fs_file_rw (void)70 {71 int i = 0;72 int handle;73 char *p_file_name = "/sd/aworks_sd_test.txt";74 uint8_t str_buf[256] = {0};75 int len;76 77 /*78 * 寫文件測試(包括創建,文件寫操作,關閉操作)79 */80 /* 創建新文件 */81 handle = aw_open(p_file_name, AW_O_RDWR | AW_O_CREAT, 0777);82 if (handle < 0) {83 AW_ERRF(("creat file error: %d\n", handle));84 return;85 }86 AW_INFOF(("creat file %s ok\n", p_file_name));87 88 len = sizeof(str_buf);89 for (i = 0; i < len; i++) {90 str_buf[i] = (uint8_t)i;91 }92 93 /* 寫文件 */94 if (aw_write(handle, str_buf, sizeof(str_buf)) != sizeof(str_buf)) {95 aw_close(handle);96 AW_ERRF(("write file error\n"));97 return;98 }99 AW_INFOF(("write file %s ok\n", p_file_name));100 101 /* 關閉文件 */102 aw_close(handle);103 AW_INFOF(("close file %s ok\n", p_file_name));104 105 /*106 * 讀文件測試(包括打開,文件讀操作,關閉操作)107 */108 /* 打開文件 */109 handle = aw_open(p_file_name, AW_O_RDONLY, 0777);110 if (handle < 0) {111 AW_ERRF(("open file error: %d\n", handle));112 return;113 }114 AW_INFOF(("open file %s ok\n", p_file_name));115 116 memset(str_buf, 0, sizeof(str_buf));117 118 /* 讀取文件 */119 len = sizeof(str_buf);120 if (aw_read(handle, str_buf, sizeof(str_buf)) != sizeof(str_buf)) {121 aw_close(handle);122 AW_ERRF(("read file error!\n"));123 return;124 }125 AW_INFOF(("read file %s ok\n", p_file_name));126 127 /* 檢驗數據是否正確 */128 for (i = 0; i < len; i++) {129 if ((uint8_t)i != str_buf[i]) {130 AW_ERRF(("file data error!\n"));131 aw_close(handle);132 return;133 }134 }135 136 AW_INFOF(("file %s data check ok\n", p_file_name));137 }

代碼4__fs_file_rw讀寫測試函數

46377840-ed47-11ed-ba01-dac502259ad0.png

圖2SD卡例程執行成功的串口信息


46085808-ed47-11ed-ba01-dac502259ad0.jpg ?擴展介紹

在上節中有提到AWorksLP SD卡默認是動態檢測設備,即支持熱拔插,這是通過一個檢測引腳實現的。在實際應用中,可能出于節約I/O資源的考慮,需要將檢測引腳復用為其他功能。在這種情況下可以將SD卡定義為靜態設備,這樣檢測引腳就能復用作其他功能了。

在AWorksLP中SD卡的動態設備在圖形化配置界面中沒有SD卡設備可供使用,只需將對應的SDIO控制器選上即可。上文例程中SD卡是通過sdio1設備來控制的,所以僅需保證sdio1設備使能即可,如圖3所示。

4647fc6a-ed47-11ed-ba01-dac502259ad0.png

圖3 動態設備下確認控制器被選上

將SD卡設備以靜態方式注冊時,則需要進行如下操作:

將pins.dts({board}\dts\pins.dts)文件中CD引腳配置注釋,修改完成后如代碼5所示;

  1. 在board.dts文件中添加SD卡設備,如代碼5所示。

/* cd-pins = <&pin1 PIN_PD28(IOC_PD28_FUNC_CTL_SDC1_CDN|HPM_PIN_DS(6)|HPM_PIN_PE(_HPM_PIN_PE_ON)|AW_PIN_CFG_PULL_UP) (IOC_PD28_FUNC_CTL_SDC1_CDN|HPM_PIN_DS(6)|HPM_PIN_PE(_HPM_PIN_PE_ON)|AW_PIN_CFG_PULL_UP) (IOC_PD28_FUNC_CTL_SDC1_CDN|HPM_PIN_DS(6)|HPM_PIN_PE(_HPM_PIN_PE_ON)|AW_PIN_CFG_PULL_UP) >; */

代碼5 注釋引腳

&sdio1 { sdio_mem_card0:sdio_mem_card0 { compatible = "general,sdio_mem_card"; label = "sdcardA"; status = "disabled"; }; };

代碼6添加SD卡設備

完成修改后,重新打開例程編譯圖形化配置界面,即可在Board EPC6450-AWI/Devices/External Memories選項下看到板卡下新增sdcardA設備如圖4所示,使能該項并保存退出,再次編譯工程并執行固件,例程現象與上節中所描述完全一致。

4652afb6-ed47-11ed-ba01-dac502259ad0.png

圖4 選擇SD卡設備

注意:例程在靜態SD卡設備下執行需要在固件運行前將SD卡插入。

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

    關注

    13

    文章

    4411

    瀏覽量

    86467
  • SD卡
    +關注

    關注

    2

    文章

    568

    瀏覽量

    64374
收藏 人收藏

    評論

    相關推薦

    [上手體驗]雷龍SD NAND:比TF更小更耐用

    和SPI FLASH以及 NAND FLASH,基本沒聽說過SD NAND。查閱了雷龍官方介紹),得知SD NAND俗稱貼片式TF,雖然SD
    發表于 03-08 14:28

    CS創世SD NAND【貼片式sd】的測試使用說明

    今天收到了來自深圳市雷龍發展有限公司寄來的存儲,它是一款自帶壞塊管理的貼片式NAND Flash,適用于嵌入式系統。SD NAND尺寸小巧,支持SPI/SD接口,兼容各大MCU平臺,提供STM32參考
    的頭像 發表于 02-17 15:45 ?129次閱讀
    CS創世<b class='flag-5'>SD</b> NAND【貼片式<b class='flag-5'>sd</b><b class='flag-5'>卡</b>】的測試使用說明

    CS創世SD NAND【貼片式sd】的測試使用說明

    STM32參考例程,適用于需要大容量存儲但對穩定性要求高的MCU項目。 []()   芯片規格型號   CSNP32GCR01-AOW []()   轉接板型號   SD NAND測試板   適用產品
    發表于 02-12 15:05

    深度解析 | 基于HPM6450的RISC-V核心板究竟有哪些過人之處?

    ,本文詳細為大家介紹其具體參數與典型應用。—MR6450核心板性能如何?—MR6450系列核心板基于先楫半導體的HPM6450IVM1開發,主頻高,支持高速數據處理能
    的頭像 發表于 02-08 13:45 ?360次閱讀
    深度解析 | 基于HPM<b class='flag-5'>6450</b>的RISC-V核心板究竟有哪些過人之處?

    使用官方SDK開發6450

    官網提供的SDK芯片類型沒有包含HPM6450,如何添加6450到SDK中有人知道么?
    發表于 10-24 14:51

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

    在這個數字化時代,數據存儲變得至關重要。TF(TransFlash)和SD(Secure Digital)作為兩種常見的存儲介質,它
    的頭像 發表于 09-02 11:03 ?966次閱讀
    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 ?1703次閱讀

    學習SD模塊遇到的事兒

    0xFF后,再啟動讀的處理。因為沒太看懂SD的操作時序圖,按照以前使用SPI設備的習慣以為在發送的同時,收取數據,結果錯得一塌糊涂啊。最后還是花了好多時間,閱讀、理解了SD協議,看別人例程
    發表于 07-29 22:17

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

    SDNAND,通常稱為嵌入式SD、貼片式TFSD Flash、直接貼裝SD、貼裝
    的頭像 發表于 07-05 17:03 ?1053次閱讀
    貼片式<b class='flag-5'>SD</b><b class='flag-5'>卡</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 ?1191次閱讀
    <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 ?2180次閱讀
    <b class='flag-5'>SD</b><b class='flag-5'>卡</b>與Flash存儲究竟存在哪些差異?

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

    SD是一種主要以Nand Flash作為存儲介質,具有體積小、數據傳輸速度快以及支持熱插拔的優點。如今,已被廣泛應用于數碼相機、便攜式移動設備以及手機等多種設備中。SD的驅動一般有
    的頭像 發表于 06-05 10:35 ?943次閱讀
    【GD32H757Z海棠派開發板使用手冊】第十二講 SDIO-<b class='flag-5'>SD</b><b class='flag-5'>卡</b>讀寫實驗

    請問STM32Cube包含的FATFS例程是不是已經支持8G以上的SD了?

    STM32Cube包含的FATFS例程是不是已經支持8G以上的SD了? 我手頭沒有合適的卡做測試,有人知道么 stm324xg_eval_sd.c 文件的uint8_t
    發表于 05-16 06:18

    SD3012的I2C例程

    電子發燒友網站提供《SD3012的I2C例程.zip》資料免費下載
    發表于 05-14 13:55 ?1次下載

    GPIB-USB-HS采集產品應用

    GPIB-USB-HS采集產品應用,并探討其在不同領域的優勢和用途。 1. 什么是GPIB-USB-HS采集? GPIB-USB-HS采集是一種基于GPIB(通用并行接口總線)
    的頭像 發表于 05-06 13:54 ?1046次閱讀
    GPIB-USB-HS采集<b class='flag-5'>卡</b>的<b class='flag-5'>產品應用</b>
    主站蜘蛛池模板: 热巴两次用约老师屁股发底线球 | 妹妹我要操 | 国产欧美亚洲综合第一页 | 日韩做A爰片久久毛片A片毛茸茸 | 伊人AV一区二区三区夜色撩人 | 妖精视频一区二区免费 | 德国美女密密麻麻浓毛 | 欧美三级不卡在线观线看 | 99久久99| 国产精品资源在线观看网站 | 精品国产福利一区二区在线 | 国产久爱青草视频在线观看 | 天天看高清影视在线18 | 久久久久亚洲 | 国产老头与老太hd | 人人做人人干 | 久久99亚洲AV无码四区碰碰 | 啪啪羞羞GIF男女0OXX动态图 | 久久91精品国产91久 | 成人综合在线视频免费观看完整版 | 日本女人bbb | 99国产在线精品视频 | 日本高清无卡码一区二区久久 | 最美女人体内射精一区二区 | 俄罗斯大白屁股 | 人与人特黄一级 | 爱豆剧果冻传媒在线播放 | 欧美精品高潮呻吟AV久久 | 红番阁免费观看 | 1级午夜影院费免区 | 东北女人奶大毛多水多 | 一个人在线观看免费高清视频 | 国产偷国产偷亚洲高清人乐享 | 亚洲理论片在线中文字幕 | 入禽太深免费视频10 | 午夜宅宅伦电影网 | 99精品视频在线 | 野花影院手机在线观看 | 亚洲蜜芽在线观看精品一区 | 色怕怕| 在线看片成人免费视频 |