1. 程式人生 > >stm32 Fatfs 讀寫SD卡

stm32 Fatfs 讀寫SD卡

#include "common.h"
/*-----------------------------------------------------------------------*/
/* Inidialize a Drive                                                    */

DSTATUS disk_initialize (
	BYTE drv				/* Physical drive nmuber (0..) */
)
{
    u8 state;

    if(drv)
    {
        return STA_NOINIT;  //僅支援磁碟0的操作
    }

    state = SD_Init();
    if(state == STA_NODISK)
    {
        return STA_NODISK;
    }
    else if(state != 0)
    {
        return STA_NOINIT;  //其他錯誤:初始化失敗
    }
    else
    {
        return 0;           //初始化成功
    }
}



/*-----------------------------------------------------------------------*/
/* Return Disk Status                                                    */

DSTATUS disk_status (
	BYTE drv		/* Physical drive nmuber (0..) */
)
{
    if(drv)
    {
        return STA_NOINIT;  //僅支援磁碟0操作
    }

    //檢查SD卡是否插入
    if(!SD_DET())
    {
        return STA_NODISK;
    }
    return 0;
}



/*-----------------------------------------------------------------------*/
/* Read Sector(s)                                                        */

DRESULT disk_read (
	BYTE drv,		/* Physical drive nmuber (0..) */
	BYTE *buff,		/* Data buffer to store read data */
	DWORD sector,	/* Sector address (LBA) */
	BYTE count		/* Number of sectors to read (1..255) */
)
{
	u8 res=0;
    if (drv || !count)
    {    
        return RES_PARERR;  //僅支援單磁碟操作,count不能等於0,否則返回引數錯誤
    }
    if(!SD_DET())
    {
        return RES_NOTRDY;  //沒有檢測到SD卡,報NOT READY錯誤
    }

    
	
    if(count==1)            //1個sector的讀操作      
    {                                                
        res = SD_ReadSingleBlock(sector, buff);      
    }                                                
    else                    //多個sector的讀操作     
    {                                                
        res = SD_ReadMultiBlock(sector, buff, count);
    }                                                
	/*
    do                           
    {                                          
        if(SD_ReadSingleBlock(sector, buff)!=0)
        {                                      
            res = 1;                           
            break;                             
        }                                      
        buff+=512;                             
    }while(--count);                                         
    */
    //處理返回值,將SPI_SD_driver.c的返回值轉成ff.c的返回值
    if(res == 0x00)
    {
        return RES_OK;
    }
    else
    {
        return RES_ERROR;
    }
}



/*-----------------------------------------------------------------------*/
/* Write Sector(s)                                                       */

#if _READONLY == 0
DRESULT disk_write (
	BYTE drv,			/* Physical drive nmuber (0..) */
	const BYTE *buff,	/* Data to be written */
	DWORD sector,		/* Sector address (LBA) */
	BYTE count			/* Number of sectors to write (1..255) */
)
{
	u8 res;

    if (drv || !count)
    {    
        return RES_PARERR;  //僅支援單磁碟操作,count不能等於0,否則返回引數錯誤
    }
    if(!SD_DET())
    {
        return RES_NOTRDY;  //沒有檢測到SD卡,報NOT READY錯誤
    }

    // 讀寫操作
    if(count == 1)
    {
        res = SD_WriteSingleBlock(sector, buff);
    }
    else
    {
        res = SD_WriteMultiBlock(sector, buff, count);
    }
    // 返回值轉換
    if(res == 0)
    {
        return RES_OK;
    }
    else
    {
        return RES_ERROR;
    }
}
#endif /* _READONLY */



/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions                                               */

DRESULT disk_ioctl (
	BYTE drv,		/* Physical drive nmuber (0..) */
	BYTE ctrl,		/* Control code */
	void *buff		/* Buffer to send/receive control data */
)
{
    DRESULT res;


    if (drv)
    {    
        return RES_PARERR;  //僅支援單磁碟操作,否則返回引數錯誤
    }
    
    //FATFS目前版本僅需處理CTRL_SYNC,GET_SECTOR_COUNT,GET_BLOCK_SIZ三個命令
    switch(ctrl)
    {
    case CTRL_SYNC:
        SD_CS_ENABLE();
        if(SD_WaitReady()==0)
        {
            res = RES_OK;
        }
        else
        {
            res = RES_ERROR;
        }
        SD_CS_DISABLE();
        break;
        
    case GET_BLOCK_SIZE:
        *(WORD*)buff = 512;
        res = RES_OK;
        break;

    case GET_SECTOR_COUNT:
        *(DWORD*)buff = SD_GetCapacity();
        res = RES_OK;
        break;
    default:
        res = RES_PARERR;
        break;
    }

    return res;
}

/*-----------------------------------------------------------------------*/
/* User defined function to give a current time to fatfs module          */
/* 31-25: Year(0-127 org.1980), 24-21: Month(1-12), 20-16: Day(1-31) */                                                                                                                                                                                                                                          
/* 15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */                                                                                                                                                                                                                                                
DWORD get_fattime (void)
{
  return 0;
}

相關推薦

stm32 Fatfs SD

#include "common.h" /*-----------------------------------------------------------------------*/ /* Inidialize a Drive

STM32利用SPISD的程式詳解

SD卡的讀寫驅動程式是運用FATFS的基礎,學了FATFS就可以在SD卡上建立資料夾及檔案了。我們先從main檔案瞭解一下程式的執行流程int main(void) { u16 i; USART1_Config(); for(i=0;i<1536;i++) send_data[

sd代碼分析(vivado sdk c++)

adf obj 基本數據 rect 原型 love you 直接 lseek ace void ReadFloatsFromSDFile(float *weightsFromFile, const std::string file_name) { FIL fil;

ZynqSD

之前一直沒有寫過部落格,也不知道如何開始,現在想記錄一下自己做過的事情,以後回看還能記得更快。那就以此為開始吧~~~ 專案需要,要實現一個將資料寫入到SD卡中的小demo,查找了一些資料,最後終於實現,將具體實現方案記錄如下。   1.搭建Zynq硬體平臺,根據開發板及

unity sd

真機上測試畫面: 建議先看 unity儲存到手機本地儲存空間 這篇文章 然後再看這篇文章,因為上篇步驟已經很詳細,所以這篇文章在上篇文章基礎上修改一下,很多步驟沒有截圖 最後看一下生成的檔案在手機的位置

Android 6.0 SD許可權問題

一、問題描述 Android 6.0 下預設儲存SD卡,使用原生FMRadio生成的檔案儲存到內部儲存中 【預置條件】插入T卡 【操作步驟】設定>儲存裝置和USB>選擇SD卡為預設儲存>收音機錄音 【實際結果】收音機的錄音檔案未儲存到T卡 【預期結果】收音機

Android6.0 SD許可權動態申請

轉自:http://bbs.csdn.net/topics/391985867 安卓6.0以上,進行了許可權管理 不止要在AndroidManifest.xml裡面新增許可權<uses-permission android:name="android.permiss

sd——sd example閱讀

constant aligned sta beginning pri format lba () sdn 改mss後import example 主要是用fat的函數讀寫sd 1 /*******************************************

C#操作明華澳漢M1往扇區塊寫入讀取值小結

    近期因為專案中需要用到往IC卡的扇區塊中寫入值 並讀取值,並且是漢字。官方給的demo示例不是很規範,過程也有很多坑。先總結如下: 1、調整mifareone類中寫入的函式引用 最後一個寫入的文字引數由原 改為:    因為根據幫助文件,寫

如何避開Android 6.0新增的特性獲取IMEI和記憶體許可權

在Android 6.0之後新增了動態許可權,比如獲取IMEI,寫入外接儲存卡的時候需要新增動態許可權。關於動態許可權參考文章。我們在新增動態許可權的時候都需要回調Activity裡面的onRequestPermissionsResult(int requestCode,St

使用STM32CUBEMX生成USB Mass Storage程式碼,通過SDIOTF

首先配置USB為Mass Storage Class,配置SDIO為 SD 4 bits wide bus。 這裡我使用了FreeRTOS和FATFS,用不用和本例無關。有一個坑,就是SDIO的配置介面,MX軟體建議不設分頻,但這裡需要慎重,SDIOCLK的分頻要按照自己硬體板

mfc 裸sd扇區

#include "stdafx.h" #include <windows.h> #include "stdafx.h" #include "types_def.h" #include "compat_error.h" #include "compat_sem

MSP430 SDSPI操作(4) —— FatFs檔案系統實現(以MSP430F5438A為例)

本節介紹MSP430F5438A FatFs檔案系統的移植。 FatFs是一個通用的檔案系統模組,用於在小型嵌入式系統中實現FAT檔案系統。FatFs模組與IO是分開的,因此移植時需要實現下面幾個底層函式: DSTATUS disk_initialize (BYTE dr

FATFSSD一串數字

就會 info http src 需要 alt bsp 字符串 都是 用FATFS寫SD卡,需要把數組的各個位取出來,變成字符串,然後才能寫進去,,如果直接寫就會出現亂碼 還有一點要註意,就是 要寫進去的東西如:pzu和pv1都是指針,,,,把一個指針指向數組之後,才能寫,

android 資料儲存&lt;一&gt;----android簡訊傳送器之檔案的(手機+SD

本文實踐知識點有有三: 1.佈局檔案,android佈局有相對佈局。線性佈局,絕對佈局。表格佈局。標籤佈局等,各個佈局能夠巢狀的。 本文的佈局檔案就是線性佈局的巢狀 <LinearLayout xmlns:android="http://schemas.and

單元測試+記憶體、SD、SP+XmlPullParser

測試: •測試的相關概念 1、根據是否知道原始碼分類: 黑盒測試: a - b - c 邊值測試 測試邏輯業務 白盒測試: 根據原始碼寫測試方法 或者 測試用例; 2、根據測試的粒度分類: 方法測試:寫完一個方法後就測試 單元測試:測試一個能夠獨立執行的業務邏輯單元; 整合測

Android SD簡單的檔案操作

Android SD卡簡單的檔案讀寫操作   最近有這樣的需求,把每次統計到的資料,以txt形式儲存到手機SD卡或是手機記憶體中,遇到一些問題,記錄下來。   首先如果要在程式中使用sdcard進行儲存,我們必須要在AndroidManifset.xml檔案進行下

Android獲取外接SD路徑

1. 外接SD卡的一些問題 1.1 關於外接SD卡上的讀寫路徑 Android 4.4及以上版本,應用的外接SD卡讀寫路徑被限定在固定路徑上(外接SD卡根路徑/Android/data/包名/files)。 Android4.4以下版本,申請了外接SD卡讀寫許可權的應用在整個

Android值資料sd需要注意的事項

使用Sdcard注意事項: 1.許可權問題: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 2.硬性編碼問題:通過 Environment可以獲取sdca

SD SPI模式要點

最近用FPGA實現了從SD卡讀資料的基本功能,一些要點: 1.sd卡上電後,先拉低CS,傳送至少74個clock,然後拉高CS,傳送至少74個clock。 2.傳送CMD0,SD卡迴應0x01 3.重複傳送CMD55+ACMD41,直到SD卡迴應0x00 4.傳送CMD17+