激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

NXP i.MX8M Plus Cortex-M7應用開發詳解

 2025-5-28 15:15:28     作者:劉乾坤     聯系作者    

 1、概述

i.MX8M Plus是NXP推出的異構多核處理器,配置了主頻高達1.6GHz的四核ARM Cortex-A53和一顆運行速度800MHz、帶硬件浮點運算的MCU——ARM Cotex-M7內核。本文將基于英創的i.MX8M Plus主板ESM8400,詳細介紹NXP i.MX8M Plus Cortex-M7程序的開發方法,包括開發環境搭建,如何編譯/調試,以及如何自動啟動MCU應用程序等內容。

1.png

ESM8400是英創基于i.MX8M Plus處理器開發的64位高性能工控主板,與市面上其他i.MX8M Plus核心板不同,ESM8400直接支持4網口、7串口、同時板載了獨立硬件RTC,獨立的觸摸驅動芯片等必要外設。ESM8400除支持基于Linux-6.6.x內核的多種文件系統,包括Yocto Rootfs、Ubuntu以及Debian桌面系統外,還獨家支持Windows 10 IoT企業版操作系統。


 2、MCU SDK

NXP提供的 MCU SDK是一個綜合的軟件開發包,其中包含了i.MX8M系列處理器MCU初始化代碼,外設驅動程序,已經移植好的FreeRTOS操作系統和多核通訊協議棧RPMsg等。

2.png

圖 1:NXP MCU SDK Layers

       

MCU SDK包含了對基于i.MX8M系列處理器的多個主板的支持,各主板對應的硬件定義和例程位于<install_dir>/boards/<board_name>目錄中。

3.png

圖 2:boards目錄


evkmimx8mp是NXP i.MX8M Plus官方評估板,我們根據ESM8400的硬件資源,在參考evkmimx8mp的基上,對代碼結構和封裝進行了進一步優化,在<install_dir>/boards下創建了esm8400_m7目錄, 基于esm8400_m7目錄,用戶可以更加簡便、快速的進行m7程序開發。

esm8400_m7目錄內容及簡要說明如下:

4.png

esm8000_m7目錄中除包含demo_apps、driver_examples、drivers、multicore_examples 4個子目錄外,還包含以下公共文件:    

l   board.c/h: board.h包含了ESM8400在M7側所有可用的硬件資源宏定義,包括調試串口、SPI、PWM、可用的GPIO資源等。board.c中包含了各硬件外設的時鐘及RDC初始化代碼。

l  clock_freq.c/h:包含了封裝好的用于設置和獲取外設當前時鐘頻率的功能函數。

l  ESM8400_*.ld:ARM GCC鏈接文件,配置M7程序的CODE及DATA段。

l  pin_mux.c/h:CPU管腳的復用設置。

l  utilities.c/h:一些有用的實例程序,比如CPU使用率統計等。

ESM8400_m7下的所有examples和demo都將引用上述公共文件,所以一般不建議修改。


 3、M7軟件開發環境搭建

i.MX8M Plus Cortex-M7應用程序開發與普通的Cortex-M7單片機程序的開發完全一樣,本文僅以使用ARM GCC工具鏈為例,對開發環境的搭建進行說明。


3.1 Win10 安裝Linux子系統 

<install_dir>/boards/esm8400_m7下的例子程序是在Win10的Linux子系統(WSL)環境下編譯測試的,使用的Linux版本為Ubuntu 18.04,如果用戶已經有了Linux開發主機,請跳過此小節。

Win10安裝Linux子系統請參考:https://docs.microsoft.com/zh-cn/windows/wsl/


3.2 Win10 安裝ARM GCC及CMake 

l  根據所用開發主機的操作系統,下載對應的GUN Arm Embedded工具鏈,下載地址:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads 。這里以64位Win10操作系統下的Ubuntu 18.04 Linux子系統舉例 ,下載對應的工具包gcc-arm-none-eabi-10-2020-q4-major-x84_64-Linux.tar.bz2到D盤根目錄。

5.png

l  解壓tarball,執行:

sudo tar xjf /mnt/d/gcc-arm-none-eabi-10-2020-q4-major-x86_64-Linux.tar.bz2 -C /usr/share

l  建軟鏈接,執行:

sudo ln -s /usr/share/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc  /usr/bin/arm-none-edbi-gcc

sudo ln -s /usr/share/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-g++  /usr/bin/arm-none-edbi-g++

sudo ln -s /usr/share/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gdb  /usr/bin/arm-none-edbi-gdb

sudo ln -s /usr/share/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-size  /usr/bin/arm-none-edbi-size

l  可通過--version命令查看gcc版本:arm-none-edbi-gcc --version

l  安裝CMake,執行:sudo apt-get install cmake


3.3 使用ARM GCC編譯Hello_world 

解壓英創提供的SDK_1.0.0_ESM8400-MCU.tar.gz軟件包,在編譯任何工程之前,需要先設置一次編譯工具鏈的環境變量,執行:

export ARMGCC_DIR=/usr/share/gcc-arm-none-eabi-10-2020-q4-major

接下來就可編譯SDK中的例程了,進入<install_dir>/boards/esm8400_m7/demo_apps/ hello_world/armgcc目錄:

執行./build_realse.sh,編譯工具將基于ESM8400_tcm.ld文件在armgcc目錄下自動創建release子目錄,并在其下生成在ESM8400 TCM上運行的hello_world.bin文件。

執行./build_ddr_realse.sh,編譯工具將基于ESM8400_ddr_ram.ld在armgcc目錄下自動創建ddr_release子目錄,并在其下生成在ESM8400 DDR上運行的hello_world.bin文件。


3.4 在WSL2中編譯vs在Windows文件系統中編譯 

WSL2使用了最新的虛擬技術在經量化的虛擬機中運行Linux內核,WSL2在多個方面與微軟最初推出的WSL1相比都更具優勢,但除了跨操作系統文件系統性能。詳細說明請參考:https://docs.microsoft.com/zh-cn/windows/wsl/compare-versions

我們將MCU SDK分別解壓到WSL2 Linux文件系統中和Windows文件系統中進行測試,與將文件存放在Windows中跨文件系統編譯相比,把文件存放在WSL中直接編譯速度要快5倍以上。


 4、運行i.MX8M plus Cortex-M7應用程序

在M7程序開發過程中,可利用U-Boot直接加載并運行編譯好的M7應用程序,通過PRINTF輸出打印信息來調試應用程序。程序發布時可利用Linux的flash_opt工具,將要發布的M7應用程序bin文件固化到系統eMMC中,U-Boot在啟動時會先自動啟動M7程序,再啟動Linux系統。


4.1 硬件連接 

最基本的需要連接并配置好網絡、連接ESM8400控制臺串口(調試串口)和給系統提供電源。ESM8400的UART2為M7程序的調試串口,在M7程序中調用PRINTF將從此串口輸出信息。UART2缺省配置為RS232電平,通訊格式與ESM8400的控制臺串口完全一樣,默認為115200-8-N-1。為了查看M7輸出的打印信息,需要再用一條串口線將ESM8400開發評估底板上的UART2與開發主機的串口相連。


4.2 在U-boot中通過TFTP下載并運行M7應用程序 

安裝TFTP Server

用戶可以在開發主板上選擇自己熟悉的TFTP Server工具,這里以在Win10下使用Tfptd64配置為例,只需要設置好目錄,就可以使用TFTP服務了。(可能需要合理配置開發主機的防火墻)

啟動Tfptd64,點擊Setting,在TFTP界面點擊Browse設置TFTP目錄。Tfptd64支持直接選擇WSL系統下的文件目錄,這里直接選擇SDK安裝目錄下的boards文件夾:<install_dir>/boards。

6.png

通過U-boot在TCM上運行M7應用程序

TCM(Cortex-M Core’s Tightly Coupled Memory)是i.MX8M Plus CPU片內為Cortex-M內核使用的一塊專用內存,包含128KBytes的代碼存儲空間(CODE)和128KBytes運行內存空間(DATA)。連接好網線、ESM8400控制終端串口(這里連接到開發主機的COM1)、M7調試串口(這里連接到開發主機的COM3),短接開發評估底板上的JP1,以便讓ESM8400運行在調試模式,然后給ESM8400上電,在開發主機COM1串口工具上按空格鍵進入ESM8400 U-boot,依次執行如下命令:

a.       setenv serverip 192.168.201.211     // 設置TFTP Server IP地址(開發主板IP地址)

b.       setenv ipaddr 192.168.201.213       // 設置ESM8400 網口IP地址(與開發主機同一網段)

c.        saveenv  // 可以使用saveenv命令保存環境變量,系統下次啟動時就不需要重復設置IP地址了。

d.       tftp 0x48000000 esm8400_m7/demo_apps/hello_world/armgcc/release/hello_world.bin    // 從開發主機上下載hello_world.bin到ESM8400內存中

e.      cp.b 0x48000000 0x7e0000 ${filesize}  // 將下載的內容copy到i.MX8M Plus的TCM

f.        bootaux 0x7e0000      // 從TCM啟動M7程序

 7.png

如果程序正常啟動運行,在開發主機的COM3口上(連接到了M7的調試串口ESM8400-UART2) 可以看到程序運行時輸出的Hello World! 信息。

8.png

通過U-boot在DDR上運行M7應用程序

連接好網線、ESM8400控制終端串口(這里連接到開發主機的COM1)、M7調試串口(這里連接到開發主機的COM3),短接開發評估底板上的JP1,以便讓ESM8400運行在調試模式,然后給ESM8400上電,在開發主板COM1串口工具上按空格鍵進入ESM8400 U-boot,依次執行如下命令:

·  DDR

a.       setenv serverip 192.168.201.211     // 設置TFTP Server IP地址(開發主板IP地址)

b.       setenv ipaddr 192.168.201.213       // 設置ESM8400 網口IP地址(與開發主機同一網段)

c.        saveenv  // 可以使用saveenv命令保存環境變量,系統下次啟動時就不需要重復設置IP地址了。

d.       tftp 0x80000000 esm8400_m7/demo_apps/hello_world/armgcc/ddr_release/hello_world.bin    // 從開發主機上下載hello_world.bin到ESM8400內存中

e.       bootaux 0x80000000       //從系統DDR 0x80000000地址啟動M7程序


4.3 M7程序固化及開機自動運行 

如前所述,M7程序可以加載到i.MX8M Plus的TCM或系統DDR中運行,各個memory區域提供的程序CODE和DATA空間如下表所示:

配置

CODE

DATA

A53   & M7 Sheard Memory

CoreMark

TCM

128K

(007E0000-007FFFFF)

128K

(00800000-0081FFFF)

16M

(80000000-0x80FFFFFF)

2322.88

DDR

2MB

(80000000-801FFFFF)

2MB

(80200000-803FFFFF)

12M

(80400000-0x80FFFFFF)

2354.88

M7程序運行位置由<install_dir>/boards/<board_name>/*.ld鏈接文件決定。

對于M7程序的固化,在進入Linux系統后,可以調用flash_opt命令進行設置。flash_opt在將M7程序固化到系統eMMC的同時,會根據燒寫文件的尾綴進行相應設置,以便在系統啟動時能根據設置自動將M7程序加載到TCM或DDR中運行。具體步驟為:將需要燒寫的程序(以hello_world.bin為例),拷貝到主板可以訪問的目錄中(比如/mnt/mmc),并根據程序實際運行的位置對程序重命名,如果程序是在TCM中運行,則需要命名為hello_world_tcm.bin,如果是在DDR在運行,則命名為hello_world_ddr.bin。重命名只是為了滿足flash_opt對命令格式的要求,程序在編譯時必須根據程序加載的位置選擇對應的*.ld文件。

執行燒寫命令(以燒寫到TCM為例):

#>flash_opt m7 hello_world_tcm.bin

操作完成后,就可以重啟主板,此后系統在啟動時就會自動運行M7程序hello_world.bin了,如果要更新程序,重復上述操作即可。

M7程序一旦通過flash_opt固化到系統中,在系統每次啟動時M7程序就會自動加載運行,此時就不能再在U-boot中手動下載、啟動M7程序進行調試。如果要重新在U-boot中調試M7程序,需要在Linux中執行#>flash_opt m7 dump.bin來擦除先前寫入的應用程序,dump.bin實際上是一個內容全為0xFF的二進行文件。

主站蜘蛛池模板: 91仓本c仔约高挑嫩模在线| 最新九九精品| 亚洲国产成人在线| 国产自自拍| 黄色片香蕉视频| 国产精品成人嫩妇| 免费一级毛片麻豆精品| 亚洲视频综合| 一本高清在线| 日本特黄特色大片免费视频| sese视频在线观看| 女人国产香蕉久久精品| 亚洲精品黄色| 8mav福利视频在线播放| 久久涩综合| 日韩中文字幕在线不卡| 亚洲国产综合视频| 玖玖国产精品视频| 国产一区二区三区四区五区六区 | 久草视频网址| 正在播放一区| 成人在线网站| 我要看一级毛片| 欧美毛片在线播放观看| 国产只有精品| 国产免费看网站v片不遮挡| 草久久免费视频| 久久亚洲国产精品| 日韩欧美在线观看综合网另类| 亚洲天天综合| 49pao强力在线高清基地| 一级α一级α片免费观看网站| 日韩中文字幕久久精品| 毛片美国| 毛片网在线| 永久免费视频| 永久在线播放| 毛片亚洲毛片亚洲毛片| 亚洲一二三区在线观看| 免费超级淫片日本高清视频| 国产a一级毛片含羞草传媒|