文章

在聯發科 Filogic 130A 系統中,SDK 如何擴增更多模組和項目呢?

圖片
        有關 MediaTek 的 Filogic 130/130A 物聯網開發板的操作,在前一篇文章  "MediaTek Filogic 開發板的初次體驗"  已經學習如何搭建一個編譯系統 、 編譯 SDK 、 燒錄 firmware 、測試板子的指令,接下來如何新增一段自己的函數到 SDK 項目裡,就像在學習第一個程式 hello world 一樣。撰寫自己的程式碼,然後編譯 、 燒錄 、 再驗證,這樣才能逐漸豐富這塊開發板的內容,實現自己想要的功能。YouTube 教學影片的連結如下: https://youtu.be/1ZxxTD8Qxg4         第一步,我們先了解SDK文件夾的結構圖,下圖一所示,SDK 原始程式碼主要放在 kernel 和 middleware 目錄底下,另外放在 bga_sdk_demo 目錄下,包含主程式 main.c 以及開機初始化程式 startup_mt7933.s 。而編譯 SDK 時的配置文件 Makefile 放在  bga_sdk_demo\GCC 目錄底下,之後我們需要添加自己的函數檔案到這個 Makefile 內容裡。 圖一:SDK 文件夾的架構圖         接下來第二步,我們在 middleware 底下創建一個函數的目錄,名稱自行命名。根據 " Build Environment " 技術文件的描述,該目錄下要準備 Makefile 和 module.mk 檔案用於編譯配置,有關 Makefile 內容的設定需參考文件裡的範例,這裡就不多說明。同樣地,module.mk 也是參考文件裡的範例後創建即可,這個檔案的內容用來說明編譯時載入哪幾個我們寫的程式碼檔案,如 .c 和 .h 檔案。 圖二:新增自己設計的函數         第三步,要將前述的編譯配置加入到 SDK 項目裡,如此一來,當系統編譯時,便會把我們的函數檔案一起編譯了。打開 在  bga_sdk_demo\GCC 目錄底下的 Makefile,新增一段配置,如下圖所示。到目前為止,我們只是先把函數的編譯環境創建出來,還...

MediaTek Filogic 開發板的初次體驗,一個具有WiFi 6和藍芽 5.2功能的模組

圖片
        最近拿到聯發科 Filogic 130A 開發板,其核心晶片主要集成了無線通訊 Wi-Fi 6 和藍芽 5.2,光看這兩點就知道這晶片很新穎,原本設計就是以 ARM 架構的晶片(Cortex-M33等級以上),還整合了 DSP 核心,負責處理語音相關的運算,在應用上就多了無線通訊加語音的功能。 有關開發板的介紹與詳細資料,請連結到大大通網站  https://www.wpgdadatong.com/ 。接下來,我要從該網站下載 SDK 版本來試試看板子的操作。 搭建環境         SDK裏面包含了多達五十幾份的技術文件,一開始要怎麼進行呢?一般使用者若沒有原廠支持,確實有點麻煩。底下我整理了入手的步驟,第一步先搭建一個編譯 SDK 的環境,根據 " Build Environment " 文件,編譯必須在 Linux 系統或者 MSYS2 (可在Windows系統編譯),本人自己嘗試用 MSYS2 環境編譯,其實還要修改 SDK 的編譯檔案後才能成功編譯,過程對初學者恐怕不容易立刻入手。還是回到 Linux 系統上,Linux 要安裝好 Make 、Curl 、python...等軟體,而根據" Build Environment Virtual_Env " 文件提到,除了基本軟體外,必須安裝 venv virtualenv 軟體後,這樣才算完整的編譯環境。 Compile SDK         第二步就是編譯 SDK 程式,先要了解 Filogic 130/130A 是兩種封裝的晶片,在編譯時我們輸入的命令不同,一個是 QFN,一個是 BGA 。我在虛擬機的 Ubuntu 上編譯,輸入命令 ./build.sh mt7933_hdk bga_sdk_demo -o= IMGTOOL_ENV = ~/ venv/imgtool/bin/activate 後,便開始進行編譯,有可能會遇到出錯,這時查看 build.log 可以找出錯誤的原因。記得我第一次編譯發生的錯誤是 venv/imgtool 找不到,原來是編譯命令的 IMGTOOL_ENV 所設定的路徑不正確,建議最好設定絕對路徑以免出錯。  底下...

開源 RT Thread Studio,用於晶片的韌體開發

圖片
簡介         早期在開發韌體時,電腦環境需要自己架設 cross-compile 環境,並將編譯器的 tool chain 工具設定好路徑才能使用,參考前文  漫談 ARM cross compiler 環境 。不過,現在的開發環境人性化多了,市面上有 KEIL 、IAR...等 IDE 商業工具,我們編譯 ARM 核心晶片變得很便利。前陣子發現一套開源的 IDE 工具,稱為 RT-Thread Studio ,它支援 ARM 和 RISC-V 晶片的韌體編譯,號稱是開發物聯網的 IDE。下載並安裝 RT-Thread Studio 之後,這套工具外觀看起來就是一套類似 eclipse 的工具,對軟體開發者不會陌生。最後說一點,RT Thread Studio 吸引到我的原因,除了開源之外,主要還是使用 KEIL 和 IAR 這些 IDE 工具的開發成本越來越高,不得不找尋新的工具。 套件說明         圖一是創建一個新的項目,我們選用 STM32F103 的晶片來試試看。首先,在創建項目時,可以選定這是 RT-Thread 項目 、 BSP 項目或者無 RT-Thread 架構的項目。甚麼是 RT-Thread 架構?簡單說,把它想像成是作業系統 (OS) 的架構,底層各類 ARM 或 RISC-V 晶片的 BSP (Board Support Package) 當作驅動程式。此外,這架構還有一個 nano 版本,屬於相對精簡的版本,適合開發資源有限且運算量低的晶片。 圖一:創建一個新項目         下圖二是下載資源的視窗,也像 eclipse IDE 一樣,我們可以下載開發時所需要的資源,圖中顯示目前支援的交叉編譯工具有哪些,支援的除錯器又有哪些。一般來說 ARM 的編譯工具市面上已經很常見,不過近期 RISC-V 晶片開始火熱起來 (Intel 加入該領域),因此這套 IDE 非常適合拿來玩一玩 RISC-V 板子。 圖二:編譯的 tool chain 和除錯器         下圖三是目前 RT-Thread 架構支援的 BSP (Board Support Pa...

ESP32 內置記憶體的分區表 (partition table)

圖片
分區表 # ESP32 flash 內置分區表 (Partition Table)         ESP32 內建 flash,這個 flash 被規劃成數個區塊,稱為分區表(partition table)。ESP32 將分區表分成三類:第一為單一應用程式且無 OTA 區塊(single factory app, no OTA),圖一所示。第二為具有 OTA 定義的區塊(factory app, two OTA definitions),圖二所示,這被規劃做為韌體更新的分區表,可以更新應用程式區塊。第三為客戶自行定義的分區表。 圖一:單一應用程式的分區表 圖二:具有 OTA 的分區表         底下的影片詳細描述內建的分區表,表上有幾個部分是不會變動的,如:Bootloader 、 分區表 、 NVS資料區 、 硬體資料區 、 應用程式區...等。Bootloader 程式的大小約莫小於 0x7000 (28672 Bytes),開機後執行 Bootloader,然後跳到應用程式運行。到應用程式,可以存取 NVS 資料區,這是一塊非揮發性記憶空間,適合做為 config 之用。 函數         ESP-IDF component 提供 NVS 相關的函數,在範例程式中,有 C 語法調用的方式,也有 C++ 語法的調用。C 語法的做法,先透過 nvs_open / nvs_close 這對函數取得 NVS 的控制權杖,然後才能調用存取的函數,如:nvs_get_i8 、 nvs_get_i16 、 nvs_set_i8 、 nvs_set_i16...等,依據資料的大小來調用適合的存取函數。而 C++ 語法的做法,也是透過 open_nvs_handle 取得控制權,再來調用 get_item 、 set_item...等存取函數。

ESP-IDF 在 Visual Studio Code 教學 (不同於 ESP32 Arduino IDE)

# ESP32 在 VS Code 開發環境的編譯與除錯         距離上次寫關於 ESP-IDF 文章已經一年了,參考上面的連結,這期間 Espressif IDF 版本升了不少級數,在程式開發上又新增了一些便利的功能。首先在 Visual Studio Code 先安裝插件 Espressif IDF Configuration,如下圖影片所展示。現階段並沒有安裝最新的插件 v1.3.0,因為 VS Code 和 Espressif 之間似乎有不相容的問題,網上有人也提到遇到版本問題,所以我們現階段就安裝前一版本,等待一段時間後,問題解決了,再升級到最新版。         在 v1.2.0 Espressif 新增一個功能,創建新項目 (New Project),如下面影片所展示。我們從配置中能設定項目名稱,選定路徑,選擇使用的開發板型號,最後可以選擇由系統的 template 範例來創建新項目,或者自行手動添加項目所需的 Components 來創建。         創建項目後,我們可以在 VS Code 環境進行編譯,當然也可以在 Command Line 的終端機環境下編譯。在終端機環境下,我們必須先設定環境變數,執行 export.bat ,參考底下影片的操作。接著,我們就能以指令方式執行編譯," idf.py  build ",然後燒錄上傳也是用指令執行。使用時,可先查看 idf.py 這個程式的說明。         終端機方式並不是我們首選的環境,回到 VS Code 環境上。有關編譯項目的參數,我們要打開 SDK Configuration,請參考下面影片所展示。SDK Configuration 畫面裡所有的配置是來自 sdkconfig 這個文件,可以用一般的文件方式打開來看看,裡面的參數主要定義 ESP32 系統層級的配置。除了這個文件之外,每個子項目或路徑底下還有個別的參數,檔名為 Kconfig.projbuild ,這文件檔採用結構式的編排,當 SDK 配置時會將這個檔案也一起載入,我們可以比對 Kconfig 檔案內容與 SDK 呈現的欄位之間的關係。...

[筆記] 漫談 ARM cross compiler 環境

圖片
        在 Windows 環境下,如果要開發軟體,我們只需安裝微軟的 Visual Studio IDE,接著在這 IDE 編譯我們的程式就能在 x86 的環境下運行。由於 Visual Studio 編譯器是專為 x86/x64 晶片設計的,實際上它編譯出來的機器碼並不能放到 ARM 晶片上執行,所以我們需要找其他編譯器編譯出 ARM 能看得懂的機器碼。 機器碼         目前可編譯 ARM 晶片的編譯器以 GCC 為主,當然有些付費版的 IDE 也能編譯 ARM,如:KEIL 、IAR  (有專人管理的編譯器),  不過都還是源自 ARM compiler 網站 ,從網站上取得編譯器的原始碼,經過編譯後產生一套能編譯 ARM 晶片的編譯器 (說的有點複雜 !!)。簡單說,最終目的是製造出一個 ARM 編譯工具,但是要先取得原料後,再自行製造出這個工具。所幸現在網上有不少開發環境都能提供這 ARM 編譯的工具了,不需要我們重頭開始打造工具。然而,這類工具大多在 Linux 的環境下,所以想編譯成 ARM 機器碼只能到 Linux 環境下?         在 Windows 環境下,如果也想要 Linux 的環境,需要在 Win 系統安裝類 Unix 環境的軟體,如:cygwin 、MSYS2 、MinGW...等。底下以 MSYS2 軟體為例,其實它就是一個在 Win 系統的命令列,但是和 Win 系統提供的有何不同呢?請看圖一和圖二的環境變數,兩者環境變數完全不一樣,MSYS2 就是模擬一個 Linux 環境的命令列,操作指令也是 Linux 指令,但實際上指令已經轉為 Win 系統能執行了。有了這類 Linux 環境當然是對熟悉 Win 系統的人操作起來比較便利。 圖一:Windows的命令列 圖二:MSYS2的命令列 Unix-like環境         在 MSYS2 環境,我們要先安裝 ARM 相關的編譯工具,從 MSYS2 官網 下載安裝 package ,安裝這幾個套件  arm-none-eabi-gcc 、 arm-none-ea...

[筆記] 笙泉 Megawin 微控制器(ARM Cortex-M0)的系統開發

圖片
        Megawin 公司 推出的 MG32F02x 系列晶片是以 ARM Cortex-M0 為核心的微控制器,內建至少 32KB flash 存放程式碼與資料,包含常用的介面,如:UART 、 I2C 、 SPI 、 ADC...等,算是具備完整周邊的 MCU。 準備工作:         軟體套件 KEIL uVision5 ARM 版本,注意 ARM compiler 版本必須是5.06 update 7,筆者測試過update 6,會造成 ISP 代碼運行時出現異常。而 KEIL v5.34版本裡面就包含ARM compiler 5.06 update 7,所以下載最新的 KEIL 版本即可避開此問題。此外,開發過程還需要準備一個 M-Link Cortex-M0 的除錯器,以方便我們開發時可以設斷點 、 step by step 、 debug...。         安裝 KEIL ARM 軟體後,需要再載入 Megawin 的工具包。開啟 KEIL IDE,在選單上點選 Pack Installer工具按鈕,從這工具去載入 Megawin.CM0_DFP.2.0.8.pack 或最新版。成功後,這樣的 KEIL 開發環境才能支援 Megawin 晶片。這個 pack 裡面包含晶片所有介面的驅動程式碼,以及範例程式,我們可以從工具的選單複製所需的範例程式碼。 韌體燒錄方式:         在開發韌體時,透過 KEIL IDE 加上 M-Link debugger 便能下載韌體到晶片上,但是一般實用場景下不可能每次都用 KEIL 套件去燒錄韌體。目前 Megawin 提供兩種燒錄韌體的方式: ICP (In-Circuit Programming) 和 ISP (In-System Programming)。         ICP方式就是M-Link除錯器連接到晶片的SCL (PC4)和SDA (PC5)接腳,利用 ICP32_Programmer.exe 軟體工具將韌體燒錄到指定 AP flash記憶體區,如下圖。首先載入我們的韌體...