文章

顯示從 9月, 2017 起發佈的文章

[應用] 在 ARM 控制器上實現一個 FTP server

圖片
設計說明         最近實現在 STM32F207 控制器 (ARM-based) 上面實現一個簡易型的 FTP server,其目的是為了文件的傳輸。原本在一般電腦上的 FTP 是一個再平常不過的網路功能,但是在 embedded system 上如果沒有搭配 Linux 作業系統,通常要自行開發 FTP 才行。圖一所示就是 STM32F207 控制器,上面有網路介面和 SD 卡,我們希望從遠端能將儲存在 SD 卡上的文檔經由網路下載,而這個 SD 卡就類似硬碟的功能。         為了完成 FTP 服務器,在控制器上面的源代碼需要準備: 作業系統 、 檔案管理系統 、 TCP/IP 網路協定 。幸運地,STM32 晶片已經整合了 FreeRTOS 作業系統,LwIP 網路通訊協定,還有 FatFs 檔案管理系統,所以我們必須利用這些材料將 FTP 的功能完成。由於晶片速度和記憶體的容量有限,FTP 服務器必須考量到連線的數量,只能盡量簡化 FTP 的功能,否則整個系統容易崩潰。另外,FreeRTOS 作業系統是運行在多工環境,當 FTP 連線存取多個檔案時,必須考慮到檔案管理的保護 (critical section),這部分的設計如果沒保護好,檔案管理也可能會崩潰進而當機。底下是我們實現了一個簡易型 FTP server 的驗證,分別從命令列的 ftp 或者從檔案總管的 ftp 連線。 圖一:STM32F207 控制器 實現設計         我們從電腦上打開命令列,輸入 ftp xxx.xxx.xxx.xxx 就可以連上 FTP 服務器,成功連上後可以看到圖二的結果。因為設計為了方便簡單,所以不需要輸入使用者與密碼,直接就能登錄成功。在開發 FTP 服務器時,以最輕便的功能來考量,所以我們不可能把所有 FTP 協定的指令通通設計進去,只能實現一些常用的以及必要的指令,比如圖二和圖三的 dir / ls / quit 就是必要的指令。 圖二:命令列的 FTP 連上服務器 圖三:輸入 FTP 指令的結果         除了以命令列的方式執行 FTP,也可以從檔案總管上面輸入 ftp://xxx.xxx.xxx.xxx 來登錄FTP 服務器,如圖四所示。從檔案總管登錄的好處就是 Windows