FatFs PIC18F46K22 移植心得 2019.05.10
差不多15年前, 利用單晶片自製MP3 Player開始流行起來之後,
偶就在研究FatFs如何用C語言去實踐, 可惜當時民智未開, 只能抄襲對岸神人的程式,
差強人意勉強作出來一個可以從SD CARD讀檔然後播放的程式, 也沒有再去深究個中的原理,
後來陸續有幾次機會想要探究, 到底FatFs要怎麼移植, 都仗二金刚, 摸不著頭緒.
直到今天真正工作上要用到, 非要弄個明白不可. 一方面也是因為對STM32有深入的了解
再加上大陸正點原子的視頻教程及老印的YOUTUBE教學影片+範例才終於學會了如何去用它.
其中過程有諸多不順, 還是記錄一下, 給後人參考.
硬體
首先要準備一片SD Card(已Format好, FAT16 or FAT32)+讀卡模組
SD Card 用什麼卡就不計較了, 反正終生保固啊.
第一個地雷就是讀卡模組, 這東西好壞差距不小, 但價差很小(or 很大), 所以一般人不太重視分別,
但這就是致命關鍵, 尤其在不了解軟體有沒有問題時, 更是會被直接忽視的.
起手式偶最後想到用Arduino+原生範例(CardInfo)來作驗證,
線接上(不能接錯)馬上可以分曉, 讀卡模組有沒有問題.
可以參考這篇
筆記, microSD 模組, 一些經驗分享
拿 Arduino 和 microSD 模組連接開發時, 遇到一些奇怪的問題. 經驗分享.
本來以為有了這片模組, 接下來就是一帆風順一路暢通. 只是事情總沒有想像的美好,
萊恩大兵和這片模組相處, 還是遇到一些摸不著頭緒的問題.
https://gogoprivateryan.blogspot.com/2014/08/microsd-arduino-microsd.html
還有最好多測幾次, 如果有不穩定的情形(時好時壞), 最好換另一廠牌的讀卡模組, 以免後患.
輸入電壓是關鍵,輸入電壓是關鍵,輸入電壓是關鍵. 已經講三次了.
軟體
主角登場, 因為工作環境是18F46K22, 所以移植也就盡可能找MCU相同的, 可以省去二次移植的工夫.
可惜天不從願, 只有找到老印的教學網頁+YOUTUBE教學影片
Learn to interface SD Card with PIC Microcontroller SPI to write and read to/from SD card
with MPLAB XC8 and MPLAB Code Configurator using FatFs Library
https://www.studentcompanion.co.za/interfacing-sd-card-with-pic-microcontroller-xc8/
它是用18F45K22, TMD 雖然只是差一個英文字母, 可是卻搞的偶人仰馬翻, 好不熱閙.
有專案檔可供下載, 謝天謝地, 阿彌佛陀, 善哉善哉.
因為偶是用MPLAB XIDE, 所以第一步專案檔就開不了, 因為IDE版本不同, 新版並沒有向下相容,
打電話去MICROCHIP 0800問, 被要求請到論壇上傳該專案檔, 才能幫忙解決.
結果是只要將該專案檔的目錄名稱<XXX>改為<XXX.X>即可, 真是神奇, 也算是開了眼界.
這真不知道是哪門子怪招. 也還真的有效, 順利開啟了專案檔, 更換了MCU編號, 順利編譯通過.
本想天下有這麼好康的事情, 得來全不費工夫? 反而有點震驚.
線再度接上, 程式下載進去, 果然沒有任何結果??? 這是意料中事, 已有心理準備.
再來就是要DEBUG, 這裡偶選擇用LCD顯示, 來看程式分段執行跑的結果.
這中間有很多技巧及過程, 但這不是今天的重點, 所以暫時省略.
FatFs下載之後, 如何移植到MCU中, 偶是參考了
1.
大陸正點原子的視頻教程(youtube)
第76讲 FATFS文件系统基础知识讲解
第77讲 FATFS文件系统实验
看這二個影片, 不懂就反覆看, 偶也是看了三遍才有一點概念.
2.
上述老印的教學網頁+YOUTUBE教學影片, 一樣, 不懂就反覆看...
之後就可以知道, 移植要修改什麼地方.
(PS)老印的程式完全正確沒問題, 沒有BUG, 不必再修改了. 但您必須要知道, 它怎麼來的.
最後還有一件事情是最重要的, 它提供的API怎麼用??? 例如, 檔案大小, 如何分次讀檔....
留言列表