這幾天遇到一個問題,stm32寫入SD的時候,用busy waiting的情況會遇到sd tx underrun的錯誤,即使把sdio速度調低到5MHz的情況也一樣,偶爾會出現。
今天把FatFS底層換成DMA方式存取SD,幾乎每次都會出現DISK ERROR。
故意把read/write dma的部分加上200ms等待時間再偵測dma finish旗標,結果可以動,沒有錯誤,但寫入的檔案卻三不五時出現資料順序錯位。
資料順序錯位根據經驗,有可能是buffer沒有align到32bit,所以建立一個Buffer做32bit的align,但結果沒有改善。
直到剛剛我把Buffer放在sram最一開始的8k位置,然後問題就全部消失,重新把SDIO調到20MHz,一樣跑得嚇嚇叫。當然資料檔每一個都沒有錯位。
有用STM32 DMA的人可以參考下面做法,讓DMA存取sram1的記憶體,也許該記憶體速度較快,可以迴避許多奇怪的問題。
邱歐吉
2017-10-26 23:51:11
ST MCU 感覺狀況還蠻多的,我也曾遇過SD跑4bit mode不行,後來只好跑1bit mode.
廖誠義
2017-10-26 23:56:40
如果沒特別指定放到 sram1, 它原本會去哪裡存取呢? flash?
MingWei Cheng
2017-10-27 00:29:31
黃繼德
2017-10-27 08:30:05
sram1最一開始的位置mapping到DTCM,我想這可能是理由
黃偉峻
2017-10-27 21:35:54
會不會是因為TCM?通常那地方是被劃成Code的Cache(比方說SPI Flash放Code的種)
能快到需要TCM才跑的了也是滿吃資源的...
廖誠義
2017-10-30 18:16:25
廖誠義
2017-11-11 22:34:12
這兩天在看 stm32 memory structure. 想到這篇. 是 DMA 無法access 到DTCM ? 因為ITCM, DTCM 只有 MCU 可以存取...