STM32MP157 的 Linux 系統處理器 -- 第一步建立開發編譯環境

STM32MP157開發板的資料非常多,本文主要是抓出建立一個開發環境的重點部分。MP157 晶片有兩顆ARM Cortext-A7核心800MHz和一顆Cortext-M4核心209MHz,其中A7運行Linux核心。由於其多核的架構適用於處理複雜的任務,比如智能家居、環境監控、安防、自動控制系統、智慧醫療監測等嵌入式的Linux應用。

首先認識啟動過程,當晶片通電啟動後,先跑TF-A(STM的安全開機流程),接著運行uboot開機程式(俗稱bootloader),此時uboot會載入Linux核心到SRAM,最後再運行Linux系統,周邊設備的驅動會被Linux系統帶起來,呈現給我們的就是Linux操作介面。

由於是ARM為基礎的晶片,編譯過程需要用ARM官方的編譯工具,也就是tool-chain。正點原子建議使用gcc-arm-9.2-2019.12-x86_64-arm-none- 版本,這是2019年底出的9.2版本,有分為LinuxWindows版。同時,STM官方有提供TF-AubootLinux內核的原始碼,為了避免編譯原始碼產生錯誤,最好用同一編譯版本9.2版,因為無法確認新版本編譯工具是否能成功編譯原始碼。最後留意一點,如果要修改ubootLinux內核驅動的話,最好在Ubuntu的環境底下進行原始碼的編譯。

Cross Compiler交叉編譯器

如果安裝到Windows環境,選Windows (mingw-w64-i686) hosted cross compilers底下的AArch32 target with hard float (mingw-w64-i686-arm-none-linux-gnueabihf.tar.xz)。然後,用WinRAR工具將它解壓縮到某一目錄下,接著在CMD視窗進到bin目錄後,敲入“arm-none-linux-gnueabihf-gcc  -v”查看gcc的版本號,如下圖。


如果安裝到Ubuntu環境,選x86_64 Linux hosted cross compilers底下的AArch32 target with hard float (x86_64-arm-none-linux-gnueabihf.tar.xz)。然後將它解壓縮到 /usr/local/arm目錄下,並且修改 /etc/profile 檔案內容,新增編譯的路徑,如下
export PATH=$PATH:/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin
然後在Ubuntu的終端機敲入“arm-none-linux-gnueabihf-gcc  -v ”就能看到編譯器的版本號。
 
LED
        試著控制板子上的LED燈,DS1是使用者可以用來操控的,我們在/sys/class/leds/user-led目錄下查到幾個文件(brightnesstrigger),就是用來控制燈號的。板子上的蜂鳴器控制方式也跟LED一樣,透過brightness來設定。

所謂開啟文件的方式來控制LED,如下面的範例所示,再以寫入brightness文件的方式設定LED亮或滅。


GPIO介面


按鍵事件
試著控制板子上的兩顆按鍵(Key0Key1),我們先查看系統所註冊的輸入設備,檢視這個檔案/proc/bus/input/devices內容,如下圖。一個名稱來自gpio的按鍵,對應到event0編號,因此我們要開啟/dev/input/event0這個文件來讀取實際按鍵的狀態,如下圖所示。



 ADC介面
試著控制板子上的ADC,先查看/sys/bus/iio/devices目錄,如下圖,底下有兩個設備編號,一個是ADC,另一個是DAC。再進到iio:device0的目錄底下,列出很多個參數名稱。我們開啟設備文件in_voltage19_rawin_voltage19_scale,並讀取內容數值後進行轉換,便能計算出電壓值。



TFT-LCD軟排線接到開發板上,軟排的金屬面朝下,組裝後,我們看到的樣貌,如下圖所呈現。USB-TTL的接口連到電腦的終端機,通訊鮑率115200bps 8-N-1,終端機上面會印出系統訊息。如果連網路的話,可以用SSH連線方式,登入名稱為root

留言

此網誌的熱門文章

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

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

[筆記] Android APP 藍芽範例說明 -- BluetoothChat

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

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

[筆記] Android APP BLE範例程式 -- BluetoothLeGatt

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