文章

顯示從 3月, 2022 起發佈的文章

Tutorial Video:聯發科 Filogic 130A(MT7933) 教學影片

圖片
        近期研究聯發科 Filogic 130A (MT7933) 的紀錄,如下,它是一套智慧音箱的解決方案。首先,核心晶片是採用聯發科 MT7931 / MT7933,集成了無線網路 WiFi 6、藍芽、語音處理 、DSP  ...等功能到一顆晶片裡 。另外,一般 MCU 常見的周邊介面,如:SPI / I2C / ADC / UART ...通訊介面也同樣支援,SDIO 資料儲存介面也具備。此外,開發板除了具有撥放音樂的介面,晶片核心還提供語音辨識的功能。         下表是 MT7933 晶片內部的規格,雙核心 ARM Cortex-M33 和 HiFi4 DSP 處理器,內建的 flash 容量高達 16MB,以及內部記憶體 SRAM,相較其他的 MCU 廠商,這容量真是佛心來的,不怕記憶空間不夠,適合語音控制方面的應用。除了這顆晶片之外,另一顆同等級的 MT7931 ,則是內建單核心 Cortex-M33,少了 HiFi4 DSP 處理器,但是做為常規的 MCU 控制器,性能也是很強大。由這兩顆晶片所設計出的開發板,分別稱為 Filogic 130 (MT7931) 和 Filogic 130A (MT7933)。 表一:MT7933 晶片規格 (取自 Acsip 網站)

WiFi Modbus 應用:在 Filogic 開發板, 實現無線連網的資料收集

圖片
        本文將在聯發科的 Filogic 130A 開發板上實現一個無線連網的資料收集方案, 利用工業常見的 Modbus 通訊協定收集產線設備的數據。隨著工廠智能化的發展,生產線上的設備,如:PLC 、 測儀器...都具有聯網的功能,並能提供即時的產線資訊輸出,因此後端需要一個資料收集的方案將產線資訊整合。Filogic 130A 這塊板子除了無線連網功能外,還有 SD 卡介面和 FAT 檔案管理系統,請參考影片連結: "Implement SD + FTP server on Filogic 130A" https://youtu.be/C8EW4fvFUds 。接下來,本文要介紹板子的 SDK [1] 所提供的 DNS (Domain Name System) 和 NTP (Network Time Procotol),並實現 Modbus 通訊功能,最後將數據資料依據當下的時間實時地記錄到 SD 卡裡面。完整的教學影片連結: https://youtu.be/TPryHb3H2oM DSN & NTP         關於數據收集,首先遇到第一個問題是時間,板子需要一個本地時間。因此,我們採用 NTP 協定取得網路時間,以便板子開機後能同步為本地時間。再者,另一個問題是 NTP 服務器常以 domain name 方式呈現,非 IP 位址方式。所以,我們還需要 DNS 的功能,將服務器的網域名稱轉成實體 IP 位址,這樣才能取得網路時間。這段正是要說明這塊 Filogic 開發板如何做到 DNS 和 NTP 的功能。         在 Filogic 提供的 SDK 裡頭,它整合了一個第三方開源碼,為 LwIP (Light Weight IP),是一個 TCP/IP protocol stack。DNS 正是裡面所支援的通訊協定之一,因此我們只要呼叫 LwIP 函數庫就可以使用 DNS 的服務,如下所示。調用 dns_gethostbyname 函數,再給定一個自己的 callback 函數,這樣就能取得 domain name 的 IP 位址了。                dns_init ();   // 初始化 DNS      ipaddr_aton("8.8.8.8", &

在聯發科 Filogic 物聯網板上, 實現 WiFi 功能的開發與測試

圖片
        在前一篇文章  "在 MediaTek Filogic 130A 系統中,如何新增模組到 SDK 項目裡" https://han-ya.blogspot.com/2022/02/mediatek-filogic-130a-sdk.html  學習如何新增自己程式的 module,基於前文所創建的範例,我們往下延伸學習操作這塊板子的 WiFi 無線網路的功能。本文分成四段,開發板的 command line interface (CLI) 、WiFi scan、WiFi連線、建立TCP連線與測試。為了更清楚說明如何在 Filogic 板子上設計開發無線網路的程式,底下提供完整的教學影片連結。 教學影片連結: https://youtu.be/THd5xSAUOyk CLI (Command Line)         當板子接上 COM port 後,我們可以透過這個介面輸入指令,開發板就會運行指令的動作。其中,"wifi" 是一個指令集,當輸入 " wifi init " 後,板子的系統就會對 WiFi physical layer 做初始化的動作,接著開始掃描四周環境,檢查環境的無線網路 SSID,一直掃描,直到我們輸入 " wifi deinit " 結束這過程。通常,這種 CLI 指令多半用來 debug 或者熟悉開發板時候才會操作,我們開發程式不可能用 CLI 來設計,必須呼叫相關的 API 函數,設計出符合自己功能的程式碼。 WiFi scan         我們開發 WiFi scan 需要調用底下幾個 API 函數,首先要將 wifi_api.h 和 nvdm.h 的標頭檔包含進來,接著呼叫的步驟,如下: printf("\n1. wifi_config_init called -----------------\n\n"); if( wifi_config_init (&wifi_config) != 0 )  // 從 flash 載入無線網路的配置 { printf("wifi_config_init failed !!!!!!\n"); } printf("