NXP AN14120 Debugging Cortex-M Software User Guide
Introduktion
Det här dokumentet beskriver korskompilering, distribution och felsökning av en applikation för i.MX 8M Family, i.MX 8ULP och i.MX 93 Cortex-M-processorn med hjälp av Microsoft Visual Studio Code.
Programvarumiljö
Lösningen skulle kunna implementeras både på Linux- och Windows-värden. För denna applikationsanmärkning antas en Windows-dator, men inte obligatorisk.
Linux BSP version 6.1.22_2.0.0 används i denna applikationsnotis. Följande förbyggda bilder används:
- i.MX 8M Mini: imx-image-full-imx8mmevk.wic
- i.MX 8M Nano: imx-image-full-imx8mnevk.wic
- i.MX 8M Plus: imx-image-full-imx8mpevk.wic
- i.MX 8ULP: imx-image-full-imx8ulpevk.wic
- i.MX 93: imx-image-full-imx93evk.wic
För detaljerade steg om hur man bygger dessa bilder, se i.MX Linux User's Guide (dokument IMXLUG) och i.MX Yocto Project User's Guide (dokument IMXLXYOCTOUG).
Om en Windows-dator används, skriv den förbyggda bilden på SD-kortet med Win32 Disk Imager (https:// win32diskimager.org/) eller Balena Etcher (https://etcher.balena.io/). Om en Ubuntu PC används, skriv prebuild-bilden på SD-kortet med kommandot nedan:
$ sudo dd if=.wic of=/dev/sd bs=1M status=progress conv=fsync
Notera: Kontrollera din kortläsarpartition och ersätt sd med din motsvarande partition. 1.2
Hårdvaruinstallation och utrustning
- Utvecklings paket:
- NXP i.MX 8MM EVK LPDDR4
- NXP i.MX 8MN EVK LPDDR4
- NXP i.MX 8MP EVK LPDDR4
- NXP i.MX 93 EVK för 11×11 mm LPDDR4 – NXP i.MX 8ULP EVK LPDDR4
- Micro SD-kort: SanDisk Ultra 32-GB Micro SDHC I klass 10 används för det aktuella experimentet.
- Mikro-USB (i.MX 8M) eller Type-C (i.MX 93) kabel för felsökningsport.
- SEGGER J-Link felsökningssond.
Förutsättningar
Innan du börjar felsöka måste flera förutsättningar vara uppfyllda för att ha en korrekt konfigurerad felsökningsmiljö.
PC Host – i.MX-kortfelsökningsanslutning
Utför följande steg för att upprätta hårdvarufelsökningsanslutningen:
- Anslut i.MX-kortet till värddatorn via DEBUG USB-UART och PC USB-kontakten med en USB-kabel. Windows OS hittar de seriella enheterna automatiskt.
- I Enhetshanteraren, under Portar (COM & LPT) hittar du två eller fyra anslutna USB-serieportar (COM ). En av portarna används för felsökningsmeddelanden som genereras av Cortex-A-kärnan, och den andra är för Cortex-M-kärnan. Innan du bestämmer vilken port som behövs, kom ihåg:
- [i.MX 8MP, i.MX 8ULP, i.MX 93]: Det finns fyra portar tillgängliga i Device Manager. Den sista porten är för Cortex-M debug och den näst sista porten är för Cortex-A debug, räknar felsökningsportar i stigande ordning.
- [i.MX 8MM, i.MX 8MN]: Det finns två portar tillgängliga i Enhetshanteraren. Den första porten är för Cortex-M debug och den andra porten är för Cortex-A debug, räknar felsökningsportar i stigande ordning.
- Öppna rätt felsökningsport med din föredragna seriella terminalemulator (t.example PuTTY) genom att ställa in följande parametrar:
- Hastighet till 115200 bps
- 8 databitar
- 1 stoppbit (115200, 8N1)
- Ingen paritet
- Anslut SEGGER-felsökningsprobens USB till värden och anslut sedan SEGGER JTAG kontakt till i.MX-kort JTAG gränssnitt. Om i.MX-kortet JTAG gränssnittet har ingen styrd kontakt, orienteringen bestäms genom att den röda ledningen riktas mot stift 1, som i figur 1.
VS-kodkonfiguration
För att ladda ner och konfigurera VS-koden, utför följande steg:
- Ladda ner och installera den senaste versionen av Microsoft Visual Studio Code från tjänstemannen webwebbplats. Om du använder Windows som värdoperativsystem, välj knappen "Ladda ner för Windows" från huvudsidan för Visual Studio Code.
- När du har installerat Visual Studio Code, öppna den och välj fliken "Extensions" eller tryck på Ctrl + Shift + X-kombinationen.
- I det dedikerade sökfältet skriver du MCUXpresso för VS-kod och installerar tillägget. En ny flik visas på vänster sida av VS Code-fönstret.
MCUXpresso förlängningskonfiguration
För att konfigurera MCUXpresso-tillägget, utför följande steg:
- Klicka på den dedikerade MCUXpresso-tilläggsfliken i fältet till vänster. Från SNABBSTARTPANELEN, klicka
Öppna MCUXpresso Installer och ge tillåtelse att ladda ner installationsprogrammet. - Installationsfönstret visas på kort tid. Klicka på MCUXpresso SDK Developer och på SEGGER JLink klicka sedan på knappen Installera. Installationsprogrammet installerar den nödvändiga programvaran för arkiv, verktygskedja, Python-stöd, Git och felsökningsprob
När alla paket har installerats, se till att J-Link-proben är ansluten till värddatorn. Kontrollera sedan om sonden också är tillgänglig i MCUXpresso-tillägget under DEBUG PROBES view, som visas i figur
Importera MCUXpresso SDK
Beroende på vilket kort du kör, bygg och ladda ner den specifika SDK:n från NXP-tjänstemannen webwebbplats. För denna applikationsanmärkning har följande SDK:er testats:
- SDK_2.14.0_EVK-MIMX8MM
- SDK_2.14.0_EVK-MIMX8MN
- SDK_2.14.0_EVK-MIMX8MP
- SDK_2.14.0_EVK-MIMX8ULP
- SDK_2.14.0_MCIMX93-EVK
Att bygga ett example för i.MX 93 EVK, se figur 7:
- För att importera ett MCUXpresso SDK-förråd i VS-kod, utför följande steg:
- Öppna Visual Studio Code efter att du har laddat ner SDK:n. Klicka på fliken MCUXpresso från vänster sida och expandera INSTALLERADE LAGER och PROJEKT views.
- Klicka på Importförrådet och välj LOKALT ARKIV. Klicka på Bläddra... som motsvarar fältet Arkiv och välj det nyligen nedladdade SDK-arkivet.
- Välj sökvägen där arkivet packas upp och fyll i fältet Plats.
- Fältet Namn kan lämnas som standard, eller så kan du välja ett anpassat namn.
- Markera eller avmarkera Skapa Git-förråd baserat på dina behov och klicka sedan på Importera.
Importera ett example ansökan
När SDK:n importeras visas den under INSTALLERADE FÖRVAR view.
För att importera ett exampapplikationen från SDK-förvaret, utför följande steg:
- Klicka på Importera example from Repository-knappen från PROJEKT view.
- Välj ett arkiv från rullgardinsmenyn.
- Välj verktygskedjan från rullgardinsmenyn.
- Välj måltavlan.
- Välj demo_apps/hello_world example från listan Välj en mall.
- Välj ett namn för projektet (standardinställningen kan användas) och ange sökvägen till projektets plats.
- Klicka på Skapa.
- Utför följande steg endast för i.MX 8M Family. Under PROJEKTEN view, utöka det importerade projektet. Gå till avsnittet Inställningar och klicka på mcuxpresso-tools.json file.
a. Lägg till "gränssnitt": "JTAG” under ”debug” > ”segger”
b. För i.MX 8MM, lägg till följande konfiguration: "device": "MIMX8MM6_M4" under "debug" > "segger"
c. För i.MX 8MN, lägg till följande konfiguration: "device": "MIMX8MN6_M7" under "debug" > "segger"
d. För i.MX 8MP, lägg till följande konfiguration:
"device": "MIMX8ML8_M7" under "debug" > "segger"
Följande kod visar ett example för i.MX8 MP "debug"-avsnittet efter att ovanstående ändringar av mcuxpresso-tools.json utfördes:
Efter import av exampOm ansökan lyckades måste den vara synlig under PROJEKT view. Även projektkällan files är synliga på fliken Explorer (Ctrl + Shift + E).
Bygger applikationen
För att bygga applikationen, tryck på den vänstra ikonen Bygg vald, som visas i figur 9.
Förbered tavlan för felsökaren
För att använda JTAG för felsökning av Cortex-M-applikationer finns det några förutsättningar beroende på plattformen:
- För i.MX 93
För att stödja i.MX 93 måste patchen för SEGGER J-Link vara installerad: SDK_MX93_3RDPARTY_PATCH.zip.
Notera: Denna patch måste användas, även om den har installerats tidigare. När nedladdningen är klar packar du upp arkivet och kopierar katalogen Devices och JLinkDevices.xml file till C:\Program Files\SEGGER\JLink. Om en Linux-dator används är målsökvägen /opt/SEGGER/JLink.- Felsökning av Cortex-M33 medan endast Cortex-M33 körs
I detta läge måste startlägesomkopplaren SW1301[3:0] ställas in på [1010]. Sedan kan M33-bilden laddas direkt och felsökas med hjälp av debug-knappen. För mer information, se avsnitt 5.
Om Linux som körs på Cortex-A55 behövs parallellt med Cortex-M33, finns det två sätt att felsöka Cortex-M33: - Felsökning av Cortex-M33 medan Cortex-A55 är i U-Boot
Kopiera först sdk20-app.bin file (finns i katalogen armgcc/debug) som genereras i avsnitt 3 i startpartitionen på SD-kortet. Starta brädan och stoppa den i U-Boot. När startomkopplaren är konfigurerad att starta Cortex-A, startar inte startsekvensen Cortex-M. Det måste startas manuellt med hjälp av kommandona nedan. Om Cortex-M inte startas misslyckas JLink att ansluta till kärnan.
- Obs: Om systemet inte kan felsökas normalt, försök att högerklicka på projektet i MCUXpresso för VS
Koda och välj "Bifoga för att felsöka projektet". - Felsökning av Cortex-M33 medan Cortex-A55 är i Linux
Kernel DTS måste modifieras för att inaktivera UART5, som använder samma stift som JTAG gränssnitt.
Om en Windows-dator används är det enklaste att installera WSL + Ubuntu 22.04 LTS och sedan korskompilera DTS.
Efter WSL + Ubuntu 22.04 LTS-installationen, öppna Ubuntu-maskinen som körs på WSL och installera de nödvändiga paketen:
Nu kan Kernel-källorna laddas ner:
För att inaktivera UART5 kringutrustning, sök efter lpuart5 nod i linux-imx/arch/arm64/boot/ dts/freescale/imx93-11×11-evk.dts file och ersätt okej status med inaktiverad:
Kompilera om DTS:en:
Kopiera den nyskapade linux-imx/arch/arm64/boot/dts/freescale/imx93 11×11-evk.dtb file på SD-kortets startpartition. Kopiera hello_world.elf file (finns i katalogen armgcc/debug) som genereras i avsnitt 3 i startpartitionen på SD-kortet. Starta kortet i Linux. Eftersom boot ROM inte startar Cortex-M när Cortex-A startar, måste CortexM startas manuellt.
Notera: Hej_världen.elf file måste placeras i katalogen /lib/firmware.
- Felsökning av Cortex-M33 medan endast Cortex-M33 körs
- För i.MX 8M
För att stödja i.MX 8M Plus måste patchen för SEGGER J-Link vara installerad:
iar_segger_support_patch_imx8mp.zip.
När nedladdningen är klar packar du upp arkivet och kopierar katalogen Enheter och
JLinkDevices.xml file från JLink-katalogen till C:\Program Files\SEGGER\JLink. Om en Linux-dator
används, är målsökvägen /opt/SEGGER/JLink.- Felsökning av Cortex-M medan Cortex-A är i U-Boot
I det här fallet måste inget speciellt göras. Starta brädan i U Boot och hoppa till avsnitt 5. - Felsökning av Cortex-M medan Cortex-A är i Linux
För att köra och felsöka Cortex-M-applikationen parallellt med Linux som körs på Cortex-A, måste den specifika klockan tilldelas och reserveras för Cortex-M. Det görs inifrån U-Boot. Stoppa brädan i U-Boot och kör följande kommandon:
- Felsökning av Cortex-M medan Cortex-A är i U-Boot
- För i.MX 8ULP
För att stödja i.MX 8ULP måste patchen för SEGGER J-Link vara installerad: SDK_MX8ULP_3RDPARTY_PATCH.zip.
Notera: Denna patch måste användas även om den har installerats tidigare.
Efter nedladdningen packar du upp arkivet och kopierar katalogen Devices och JLinkDevices.xml file till C:\Program Files\SEGGER\JLink. Om en Linux-dator används är målsökvägen /opt/SEGGER/JLink. För i.MX 8ULP, på grund av Upower-enheten, bygg flash.bin med hjälp av m33_image i vår "VSCode"-repo först. M33-bilden finns i {CURRENT REPO}\armgcc\debug\sdk20-app.bin. Se avsnitt 6 från Komma igång med MCUX presso SDK för EVK-MIMX8ULP och EVK9-MIMX8ULP i SDK_2_xx_x_EVK-MIMX8ULP/docs om hur man bygger flash.bin-bilden.
Notera: Använd M33-bilden i den aktiva VSCode-repoen. Annars fäster inte programmet ordentligt. Högerklicka och välj "Bifoga".
Körning och felsökning
Efter att ha tryckt på felsökningsknappen, välj konfigurationen av felsökningsprojektet och felsökningssessionen startar.
När en felsökningssession startar visas en särskild meny. Felsökningsmenyn har knappar för att starta exekveringen tills en brytpunkt tänds, pausa exekveringen, kliva över, kliva in, kliva ut, starta om och stoppa.
Vi kan också se lokala variabler, registrera värden, titta på några uttryck och kontrollera anropsstack och brytpunkter
i vänster navigator. Dessa funktionsområden finns under fliken "Kör och felsök" och inte i MCUXpresso
för VS-kod.
Notera om källkoden i dokumentet
ExampKoden som visas i detta dokument har följande copyright- och BSD-3-klausullicens:
Copyright 2023 NXP Omdistribution och användning i källform och binär form, med eller utan modifiering, är tillåten förutsatt att följande villkor är uppfyllda:
- Vidaredistribution av källkod måste innehålla ovanstående copyrightmeddelande, denna lista med villkor och följande ansvarsfriskrivning.
- Vidaredistributioner i binär form måste återge ovanstående copyrightmeddelande, denna lista med villkor och följande friskrivningsklausul i dokumentationen och/eller annat material måste tillhandahållas med distributionen.
- Varken namnet på upphovsrättsinnehavaren eller namnen på dess bidragsgivare får användas för att stödja eller marknadsföra produkter som härrör från denna programvara utan särskilt föregående skriftligt tillstånd.
DENNA PROGRAM TILLHANDAHÅLLS AV UPPHOVSRÄTTSINNEHAVARERNA OCH BIDRAGARE "I BEFINTLIGT SKICK" OCH EVENTUELLA UTTRYCKTA ELLER UNDERFÖRSTÅDDA GARANTIER, INKLUSIVE, MEN INTE BEGRÄNSADE TILL, UNDERFÖRSTÅDDA GARANTIER FÖR SÄLJBARHET OCH LÄMPLIGHET FÖR EN DISPLICITET. UNDER INGA OMSTÄNDIGHETER SKA UPPHAVSRÄTTSINNEHAVAREN ELLER BIDRAGSGIVARNA VARA ANSVARIGA FÖR NÅGON DIREKTA, INDIREKTA, OAVSIKTLIGA, SPECIELLA, EXEMPELSKADOR ELLER FÖLJDSKADOR (INKLUSIVE, MEN INTE BEGRÄNSADE TILL, UPPHANDLING AV ERSÄTTNINGSSERVATOR, ELLER US; ELLER AFFÄRSAVBROTT ELLER ORSAKET OCH PÅ NÅGON TEORI OM ANSVAR, OAVSETT I KONTRAKT, STIKT ANSVAR ELLER SKADESTÅND (INKLUSIVE FÖRSIKTIGHET ELLER ANNAT SÄTT) SOM UPPSTÅR PÅ NÅGOT SÄTT UR ANVÄNDNING AV DENNA ANVÄNDNING ELLER DETTA ELLER
Juridisk information
Definitioner
Förslag — En utkaststatus på ett dokument indikerar att innehållet är stilla
under inre angview och är föremål för formellt godkännande, vilket kan leda till ändringar eller tillägg. NXP Semiconductors ger inga utfästelser eller garantier för riktigheten eller fullständigheten av information som ingår i ett utkast av ett dokument och ska inte ha något ansvar för konsekvenserna av användningen av sådan information.
Friskrivningsklausuler
Begränsad garanti och ansvar — Informationen i detta dokument anses vara korrekt och tillförlitlig. NXP Semiconductors ger dock inga utfästelser eller garantier, uttryckta eller underförstådda, beträffande riktigheten eller fullständigheten av sådan information och ska inte ha något ansvar för konsekvenserna av användningen av sådan information. NXP Semiconductors tar inget ansvar för innehållet i detta dokument om det tillhandahålls av en informationskälla utanför NXP Semiconductors. NXP Semiconductors ska under inga omständigheter hållas ansvarigt för några indirekta, tillfälliga, bestraffande, särskilda eller följdskador (inklusive – utan begränsning – förlorad vinst, förlorade besparingar, affärsavbrott, kostnader relaterade till borttagning eller utbyte av produkter eller omarbetningsavgifter) oavsett om eller inte är sådana skador baserade på skadestånd (inklusive vårdslöshet), garanti, avtalsbrott eller någon annan juridisk teori.
Oavsett eventuella skador som kunden kan ådra sig av någon anledning, ska NXP Semiconductors samlade och kumulativa ansvar gentemot kunden för de produkter som beskrivs här begränsas i enlighet med villkoren för kommersiell försäljning av NXP Semiconductors.
Rätt att göra ändringar — NXP Semiconductors förbehåller sig rätten att göra ändringar i information som publiceras i detta dokument, inklusive utan begränsning specifikationer och produktbeskrivningar, när som helst och utan föregående meddelande. Detta dokument ersätter och ersätter all information som tillhandahållits före publiceringen av detta.
Lämplighet för användning — NXP Semiconductors-produkter är inte utformade, auktoriserade eller garanterade för att vara lämpliga för användning i livsuppehållande, livskritiska eller säkerhetskritiska system eller utrustning, och inte heller i applikationer där fel eller fel på en NXP Semiconductors-produkt rimligen kan förväntas leda till personlig skada, dödsfall eller allvarlig egendom eller miljöskada. NXP Semiconductors och dess leverantörer tar inget ansvar för inkludering och/eller användning av NXP Semiconductors produkter i sådan utrustning eller applikationer och därför sker sådan inkludering och/eller användning på kundens egen risk.
Ansökningar — Tillämpningar som beskrivs här för någon av dessa
produkterna är endast för illustrativa syften. NXP Semiconductors ger inga utfästelser eller garantier för att sådana applikationer kommer att vara lämpliga för den specificerade användningen utan ytterligare testning eller modifiering.
Kunderna ansvarar för design och drift av sina
applikationer och produkter som använder NXP Semiconductors-produkter, och NXP Semiconductors tar inget ansvar för någon hjälp med applikationer eller kundproduktdesign. Det är kundens ensamma ansvar att avgöra om NXP Semiconductors-produkten är lämplig och passande för kundens applikationer och planerade produkter, såväl som för den planerade applikationen och användningen av kundens tredje parts kund(er). Kunder bör tillhandahålla lämpliga design- och driftssäkerhetsåtgärder för att minimera riskerna förknippade med deras applikationer och produkter.
NXP Semiconductors accepterar inget ansvar relaterat till fel, skador, kostnader eller problem som är baserade på någon svaghet eller fel i kundens applikationer eller produkter, eller applikationen eller användningen av kundens tredje parts kund(er). Kunden ansvarar för att göra alla nödvändiga tester för kundens applikationer och produkter med hjälp av NXP Semiconductors-produkter för att undvika fel på applikationerna och produkterna eller applikationen eller användning av kundens tredje part.
Villkor för kommersiell försäljning — NXP Semiconductors-produkter säljs enligt de allmänna villkoren för kommersiell försäljning, som publiceras på https://www.nxp.com/profile/villkor, om inte annat avtalats i ett giltigt skriftligt individuellt avtal. Om ett individuellt avtal ingås gäller endast villkoren i respektive avtal. NXP Semiconductors invänder härmed uttryckligen mot att tillämpa kundens allmänna villkor med avseende på köp av NXP Semiconductors produkter av kunden.
Exportkontroll — Detta dokument såväl som de föremål som beskrivs häri kan vara föremål för exportkontrollbestämmelser. Export kan kräva ett förhandstillstånd från behöriga myndigheter.
Lämplighet för användning i icke-bilkvalificerade produkter — Om inte detta dokument uttryckligen anger att denna specifika NXP Semiconductors
produkten är bilkvalificerad, produkten är inte lämplig för bilbruk. Den är varken kvalificerad eller testad i enlighet med fordonstestning eller applikationskrav. NXP Semiconductors tar inget ansvar för inkludering och/eller användning av icke-bilkvalificerade produkter i fordonsutrustning eller applikationer.
I händelse av att kunden använder produkten för design-in och användning i
fordonstillämpningar till fordonsspecifikationer och standarder,
kund (a) ska använda produkten utan NXP Semiconductors garanti för produkten för sådana fordonstillämpningar, användning och specifikationer, och (b) närhelst kunden använder produkten för fordonstillämpningar utöver NXP Semiconductors specifikationer ska sådan användning endast ske på kundens egen risk, och (c) kunden håller NXP Semiconductors helt skadeslös för alla ansvar, skador eller misslyckade produktanspråk som härrör från kundens design och användning av produkten för fordonstillämpningar utöver NXP Semiconductors standardgaranti och NXP Semiconductors produktspecifikationer.
Översättningar — En icke-engelsk (översatt) version av ett dokument, inklusive den juridiska informationen i det dokumentet, är endast för referens. Den engelska versionen ska ha företräde vid eventuella avvikelser mellan de översatta och engelska versionerna.
Säkerhet — Kunden förstår att alla NXP-produkter kan vara föremål för oidentifierade sårbarheter eller kan stödja etablerade säkerhetsstandarder eller specifikationer med kända begränsningar. Kunden ansvarar för utformningen och driften av sina applikationer och produkter under hela deras livscykel för att minska effekten av dessa sårbarheter på kundens applikationer och produkter. Kundens ansvar sträcker sig även till andra öppna och/eller patentskyddade teknologier som stöds av NXP-produkter för användning i kundens applikationer. NXP tar inget ansvar för någon sårbarhet. Kunden bör regelbundet kontrollera säkerhetsuppdateringar från NXP och följa upp på lämpligt sätt.
Kunden ska välja produkter med säkerhetsfunktioner som bäst uppfyller regler, föreskrifter och standarder för den avsedda applikationen och fatta de slutgiltiga designbesluten angående sina produkter och är ensamt ansvarig för att alla lagar, regler och säkerhetsrelaterade krav som gäller sina produkter, oavsett av all information eller support som kan tillhandahållas av NXP. NXP har ett Product Security Incident Response Team (PSIRT) (tillgängligt på PSIRT@nxp.com) som hanterar utredningen, rapporteringen och lösningssläppet för säkerhetsbrister i NXP-produkter.
NXP BV — NXP BV är inte ett operativt företag och det distribuerar eller säljer inte produkter.
Dokument/resurser
![]() |
NXP AN14120 Debugging Cortex-M programvara [pdf] Användarhandbok i.MX 8ULP, i.MX 93, AN14120 Debugging Cortex-M Software, AN14120, Debugging Cortex-M Software, Cortex-M Software, Software |