2013年5月24日 星期五

以SD卡做為MCU磁碟機

外部串列式儲存單元選用考量:
1.界面速度
2.單位儲存價格
3.和PC做資料交換

使用USB是一個不錯的選擇,但不是每一種MCU有USB界面。
使用UART是最普遍,但串列儲存元件未支援。
使用I2C則是慢了點。
使用SPI是不錯的選擇,但和PC又無法直通。

用了數種儲存單元後終於出現讓Bee滿意的答案=SD卡。
在界面速度上,速度算不錯。可以使用SDIO的高速模式,也可以用SPI界面,和大部分MCU連接。
在容量單位價格上,可說是非常低。
可以直接拿到PC上讀取,讀卡機容易取得。
若是MCU程式空間小到放不下FAT檔案系統,那也可以全碟讀出,再用PC軟體去分析。
不過已有Open Source解決FAT的問題,就是用FatFs,故就算是8051也是可以使用。

MCU有了大型儲存單元,再加上FAT檔案系統,可做的事就好像變多了。
從前沒有空間做大型資料計算處理,也變得可行。有機會在檔案上做儲存及暫存再轉出結果。
MCU可以做的事就如同DOS時代的PC。
其實環境還真的差不多。
DOS時代的記憶體為640KB,磁碟不到1GB。
現在MCU其RAM大約給64KB,SD卡有4GB。但另有程式空間512KB。
只要控制住RAM的使用量,真的就和DOS環境差不多了。


16 則留言:

  1. 端午節快樂

    父親節快樂
    我的地盤有些網絡行銷方面的介紹,歡迎來參觀喔!

    回覆刪除
  2. 你好 請問有stm32f407 SDIO+FAT32的程式嗎!?

    MCU將資料存入SD卡時,因電腦格式是FAT32,所以無法給電腦讀取。

    回覆刪除
    回覆
    1. 有,是從ST網站取得。
      http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF258142
      從其中抽出SD及FatFs相關程式。
      FAT32可以使用,NTFS確定無法使用。
      目前使用SD卡4G,8G,16G,32G皆無問題。32GB以上,會變成exFAT,這個目前也無法使用。

      刪除
    2. MCU寫入SD卡,和SD的Class相關,有Class2,4,6,10可以買到。因Bee需求高速寫入,使用Class 10。目前做到寫入約4MB/sec。讀取則差不多皆有10MB/sec。
      經常性拿去PC讀取,並做資料分析。

      刪除
  3. 作者已經移除這則留言。

    回覆刪除
  4. 您好
    目前在做MCU to microSD(SPI),SD卡的部分已確定完成初始化,但在移植FAT時一直失敗,想請問您沒有FAT的話,我該如何寫入SD卡呢?如何在電腦端讀取寫入的內容呢?想詢問想細一點,謝謝您~

    回覆刪除
    回覆
    1. 沒有FAT,就只能當成一整塊外部記憶體裝置。PC是可以讀寫,但就是全卡進/全卡出。也就是4GB的卡,PC一次讀出,在PC內修改完,又一次寫回,這個時間有點長。工具的話,使用win32diskimager。

      刪除
    2. 作者已經移除這則留言。

      刪除
    3. 您好
      請問如果是想要用MCU寫入,PC讀出也是一樣嗎?
      在MCU端全卡進,PC端全卡出

      刪除
    4. MCU端怎麼可能,沒有記憶空間。PC的問題在於PC driver,要不就MSD不然就是Block device。MSD要FAT,無法取得FAT自身資料,只好用block device取全抓。MCU側就單純記憶體裝置,給Address及data count,它就輸出,SD卡前面還有其他命令。
      還是不懂的話,你就要回去看SPI Flash的Datasheet看它是如何運作的。

      刪除
    5. 作者已經移除這則留言。

      刪除
    6. 您好
      MCU端我的意思是,我想要完成用MCU當做Master透過SPI方式傳AD值到SD卡(Slave)做儲存的動作,想請教您的問題是MCU如果沒有寫FAT是否還是可以成功存取到SD卡呢?

      刪除
    7. 是可以。但SD卡沒有格式化成FAT,PC無法讀出來。你只能全碟存到PC,再找HEX編輯器去開。有用FATFS,就可以直接在PC讀取你存的檔案。

      刪除
    8. 才想到一個問題。我存成512MB的ADC資料檔案,無可用的HEX編輯器。所以就只好自己寫一個。
      你要是全碟存到PC,目前沒有軟體可以開如此大的檔案。所以你就無法得知ADC值了。

      刪除
  5. 作者已經移除這則留言。

    回覆刪除