顯示具有 MCU 標籤的文章。 顯示所有文章
顯示具有 MCU 標籤的文章。 顯示所有文章

2014年6月9日

FatFs - FAT file system module - 筆記

FatFs Module 是日本的嵌入式系統工程師 ChaN 所撰寫的可用於商業的開放式程式碼。

架構如下圖:
圖檔來源:http://elm-chan.org/fsw/ff/00index_e.html
FatFs module 架構

圖檔來源:http://elm-chan.org/fsw/ff/en/appnote.html
FatFs module 程式碼檔案架構































檔案:
  1. ff.c、ff.h:FatFs module 主要的程式碼。
  2. diskio.c:使用者須自行在這添加與底層連接的函數。
  3. ffconf.h:設定及是否打開 FatFs 參數及函數。
     - _FS_READONLY:唯讀模式。
     - _USE_STRFUNC:開啟可使用字串函數。

函數:
  1. f_mount(&fp, "", 0):掛載儲存裝置 。
     - fp: 檔案結構指針。

  2. f_mount(NULL, "", 0):載卸儲存裝置。

  3. f_stat("file name", &filinfo):確認該檔案或資料夾是否存在,如不用file info 可輸入NULL。
     - filinfo: FILINFO型態變數 - 參考

  4. f_opendir(&fp, path):開啟資料夾
     - path:要開啟的資料夾名稱。

  5. f_readdir(&dir, &fno):讀取資料夾內所有檔案或資料夾名稱。
     - fno:名稱放置的陣列位址。

  4. f_open(&fp, "file name", mode):開啟檔案,並將檔案訊息放在結構指針。
     - fp: 檔案結構指針。
     - mode :
        1. FA_READ:  讀取檔案指令
        2. FA_WRITE:寫入檔案指令
        3. FA_OPEN_EXISTING:開啟檔案,不存在則開啟失敗。
        4. FA_OPEN_ALWAYS: 開啟檔案,不存在則建立新檔案。
        5. FA_CREATE_NEW:    建立檔案,已有相同名稱則失敗。
        6. FA_CREATE_ALWAYS:建立檔案,有相同名稱則覆蓋過去。

  5. f_close(&fp):關閉檔案,每次開啟檔案不使用時皆要關閉。

  6. f_sync(&fp):刷新檔案,與close 一樣的作用可是沒實際關閉檔案,可防止檔案遺失。
     -參考:http://elm-chan.org/fsw/ff/en/appnote.html - Critical Section

  7. f_read(&fp, &buff, data len, read len):讀取data len 數量byte 到Buffer。
     -buff:資料放置的陣列位址。
     -data len:要讀取的檔案Byte 數量。
     -read len:實際讀取到的Byte 數量,data len 超過檔案大小會只讀取到檔案的最後Byte。

  8. f_write(&fp, &buff, data len, write len):寫入data len 數量byte 到儲存裝置。
     -buff:資料放置的陣列位址。
     -data len:要寫入的檔案Byte 數量。
     -write len:實際寫入的Byte 數量,如儲存裝置已滿會停止寫入。

  9. f_puts(*str, &fp):寫入一字串到檔案。(#字串函數)

  10. f_printf(&fp, "%d", 123):使用方法與 printf() 一樣。(#字串函數)

File function return:
  1.   FR_OK: 所呼叫的Function 執行任務完成。
  2.   FR_DISK_ERR
  3.   FR_INT_ERR
  4.   FR_NOT_READY
  5.   FR_NO_FILE:沒有該檔案
  6.   FR_NO_PATH
  7.   FR_INVALID_NAME
  8.   FR_DENIED
  9.   FR_EXIST
  10. FR_INVALID_OBJECT
  11. FR_WRITE_PROTECTED
  12. FR_INVALID_DRIVE
  13. FR_NOT_ENABLED
  14. FR_NO_FILESYSTEM
  15. FR_MKFS_ABORTED
  16. FR_TIMEOUT
  17. FR_LOCKED
  18. FR_NOT_ENOUGH_CORE
  19. FR_TOO_MANY_OPEN_FILES
  20. FR_INVALID_PARAMETER

參考文獻及資料來源:
1. http://elm-chan.org/fsw/ff/00index_e.html

2014年1月13日

Keil 計算ROM (Flash) Size 及 RAM Size

Keil 編譯成功後會在 Build Output 事窗出現一條訊息:
Program Size: Code=5124 RO-data=696 RW-data=92 ZI-data=22316
這條訊息可以計算出所使用的 Code Size 。

Code:程式碼所佔的大小。
RO-data :程式中定義的常量 (Read Only)
RW-data:程式中有初始值的變數 (Read/Write)
ZI-data   :程式中沒初始值的變數 (Zero Initialize)

Code、RO-data、RW-data:這三個類型內容不可因斷電資料就消失,所以需要存在ROM裡。
RW-data、ZI-data:這兩個類型變數需在程式執行時可隨時改變用於計算,所以需在程式執行時放置在RAM裡。

所以:
ROM (Flash) Size = Code + RO-data + RW-data。
RAM Size = RW-data + ZI-data。

2014年1月7日

CAN Bus 筆記 (for STM32) - 文章撰寫中

CAN協定:
  1. Protocol:
   
CAN 2.0A
   
CAN 2.0B
















  2. 訊號狀態:
    閒置:TX電位H、隱性電平、雙線電壓差0V。
    通訊:TX電位L、顯性電平、雙線電壓差2V以上。

  3.優先權比較:
    當RX偵測到 L 則轉為監聽模式,直到該筆送完。
    仲裁優先權: ID越小優先權越高。
    防碰撞檢測方式: CSMA/CD

  4.Message Type : (參考2-P17)
    i.Data Frame: 傳送資料。
    ii.Remote Transmit Request Frame: 要求資料。
    iii.Error Frame: 送出錯誤檢查。
    iv.Overload Frame: 要求下筆資料需要延遲。
    v. Inter frame Space: 間距 (參考4)

  5.傳輸速率與距離:
    Bit Rate(Kbit/S)    Bus Length(M)
      1000                     30
      500                       100
      250                       250
      125                       500
      62.5                      1000
      5                           10000



2013年6月27日

ISP、IAP 區別


ISP : In System Programming (在系統燒錄)
IAP : In Application Programming (在軟體燒錄)

這兩種方式都不需要將要 MCU從PCB上取下即可做燒錄或除錯。

ISP:
利用燒錄器直接燒錄板子上的MCU,如 JTAG、SWD、SBW 。
通常需要些外部電路與 MCU內部燒錄介面連結,再經由 MCU內部的燒錄介面對內部的Memory 做資料的讀寫。

燒錄器透過MCU內部的JTAG界面對內部的Flash做讀寫動作
ISP 示意圖












IAP:
將 內部 Flash分成兩個區塊,一區放置燒錄內部 Flash的程式碼(Boot Loader),另一區才是主程式碼(main),可以經由 UART、USB或網路來做韌體更新,只需要給定特定的Command 或開機流程,就可以進入Boot Loader做自身燒寫的動作,可以不需要外加外部電路,不過相對的,可放置的Code size因此會變小。
透過內部Boot Loader 對Flash 做燒錄。
IAP 示意圖















注1. Boot Loader:通常要先經過 ISP燒錄到 Flash 或是 MCU出廠時已經預燒錄好,有些 MCU 如STM32 原廠有規劃一個區域放置 Boot Loader,這個區域是無法被更動的,只要依照原廠給的方式就可以進入Boot Loader模式,不需要事先燒錄Boot Loader。


參考資料:
http://www.360doc.com/content/11/0718/12/4384349_134257221.shtml