[應用] 以 ESP32 無線網為基礎,存取共享CF卡的FTP系統

系統架構

        與虎尾科大教授合作開發 "以無線網路為基礎,透過 FTP 的方式存取共享的CF卡" 的系統,本系統由數個主要元件所組成,如下圖一所示,控制的核心為 ARM Cortex-M3 的晶片 STM32F207,無線通訊採用外接 ESP32S 的模組,參考[1][2],模組韌體負責處理 FTP socket連線。STM32F207 與無線模組之間的介面採用 UART 或 SPI 通訊,負責雙向的傳送資料。
        CF卡介面採用硬碟的 IDE 介面,參考[3],系統規劃兩個不同來源的訊號可以存取 CF卡,但是同一時間只能允許其中一個訊號可存取,於是設計上規劃一個 bus 切換電路。

圖一:系統方塊圖
圖一:系統方塊圖

       CF卡介面說明:首先,系統存取需檢查CF卡是否插在介面上面,可以透過 CF_nCD1 CF_nCD2 腳位訊號得知情況。CF_nCS0CF_nCS1腳位用來區分不同位址空間,控制IDE的暫存器被定義在不同的位址空間。CF_SA0~2就是位址線,CF_D0~15是資料線。
       CF卡的存取對應到 STM32F207FMSC介面,在韌體程式裡,將 FMSC介面規劃為16-bit Memory I/O存取介面,0x68000000這個位址範圍分配給CF_nCS0使用,而0x6C000000這個位址範圍分配給CF_nCS1使用。當硬體規劃好線路後,控制CF卡需要驅動程式才能進行讀寫,首先要把CF卡當成一個IDE硬碟來看待,然後設計驅動程式時需要了解如何存取IDE硬碟的指令,請參考[5][6]。

圖二:電路板俯視圖


      無線模組ESP32的韌體架構使用FreeRTOS做為系統的作業系統,韌體創建三個taskTaskBlinkTaskWiFiConnTaskFtp,如下圖所示。第一個用來讓模組上的燈號每秒閃爍一次,第二個是WiFi client連線到WiFi AP,成功後,板子上的D5燈號會亮。原始碼提供兩種方式,一種是WiFi station模式,另一種是WiFi AP模式,端看環境適合哪一種使用方式。第三個負責處理FTP的連線,以及FTP指令和資料傳輸。當WiFi連線後,模組做為FTP server負責監聽client的連線,但因為避免CF卡有共享的問題,目前韌體設計只能允許一個client連線。
圖三:ESP32 韌體架構圖

      STM32F207的韌體架構也是使用FreeRTOS做為系統的作業系統,韌體創建三個taskRoutineProcessComPortTxTaskComPortRxTask,如下圖所示。第一個用來讓模組上的燈號每秒閃爍一次,同時也偵測CF卡是否插入,一旦偵測到,必須讀取卡上的FAT32表。第二個是負責處理UART傳輸,將資料傳給ESP32模組,再由無線網路發送出去,創建一個名為UartTxqueue,存放傳送的資料,一段時間後利用DMA方式發送出去。第三個負責處理UART接收,接收來自ESP32模組的命令,創建一個名為UartRxqueue,存放來自中斷USART1_IRQHandler的資料。
圖四:STM32韌體架構圖



留言

此網誌的熱門文章

[筆記] ESP32 在 VS Code 開發環境的編譯與除錯

[筆記] Raspberry Pi 樹莓派的軟體開發

[應用] 在 ESP32 Audio 開發板的 VoIP 範例

[應用] 藍芽 BLE client/server 架構:BLE remote controller

[筆記] Visual Studio 遠端偵錯的設定步驟

[應用] STM32 DFU (Device Firmware Upgrade)

[模組] 無線資料傳輸:nRF905 和 nRF24L01 (以 Arduino 為控制器)