iMX8MQ MCUXpresso SDK開發詳解

原創 作者 iMX8MQ 2020-12-15 19:10:00 iMX8MQ

飛凌iMX8MQ 平臺內部有一個Cortex M4內核,支持使用MCUXpresso SDK進行開發。

MCUXpresso SDK是微控制器軟件支持的集合,它包含外圍驅動程序,RPMSG多核通信,以及FreeRTOS支持。可以查看SDK API文檔了解它實現的函數和結構體。

OKMX8MQ平臺可以使用以下工具鏈進行SDK開發:

Linux環境: Makefiles support with GCC revision v7-2017-q4-major from Arm Embedded

Windows環境:IAR Embedded Workbench for ARM version 8.30.2

一、使用ARM GCC工具編譯應用程序

Linux環境下,MCUXpresso SDK使用GCC工具進行編譯,下面以hello_world demo為例說明編譯的過程。

首先需要搭建Linux編譯環境:

1、安裝cmake

$ sudo apt-get install cmake

$ cmake --version

cmake 的版本要大于 3.0.x 才行。如果您的的版本小于3.0,可以參考下列步驟進行更新。

$ cd /tmp

$ wget https://cmake.org/files/v3.11/cmake-3.11.0-rc4-Linux-x86_64.tar.gz

$ tar zxvf cmake-3.11.0-rc4-Linux-x86_64.tar.gz

$ sudo mv cmake-3.11.0-rc4-Linux-x86_64 /opt/cmake-3.11

$ sudo ln -sf /opt/cmake-3.11/bin/* /usr/bin/

$ cmake --version

2、安裝GCC編譯器

將用戶資料工具目錄的 gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 拷貝到虛擬機/tmp 目錄。

$ cd /tmp

$ sudo tar xvf gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 -C /opt

3、設置環境變量

$ export ARMGCC_DIR=/opt/gcc-arm-none-eabi-7-2017-q4-major

$ export PATH=/opt/gcc-arm-none-eabi-7-2017-q4-major/bin:$PATH

設置完成可以看一下是否設置成功:

$ echo $ARMGCC_DIR

$ echo $PATH

4編譯

用戶資料原廠資料中的 SDK_2.8.0_EVK-MIMX8MQ.zip 拷貝到虛擬機 /home/forlinx/imx8mq 目錄下:

$ cd /home/forlinx/imx8mq

$ mkdir SDK_2.8.0_EVK-MIMX8MQ

$ mv SDK_2.8.0_EVK-MIMX8MQ.zip SDK_2.8.0_EVK-MIMX8MQ

$ cd SDK_2.8.0_EVK-MIMX8MQ

$ unzip SDK_2.8.0_EVK-MIMX8MQ.zip

$ cd boards/evkmimx8mq/demo_apps/hello_world/armgcc

$ ./build_debug.sh

  編譯出來的 hello_world.bin 文件在 ./debug 目錄下。

注意:這里也可以編譯其他版本,如build_ddr_debug.sh,只是在運行的時候會有差別。

二、 使用IARJ link編譯和 調試

參考官方提供的手冊 SDK_2.8.0_EVK-MIMX8MQ\docs\Getting Started with MCUXpresso SDK for EVK-MIMX8MQ》。

1、IARJlink官方工具版本要求

IAR請使用IAR embedded Workbench 8.30.2版本或更高版本,jlink官方工具版本請使用包含MIM8M6_M4設備的版本,我們使用的版本為JLink_Windows_V654cIAR embedded Workbench為付費軟件,請用戶自行購買安裝。Jlink官方工具用戶可以在jlink官方網站下載。

另外還需要NXP提供的SDK_2.8.0_EVK-MIMX8MQ,用戶資料內已經提供。

2、IAR通過Jlink運行測試程序

步驟一、打開工程

1.  打開IAR

打開IAR 

2.  File”菜單下選擇“Open Workspace”,選擇SDK_2.8.0_EVK-MIMX8MQ\boards\evkmimx8mq\demo_apps\hello_world\iar\hello_world.eww

選擇Open Workspace 

3.  選擇debug選項

選擇debug選項 

步驟   配置工程

按下ALT+F7快捷鍵打開配置界面。

1.  設置General Options選項配置:

設置General Options選項配置 

2. 設置linker選項配置:

設置linker選項配置 

點擊“Edit...”

選擇MIMX8MQ6xxxJZ_cm4_ddr_ram.icf、MIMX8MQ6xxxJZ_cm4_ram.icf,不同的選項會生成的鏡像會運行在不同的存儲中(ddrram)。

3.  設置Debugger選項配置:

設置Debugger選項配置 

4. 設置J-Link/J-Trace選項配置:

設置J-Link/J-Trace選項配置 

配置完成后點擊OK”。

步驟三、編譯并運行工程

注意:調試M4程序,iMX8MQ開發板不能啟動到Linux內核階段,需要停止在uboot(啟動時,在調試串口按下空格鍵)。

調試M4程序 

1.  點擊“Make”編譯工程,工程編譯完成,且無報錯:

點擊Make編譯工程 

2. 點擊“Download and Debug”按鈕:

點擊Download and Debug按鈕 

3. 提示設置 J-Link 選擇設備:

提示設置 J-Link 選擇設備 

點擊OK 

4. 選擇“MIMX8MQ6_M4”設備:

選擇MIMX8MQ6_M4設備 

5. 運行測試程序:

運行測試程序 

6. M4核調試串口查看運行結果:

串口信息 

三、使用 U -boot運行應用程序

可以在iMX8MQ開發板啟動的時候進入u-boot命令行,通過u-boot命令來將bin文件加載到M4中并運行,下面以hello_world.bin程序為例說明運行的過程。

注意:M4程序運行可能和A53有資源沖突,如某個接口在M4中已經使用,A53中不要再次調用此接口。M4程序運行在DDR中,需要Linux中預留這部分內存。在系統燒寫的設備樹ok8mq-evk-rpmsg.dtb中有配置。我們下面測試都是使用此設備樹測試M4程序。

uboot命令行內輸入下列命令修改設備樹:

$ setenv fdt_file ok8mq-evk-rpmsg.dtb

$ saveenv

1、 準備測試用M4程序

采用第一或者第二中的方法生成運行在DDRramhello_world.bin并將它們分別命名為hello_world_ddr.bin和hello_world_ram.bin。

2 串口連接

由于hello_world程序中使用了uart2,因此在開始測試之前請連接uart2PC的串口。并使用串口調試工具打開對應的COM口,波特率等參數設置和OKMX8MQ Debug口參數相同。

3 將編譯出來的hello_world_ddr.bin和hello_world_ram.bin拷貝到U盤(Fat32的根目錄下面,將U盤插到開發板上,重啟iMX8MQ開發板,停在u-boot命令行

4 u-boot命令行執行如下命令

對于debug/release版本的bin文件,它運行在TCM,執行下列命令:

$ usb start

$ fatload usb 0:1 0x48000000 hello_world_ram.bin

$ cp.b 0x48000000 0x7e0000 0x20000

$ bootaux 0x7e0000

終端的執行:

終端的執行 

uart2的調試串口工具上可以看到打印信息如下:

打印信息 

對于ddr_debug/ddr_release版本的bin文件,它運行在DDR4,執行下列命令:

$setenv fdt_file ok8mq-evk-rpmsg.dtb

$ saveenv

$ usb start

$ fatload usb 0:1 0x80000000 hello_world_ddr.bin

$ dcache flush

$ bootaux 0x80000000

終端的執行:

終端的執行 

uart2的調試串口工具上可以看到打印信息如下:

打印信息 

四、Uboot自動啟動M4程序

    在制作系統鏡像的時候,會將源碼包內images/m4/文件夾下的文件寫入到boot.img鏡像內,該鏡像是rootfs.sdcard的一部分。我們把鏡像燒寫到emmc后,這些m4程序的鏡像就在emmcfat32分區內存在。Uboot啟動過程中會運行m4_run,將m4_run設置為啟動m4程序,啟動后uboot會啟動M4程序。

以hello_world例程示例,按下面的方法設置uboot環境變量后,uboot會自動啟動M4程序。

hello_world程序的鏡像,我們已經默認添加到源碼的images/m4/文件夾下,所以我們的鏡像內emmc的分區1內的m4文件夾下包含了hello_world的鏡像,hello_world_ram.bin和hello_world_ddr.bin

ram啟動M4程序。

$ setenv m4_run 'mmc dev 0; fatload mmc 0:1 0x48000000 m4/hello_world_ram.bin; cp.b 0x48000000 0x7e0000 0x20000; bootaux 0x7e0000 '

$ saveenv

ddr啟動M4程序。

$ setenv m4_run 'mmc dev 0; fatload mmc 0:1 0x80000000 m4/hello_world_ddr.bin; dcache flush; bootaux 0x80000000'

$ saveenv

1:用戶添加自己編譯的鏡像放到images/m4/文件夾下,編輯生成鏡像,燒寫后就會在emmcfat分區內,啟動的時候根據編譯的為ddr版或ram版選擇m4_run的設置方法,并將m4_run命令內的m4鏡像名字替換成自己編譯的m4鏡像的名字。

2:可以在系統啟動后查看fat分區內包含的鏡像,也可以通過cp命令添加鏡像。

查看鏡像:

$ ls /run/media/mmcblk0p1/m4

查看鏡像 

復制鏡像到文件夾:

$ cp /run/media/sda1/m4_flash.bin /run/media/mmcblk0p1/m4/

五、異構多核通信測試

使用RPMsgRemote Processor Messaging)實現Cortex A53Cortex M4進行通信。

RPMsg是一種基于virtio的消息傳遞總線,它允許內核驅動程序與系統上可用的遠程處理器(如Cortex M4)進行通信。下圖是一個多核通信架構:

多核通信架構 

飛凌iMX8MQMCUXpresso SDK中有一個demorpmsg_lite_pingpong_rtos,它實現了Cortex A53Cortex M4的數據收發,二者使用了共享內存,并且在Cortex M4上運行了一個FreeRTOS Task

Cortex A53端通過內核模塊的方式實現該功能,代碼位于:drivers/rpmsg/imx_rpmsg_pingpong.c

下面 Arm GCC 方式編譯示例

進入以下目錄:

$ cd boards/evkmimx8mq/multicore_examples/rpmsg_lite_pingpong_rtos/linux_remote/armgcc

編譯debug版本的bin文件:

$ ./build_debug.sh

$ cd debug

$ ls -l

將編譯出來的bin文件rpmsg_lite_pingpong_rtos_linux_remote.bin拷貝到U盤(Fat32的根目錄下面,啟動開發板停在u-boot命令行。

$ setenv fdt_file ok8mq-evk-rpmsg.dtb

$ saveenv

$ usb start

$ fatload usb 0:1 0x48000000 rpmsg_lite_pingpong_rtos_linux_remote.bin

$ cp.b 0x48000000 0x7e0000 0x20000

$ bootaux 0x7e0000

運行bin文件后,可以在uart2的串口終端看到以下輸出:

uart2串口終端輸出 

然后在A53 U-boot命令行輸入 boot 啟動kernel,此時可以在Cortex M4的串口終端看到以下輸出:

Cortex M4的串口終端輸出 

后在Cortex A53的串口終端加載以下內核模塊:

$ modprobe imx_rpmsg_pingpong

模塊加載之后,Cortex A53開始跟Cortex M4進行數據傳輸,此時可以在Cortex M4的串口終端看到以下輸出:

Cortex M4的串口終端輸出 

此時可以在Cortex A53的串口終端看到以下輸出:

Cortex A53的串口終端輸出 

六、FreeRTOS 應用程序測試

飛凌iMX8MQ板卡內部有一個Cortex M4核,可以在上面運行FreeRTOS 應用程序。

下面以freertos_swtimer demo為例測試FreeRTOS

進入目錄:

$ cd boards/evkmimx8mq/rtos_examples/freertos_swtimer/armgcc

編譯debug版本的bin文件:

$ ./build_debug.sh

$ cd debug

$ ls -l

將編譯出來的bin文件 freertos_swtimer.bin 拷貝到U盤(FAT32的根目錄下面。U盤插入開發板USB Host接口,啟動開發板停在u-boot命令行。

$ setenv fdt_file ok8mq-evk-rpmsg.dtb

$ saveenv

$ usb start

$ fatload usb 0:1 0x48000000 freertos_swtimer.bin

$ cp.b 0x48000000 0x7e0000 0x20000

$ fbootaux 0x7e0000

此時可以在Cortex M4的串口終端看到以下輸出:

打印出Tick字符  

可以看到終端周期性的打印出Tick字符,說明FreeRTOS 應用程序中的定時器任務正在運行。


原創:iMX8MQ 2020-12-15 19:10:00


相關產品 >

  • OKMX8MQ-C開發板

    飛凌嵌入式提供基于 NXP/Freescale iMX8、i.MX 8MQ處理器設計ARM核心板FETMX8MQ-C。i.MX8M處理器具有音頻、語音和視頻處理功能,飛凌iMX8核心板充分發揮NXP iMX8 系列 ARM 處理器性能,對功能做了優化。提供10~15年產品長期供貨計劃。工作環境溫度為-40℃~85℃,滿足工業及泛工業場景應用。 了解詳情
    OKMX8MQ-C開發板
  • FETMX8MQ-C核心板

    基于 NXP/Freescale iMX8、 iMX8X、i.MX 8MQ處理器的ARM核心板。 四核ARM Cortex-A53 ,主頻最高1.3GHz,板載2GB RAM,8GB ROM;工作環境溫度為-40℃~85℃,滿足工業及泛工業場景應用。i.MX8M處理器具有音頻、語音和視頻處理功能,提供高水平的音頻保真度,適用于無風扇運行,散熱系統成本低、電池壽命長。具有高速接口可提供靈活連接等優勢,并且提供10~15年產品長期供貨計劃。
    了解詳情
    FETMX8MQ-C核心板
  • OKMX8MP-C開發板

    內置NPU、ISP,AI計算能力高達2.3TOPS|飛凌嵌入式i.MX8MP 系列-NXP iMX8M Plus 開發板 基于高性能低功耗工業級iMX8MP核心板設計,支持多種多種高速通信接口。iMX8MP開發板內置NPU,AI計算能力2.3TOPS,支持4K,支持雙圖像信號處理器(ISP),是一款支持LinuxQT/android操作系統的iMX8MP開發板。

    了解詳情
    OKMX8MP-C開發板
  • FETMX8MP-C核心板

    iMX8MP核心板基于 NXP  i.MX 8M Plus 處理器設計,  采用4核Cortex-A53 和 Cortex-M7架構。支持雙千兆網口,iMX8MP性能強勁最高運行速率可達2.3TOPS,并且i.MX8MP功耗更低≤2W 。iMX 8M Plus系列專注于機器學習和視覺、高級多媒體以及具有高可靠性的工業自動化。它旨在滿足智慧家庭、樓宇、城市和工業4.0應用的需求。飛凌iMX8MP核心板提供用戶手冊,iMX8MP原理圖,引腳定義等。
    了解詳情
    FETMX8MP-C核心板

推薦閱讀 換一批 換一批