<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • 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的二進行文件。

    国产成人精品男人免费| 国产成人无码精品一区在线观看| 国内精品免费在线观看| 国产精品久久久久久久久久久不卡 | 午夜精品久久久久久久久| 国产精品中文字幕在线| 99热精品在线播放| 国产啪亚洲国产精品无码| 国产精品美女久久福利网站| 国产AV午夜精品一区二区三区| 亚洲麻豆精品国偷自产在线91| 69久久精品无码一区二区| 性欧洲精品videos| 在线精品无码字幕无码AV| 伊人 久久 精品| 国产精品av一区二区三区不卡蜜| 99精品在线免费观看| 538prom精品视频线放| 国产亚洲午夜精品| 亚洲精品乱码久久久久久V| 99精品视频99| 无码少妇精品一区二区免费动态| 精品一区二区三区四区在线| 国产精品VA在线播放| 国产精品无码2021在线观看| 最新 国产 精品 精品 视频| 99国产精品视频久久久久| 精品综合久久久久久97超人| 中文国产成人精品久久app| 黑人巨大精品播放| 精品国产中文字幕| 精品久久久久久无码人妻中文字幕 | 91精品福利在线观看| 日韩精品国产另类专区| 国产精品偷伦视频观看免费| 精品国产免费一区二区三区| 国产A级毛片久久久精品毛片| 国产精品亚洲а∨天堂2021 | 国产午夜精品一本在线观看| 国产成人AV无码精品| 成人午夜精品网站在线观看|