新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 將FATFS移植STM32RBT6遇到的掛載不成功和返回值問題

        將FATFS移植STM32RBT6遇到的掛載不成功和返回值問題

        作者: 時間:2016-11-27 來源:網絡 收藏
        移植fatfs遇到了諸多問題,很是苦惱啊,移植成功思來之不易,特分享一下經驗。硬件是STM32F103RBT6內存只有20kB,Flash只有128KB,考慮到內存有限,就不能支持長文件名了,在原子論壇上下載的所以要改動,在此感謝原子論壇給我帶來的幫助還有安富萊論壇http://bbs.armfly.com/read.php?tid=3601給我帶來的啟示。另外硬件還有一個大的相機的SD卡,網上買的模塊當然也可以自己焊接一個,采用SPI接口,SPI1和SPI2都行,看圖

        本文引用地址:http://www.104case.com/article/201611/322305.htm

        移植前做了大量準備,在網上尤其是原子論壇翻看各種其他人移植的心得,去fatfs的官方網站下載0.10版本的程序,看各種相關的移植心得,文檔版本眾多,眼花繚亂,花了點時間看了看一些函數??吹貌畈欢嗔耍椭苯影?.10的版本考到自己的工程目錄下開始make,經過大量的翻閱和實踐,要動的地方只有diskio.c和ffconfig.h,第一個需要把底層驅動函數sd_inti();添加進去。sd卡的讀單塊和讀多塊,寫單塊寫多塊填進去,ffconfig.h里邊需要改幾個宏定義的值參照別人的例程就可以實現很簡單。

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


        u8 state;
        state=SD_Init();
        if(!state){
        return STA_NODISK;
        }
        return 0;
        }

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

        DSTATUS disk_status (
        BYTE drv/* Physical drive nmuber (0..) */
        )
        {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(count==1) //1個sector的讀操作
        {
        res = SD_ReadSingleBlock(sector, buff);
        //res= SD_ReadDisk(buff,sector,count);
        }
        else //多個sector的讀操作
        {
        res = SD_ReadMultiBlock(sector, buff, 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(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 */


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 布尔津县| 龙井市| 青浦区| 灵丘县| 军事| 中牟县| 乌兰县| 阳新县| 延吉市| 古田县| 新邵县| 元阳县| 互助| 怀来县| 赣榆县| 常熟市| 远安县| 永仁县| 织金县| 长垣县| 兴城市| 隆德县| 东明县| 芜湖县| 澜沧| 眉山市| 北宁市| 安西县| 驻马店市| 闽侯县| 班玛县| 高唐县| 罗甸县| 平遥县| 宁乡县| 泸州市| 萨嘎县| 门头沟区| 铁力市| 老河口市| 保靖县|