新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > SDIO_FATFS_MDK 調試記錄

        SDIO_FATFS_MDK 調試記錄

        作者: 時間:2016-12-03 來源:網絡 收藏
        現在已經調通,把文件系統的各個操作也基本測試了一遍,代碼還有待于整理。

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

        首先要說一個問題,就是在寫文件(f_write)的時候跳硬件中斷的問題。堆棧不夠,使用的開發板是奮斗v3.0,芯片是stm32f103vet6,有64K的ram,但是在startup_stm32f10x_hd.s的啟動代碼文件里對堆棧的定義卻很小,不知道為什么,是因為別的硬件資源自己去分配么?現在還沒有搞明白。下面有圖為證:

        原來是512個字節,現在我把他修改成了2048個字節(2kb)。就可以使用了,在Fatfs操作過程中,他的每一個寫操作的單位就是512字節,堆棧也是512字節,自然會溢出沒得說,然后程序就會跳到硬件中斷那里歇著去了。

        另外一個問題,在寫操作的時候程序會在SD卡的寫操作上面死掉,現在還找到原因,需要仔細看下DMA和SDIO直接的訪問情況。

        給注釋掉就可以正常的寫文件了。

        2011年1月12日 11:40:54
        下面寫下我的理解和解決辦法:
        首先分析了下代碼造成在上述地方程序死循環的不是下面的讀操作而是寫操作的f_close()函數。
        在sdcard.c文件的開始定義了volatile SD_Error TransferError = SD_OK;(即0x2A)
        那么分析這句話的意思
        while ((TransferEnd == 0) && (TransferError == SD_OK))
        {}
        當傳輸結束并且沒有錯誤的時候進入死循環?!說不通啊,但是在IAR的編譯器里就可以運行,現在要查找從定義到死循環之間有沒有什么操作可以改變這兩個變量的值。初步看沒有什么會變化的情況,要對照IAR的仿真運行一起看。

        問題已經解決,要謝謝網友stm32!
        要在stm32f10x_it.c里把SDIO的中斷服務函數加上,
        /*******************************************************************************
        * Function Name : SDIO_IRQHandler
        * Description : This function handles SDIO global interrupt request.
        * Input : None
        * Output : None
        * Return : None
        *******************************************************************************/
        void SDIO_IRQHandler(void)
        {
        SD_ProcessIRQSrc();
        }
        然后就ok了。


        關鍵詞: SDIOFATFSMDK調試記

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 岑溪市| 册亨县| 彩票| 嫩江县| 九寨沟县| 泽普县| 佳木斯市| 龙门县| 芒康县| 康保县| 齐齐哈尔市| 永福县| 巴马| 精河县| 明星| 铜梁县| 永昌县| 孝昌县| 泰宁县| 滦南县| 日喀则市| 瑞金市| 汾西县| 西乡县| 台前县| 洱源县| 讷河市| 蓬溪县| 安泽县| 贵溪市| 聂荣县| 成安县| 金山区| 大英县| 酒泉市| 抚宁县| 扬州市| 饶河县| 卓资县| 连南| 洮南市|