AVNET EMBEDDED MSC SM2S-IMX8M Depanare Port UART Calculatoare bazate pe ARM pe instrucțiuni de modul
AVNET EMBEDDED MSC SM2S-IMX8M Debug Port UART Calculatoare bazate pe ARM pe modul

Prefaţă

Notificare privind drepturile de autor

Copyright © 2023 Avnet Embedded GmbH. Toate drepturile rezervate. Copierea acestui document, furnizarea altora și utilizarea sau comunicarea conținutului acestuia sunt interzise fără autorizarea expresă a Avnet Embedded /MSC Technologies

GmbH. Infractorii sunt răspunzători pentru plata daunelor. Toate drepturile sunt rezervate în cazul acordării unui brevet sau înregistrării unui model de utilitate sau desen.

Informații importante

Această documentație este destinată numai unui public calificat. Produsul descris aici nu este un produs pentru utilizatorul final. A fost dezvoltat și fabricat pentru prelucrare ulterioară de către personal instruit.

Disclaimer

Deși acest document a fost generat cu cea mai mare grijă, nu este implicată nicio garanție sau răspundere pentru corectitudine sau adecvare pentru un anumit scop. Informațiile din acest document sunt furnizate „ca atare” și pot fi modificate fără notificare.

Mărci comerciale

Toate denumirile de produse, siglele sau mărcile comerciale utilizate sunt proprietatea proprietarilor respectivi.

Informații generale

Domeniul de aplicare

Acest document se aplică pentru toate computerele încorporate Avnet pe module bazate pe procesoarele NXP i.MX8 și i.MX9, cum ar fi de exemplu

  • SM2S-IMX8PLUS
  • SM2S-IMX8M
  • SM2S-IMX8MINI
  • SM2S-IMX8NANO
  • SM2S-IMX8 (QuadPlus/QuadMax)
  • SM2S-IMX93
  • OSM-SF-IMX91
  • OSM-SF-IMX93
  • OSM-MF-IMX8NANO
  • OSM-MF-IMX8MINI

Această listă nu pretinde a fi exhaustivă, mai ales că pot fi lansate noi consilii pentru care se pot aplica aceleași proceduri, în timp ce acest document nu poate fi întotdeauna actualizat imediat.

Revizuiri și modificări

Revizuire Data Comentariu
1.0 25.05.2023 M. Koch Versiunea inițială

Cum se schimbă portul UART de depanare

Introducere

Multe sisteme bazate pe ARM vin cu o consolă serială ca principal mijloc de acces pentru depanare și deschidere a sistemului. În funcție de cerințele clienților, este o necesitate care apare frecvent în astfel de sisteme ca portul UART de depanare implicit să fie comutat pe un alt port serial. Prin portul UART de depanare ne referim la portul UART care va oferi toate intrările/ieșirile U-Boot, ieșirea kernel-ului bootlog și shell-ul kernel-ului, practic toate comunicațiile UART pe care le va vedea într-o imagine Yocto minimă. Deoarece portul UART implicit nu este utilizat de o singură componentă software, ci mai degrabă de multe componente, inclusiv de u-boot, atf-firmware, optee-os și kernel-ul însuși, setarea portului UART implicit poate fi o provocare, iarview poate fi pierdut rapid. Acest document va explica toți pașii de urmat pentru a realiza această sarcină. Pentru o explicație mai ușoară, acest document a fost scris pentru procesorul NXP i.MX8 MINI și mscldk, dar poate fi aplicat tuturor procesoarelor din seriile i.MX8 și i.MX9 și altor sisteme de construcție cu foarte puțin efort.

Pregătirea mediului

Schimbarea portului UART implicit de depanare va necesita modificarea codului în Yocto, iar cel mai simplu mod de a o face este să folosiți Yocto devtool pentru a pregăti sursele pentru noi. Va fi necesar să modificați următoarele pachete Yocto:

  • u-boot-imx (virtual/bootloader)
  • linux-imx (virtual/kernel)
  • atf-imx
  • optee-os (numai dacă este folosit optee)

Sursele ar trebui să fie pregătite cu devtool: 

$ ./devtool modifică u-boot-imx
$ ./devtool modifică linux-imx
$ ./devtool modifică atf-imx
$ ./devtool modifică optee-os

Toate sursele pot fi găsite în directorul „spațiu de lucru”.

Cod de modificare

Modificarea Bootloader-ului

În bootloader-ul va avea loc o inițializare UART de bază, așa că va fi necesară modificarea muxing-ului și adresa de bază a portului UART. A doua sarcină a u-boot este să treacă argumentele de boot către kernel și aici va fi necesar să se modifice argumentul consolei tty. Inițializarea și muxingul UART au loc în primele secoletage a procesului de boot în SPL. Codul sursă poate fi găsit în spl.c specific plăcii file.

Ţintă file: spațiu de lucru/surse/u-boot-imx/board/msc/sm2s_imx8mm/spl.c

Deschideți file și navigați la funcția init_ser0():

static void init_ser0(void)
{
imx_iomux_v3_setup_multiple_pads(ser0_pads, ARRAY_SIZE(ser0_pads)); init_uart_clk(1);
}

Funcția activează ceasul pt UART2(index 1 pentru UART fizic 2).

Acum, dacă dorim să folosim UART1, am putea defini propria noastră funcție init_ser1:

static void init_ser1(void)
{
imx_iomux_v3_setup_multiple_pads(ser1_pads, ARRAY_SIZE(ser1_pads)); init_uart_clk(0);
}

Înlocuiți apelul funcției init_ser0 cu init_ser1() în funcția board_early_init_f(). Mai mult, observăm că structura ser1_pads nu este definită. Aici va fi necesar să fiți conștienți de cablarea UART1. Pe imx8mm, UART1 poate fi muxat la pad-uri uart1 sau la sai2. În consecință, ser1_pads ar putea fi definite ca:

static iomux_v3_cfg_t const ser1_pads[] = {
IMX8MM_PAD_UART1_RXD_UART1_RX | DEFAULT_UART_PAD_CTRL, IMX8MM_PAD_UART1_TXD_UART1_TX | DEFAULT_UART_PAD_CTRL, NULL
};

Sau, folosind sai2:

static iomux_v3_cfg_t const ser1_pads[] = {
IMX8MM_PAD_SAI2_RXFS_UART1_TX | DEFAULT_UART_PAD_CTRL, IMX8MM_PAD_SAI2_RXC_UART1_RX | DEFAULT_UART_PAD_CTRL NULL };

Acum adresa de bază UART ar trebui modificată, adresa este definită în configurația antetului plăcilor file.

Ţintă file: workspace/sources/u-boot-imx/include/configs/msc_sm2s_imx8mm.h

Modificați definiția CONFIG_MXC_UART_BASE. Pentru UART1 acesta ar fi: 

  • // #define CONFIG_MXC_UART_BASE
  • UART2_BASE_ADDR
  • #define CONFIG_MXC_UART_BASE
  • UART1_BASE_ADDR

În cele din urmă, argumentul nucleului consolei ar trebui modificat. Valoarea poate fi găsită în același antet file. Caută “console=ttymxc1…” and modify “ttymxc1” to “ttymxc0”. The index number correlates to UART index, and is always UART index minus 1. So for UART 2 we use ttymxc1, for UART3 use ttymxc2 etc..

Modificarea firmware-ului de încredere ARM

Arm Trusted Firmware (imx-atf) nu are o rutină proprie de inițializare UART, totuși are o adresă de bază UART codificată și se bazează pe inițializarea corectă a UART de la u-boot. O configurație diferită a adresei de bază în u-boot și imx-atf va lăsa, cel mai probabil, procesorul blocat într-un handler de excepții și nu va fi nimic vizibil pe UART (procesorul pare să se blocheze fără un motiv vizibil). Când portul UART este schimbat, această schimbare trebuie să se întâmple și în imx-atf! Schimbarea portului UART în imx-atf necesită o modificare a adresei de bază. Această valoare este setată în platforma.mk file a procesorului.

Ţintă file: spațiu de lucru/surse/imx-atf/plat/imx/imx8m/imx8mm/platform.mk 

Adresa de bază UART corectă poate fi găsită în manualul de referință imx8. În acest examptrecem de la UART2 la UART1 pe imx8mm:

# IMX_BOOT_UART_BASE ?= 0x30890000
IMX_BOOT_UART_BASE ?= 0x30860000

Modificarea optee-os

Optee OS este de obicei încărcat atunci când criptografia modulului CAAM este utilizată pe sistem. Optee rulează pe aceleași nuclee ARM Cortex-A53, dar într-o altă instanță complet independentă ca nucleul. Optee necesită și acces UART și în acest caz înseamnă o modificare a adresei de bază.

Ţintă file: workspace/sources/optee-os/core/arch/arm/plat-imx/conf.mk

Acest example va seta adresa de bază UART de la UART2 la UART1: 

#CFG_UART_BASE ?= UART2_BASE
CFG_UART_BASE ?= UART1_BASE

Modificarea kernelului

Kernel-ul va necesita doar câteva modificări ale arborelui dispozitivului și numai dacă UART nu este încă disponibil în kernel. În multe cazuri, nu va fi necesară nicio modificare. Cu toate acestea, vă rugăm să verificați dacă instanța tty pe care doriți să o utilizați există! Verificați prezența tty cu o comandă shell:

$ ls /dev/ttymxc*

Dacă ttymxc este deja disponibil, nu este necesară nicio modificare. De example, pentru UART2 acesta ar fi /dev/ttymxc1. După cum știm deja, indexul tty este întotdeauna indicele UART fizic minus 1. Dacă tty-ul necesar nu este disponibil, vă rugăm să urmați procedura obișnuită de integrare UART.

Construiți și testați

Pentru o reconstrucție sigură ar trebui aplicată o curățare completă:

$ ./bitbake –c cleanall u-boot-imx linux-imx imx-atf optee-os

Construiți imaginea din nou cu comanda implicită de construire, de examppe:

$ ./bitbake msc-image-base

În scopul testării, un adaptor UART trebuie conectat la vechiul UART. Nu ar trebui să mai existe ieșiri pe vechiul UART! Noul UART ar trebui să fie complet funcțional, pentru asta vă rugăm să verificați conexiunea utilizând shell-ul UART u-boot și consola Linux.

Suport pentru produse

Inginerii și tehnicienii Avnet Embedded se angajează să ofere asistență clienților noștri ori de câte ori este nevoie. Înainte de a contacta asistența tehnică Avnet Embedded, vă rugăm să consultați paginile respective de pe site-ul nostru website la
https://embedded.avnet.com/support/
pentru cea mai recentă documentație, drivere și descărcări de software.

Dacă informațiile furnizate acolo nu vă rezolvă problema, vă rugăm să contactați echipa noastră de asistență tehnică Avnet Embedded, după cum urmează:

E-mail: support.boards@avnet.eu
Telefon: +49 (0)8165 906-200

Logo-ul AVNET EMBEDDED

Documente/Resurse

AVNET EMBEDDED MSC SM2S-IMX8M Debug Port UART Calculatoare bazate pe ARM pe modul [pdfInstrucțiuni
MSC SM2S-IMX8M, MSC SM2S-IMX8M Depanare computere bazate pe portul UART ARM pe modul, depanare portul UART Calculatoare bazate pe ARM pe modul, portul UART Calculatoare bazate pe ARM pe modul, computere bazate pe portul ARM pe modul, calculatoare bazate pe ARM pe modul, calculatoare pe bază pe Modul, Calculatoare pe Modul, Modul

Referințe

Lasă un comentariu

Adresa ta de e-mail nu va fi publicată. Câmpurile obligatorii sunt marcate *