AVNET EMBEDDED MSC SM2S-IMX8M Debug UART порт ARM базирани компютри на инструкции за модул
AVNET EMBEDDED MSC SM2S-IMX8M Debug UART порт ARM базирани компютри на модул

Предговор

Известие за авторски права

Авторско право © 2023 Avnet Embedded GmbH. Всички права запазени. Копирането на този документ, предоставянето на други лица и използването или съобщаването на съдържанието му са забранени без изрично разрешение от Avnet Embedded /MSC Technologies

GmbH. Нарушителите носят отговорност за заплащане на щети. Всички права са запазени в случай на издаване на патент или регистрация на полезен модел или дизайн.

Важна информация

Тази документация е предназначена само за квалифицирана публика. Продуктът, описан тук, не е продукт за краен потребител. Той е разработен и произведен за по-нататъшна обработка от обучен персонал.

Отказ от отговорност

Въпреки че този документ е създаден с най-голямо внимание, не се подразбира гаранция или отговорност за коректност или пригодност за конкретна цел. Информацията в този документ се предоставя „както е“ и подлежи на промяна без предупреждение.

Търговски марки

Всички използвани имена на продукти, лога или търговски марки са собственост на съответните им собственици.

Обща информация

Обхват

Този документ се прилага за всички Avnet Embedded Computer-on-Modules, базирани на NXP i.MX8- и i.MX9-серия процесори, като напр.

  • 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

Този списък не претендира да бъде изчерпателен, особено като се има предвид, че могат да бъдат пуснати нови платки, за които може да се прилагат същите процедури, докато този документ не винаги може да бъде актуализиран незабавно.

Ревизии и модификации

Ревизия Дата Коментирайте
1.0 25.05.2023 М. Кох Първоначална версия

Как да промените UART порта за отстраняване на грешки

Въведение

Много ARM-базирани системи идват със серийна конзола като основно средство за достъп за целите на отстраняване на грешки и възстановяване на системата. В зависимост от изискванията на клиента, често срещана необходимост в такива системи е UART портът за отстраняване на грешки по подразбиране да трябва да бъде превключен към различен сериен порт. Под UART порт за отстраняване на грешки имаме предвид UART порта, който ще осигури всички входове/изходи на U-Boot, изход за първоначално зареждане на ядрото и обвивка на ядрото, основно цялата UART комуникация, която човек ще види в минимално изображение на Yocto. Тъй като UART портът по подразбиране не се използва само от един софтуерен компонент, а по-скоро от много компоненти, включително u-boot, atf-firmware, optee-os и самото ядро, настройването на UART порта по подразбиране може да бъде предизвикателство и надview може бързо да се загуби. Този документ ще обясни всички стъпки, които трябва да следвате, за да постигнете тази задача. За по-лесно обяснение, този документ е написан за процесор NXP i.MX8 MINI и mscldk, но може да се приложи към всички процесори от серия i.MX8 и i.MX9 и други системи за изграждане с много малко усилия.

Подготвяща среда

Промяната на UART порта за отстраняване на грешки по подразбиране ще изисква модифициране на кода в Yocto и най-лесният начин да го направите е да използвате Yocto devtool, за да подготвите източниците за нас. Ще бъде необходимо да се променят следните Yocto пакети:

  • u-boot-imx (виртуален/бутлоудър)
  • linux-imx (виртуален/ядро)
  • atf-imx
  • optee-os (само ако се използва optee)

Източниците трябва да бъдат подготвени с devtool: 

$ ./devtool модифицира u-boot-imx
$ ./devtool модифицира linux-imx
$ ./devtool модифицира atf-imx
$ ./devtool модифицира optee-os

Всички източници могат да бъдат намерени в директорията „workspace“.

Промяна на кода

Модифициране на Bootloader

В буутлоудъра ще се извърши някаква основна инициализация на UART, така че ще е необходимо да се промени мултиплексирането и основния адрес на UART порта. Втората задача на u-boot е да предаде аргументи за зареждане на ядрото и тук ще е необходимо да промените аргумента tty на конзолата. Инициализацията и мултиплексирането на UART се случва в най-ранните stage на процеса на зареждане в SPL. Изходният код може да бъде намерен в специфичния за платката spl.c file.

Цел file: работно пространство/източници/u-boot-imx/board/msc/sm2s_imx8mm/spl.c

Отворете file и отидете до функцията init_ser0():

статичен void init_ser0(void)
{
imx_iomux_v3_setup_multiple_pads(ser0_pads, ARRAY_SIZE(ser0_pads)); init_uart_clk(1);
}

Функцията активира часовника за UART2(индекс 1 за физически UART 2).

Сега, ако искаме да използваме UART1 вместо това, можем да дефинираме нашата собствена функция init_ser1:

статичен void init_ser1(void)
{
imx_iomux_v3_setup_multiple_pads(ser1_pads, ARRAY_SIZE(ser1_pads)); init_uart_clk(0);
}

Заменете извикването на функцията на init_ser0 с init_ser1() във функцията board_early_init_f(). Освен това забелязваме, че структурата на ser1_pads не е дефинирана. Тук ще е необходимо да сте наясно с окабеляването на UART1. На imx8mm, UART1 може да бъде мултиплексиран към подложки uart1 или към подложки sai2. Съответно, ser1_pads може да се дефинира като:

статичен 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
};

Или иначе, използвайки sai2:

статичен 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};

Сега основният UART адрес трябва да бъде променен, адресът е дефиниран в конфигурацията на заглавката на платката file.

Цел file: работно пространство/източници/u-boot-imx/include/configs/msc_sm2s_imx8mm.h

Променете дефиницията CONFIG_MXC_UART_BASE. За UART1 това би било: 

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

И накрая, аргументът на ядрото на конзолата трябва да бъде променен. Стойността може да бъде намерена в същата заглавка file. Търсене на „console=ttymxc1…“ и променяме „ttymxc1“ на „ttymxc0“. Индексният номер съответства на UART индекса и винаги е UART индекс минус 1. Така че за UART 2 използваме ttymxc1, за UART3 използваме ttymxc2 и т.н.

Модифициране на надеждния фърмуер на ARM

Arm Trusted Firmware (imx-atf) няма собствена рутина за инициализация на UART, но има твърдо кодиран базов UART адрес и разчита на правилна инициализация на UART от u-boot. Различна конфигурация на базов адрес в u-boot и imx-atf най-вероятно ще остави процесора блокиран в манипулатор на изключения и няма да има нищо видимо на UART (изглежда процесорът виси без видима причина). Когато UART портът се промени, тази промяна трябва да се случи и в imx-atf! Промяната на UART порта в imx-atf изисква промяна на базов адрес. Тази стойност е зададена в platform.mk file на процесора.

Цел file: работно пространство/източници/imx-atf/plat/imx/imx8m/imx8mm/platform.mk 

Правилният базов адрес на UART може да бъде намерен в справочното ръководство за imx8. В този бившample променяме от UART2 на UART1 на imx8mm:

# IMX_BOOT_UART_BASE ?= 0x30890000
IMX_BOOT_UART_BASE ?= 0x30860000

Модифициране на optee-os

Optee OS обикновено се зарежда, когато криптографията на CAAM модула се използва в системата. Optee работи на същите ARM Cortex-A53 ядра, но в друг напълно независим екземпляр като ядрото. Optee също изисква UART достъп и в този случай това означава промяна на базов адрес.

Цел file: workspace/sources/optee-os/core/arch/arm/plat-imx/conf.mk

Този бившample ще зададе UART базов адрес от UART2 на UART1: 

#CFG_UART_BASE ?= UART2_BASE
CFG_UART_BASE ?= UART1_BASE

Модифициране на ядрото

Ядрото ще изисква само няколко модификации на дървото на устройствата и само ако UART все още не е наличен в ядрото. В много случаи изобщо няма да се изисква промяна. Въпреки това, моля, проверете дали tty екземплярът, който искате да използвате, съществува! Проверете присъствието на tty с команда на shell:

$ ls /dev/ttymxc*

Ако ttymxc вече е наличен, не е необходима промяна. Напримерample, за UART2 това ще бъде /dev/ttymxc1. Както вече знаем, индексът на tty винаги е индексът на физическия UART минус 1. Ако необходимият tty не е наличен, моля, следвайте обичайната процедура за интегриране на UART.

Изграждане и тестване

За безопасно възстановяване трябва да се приложи пълно почистване:

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

Изградете изображението отново с командата за изграждане по подразбиране, напрampле:

$ ./bitbake msc-image-base

За целите на тестването UART адаптер трябва да бъде свързан към стария UART. Не трябва да има повече изход на стария UART! Новият UART трябва да е напълно функционален, за това, моля, проверете връзката, като използвате u-boot UART shell и конзолата на linux.

Продуктова поддръжка

Инженерите и техниците на Avnet Embedded се ангажират да предоставят поддръжка на нашите клиенти, когато е необходимо. Преди да се свържете с техническата поддръжка на Avnet Embedded, моля, направете справка със съответните страници на нашия webсайт при
https://embedded.avnet.com/support/
за най-новата документация, драйвери и софтуер за изтегляне.

Ако предоставената там информация не реши проблема ви, моля, свържете се с нашия екип за техническа поддръжка на Avnet Embedded, както следва:

Имейл: support.boards@avnet.eu
телефон: +49 (0)8165 906-200

Лого на AVNET EMBEDDED

Документи / Ресурси

AVNET EMBEDDED MSC SM2S-IMX8M Debug UART порт ARM базирани компютри на модул [pdfИнструкции
MSC SM2S-IMX8M, MSC SM2S-IMX8M Debug UART порт ARM базирани компютри на модул, Debug UART порт ARM базирани компютри на модул, UART порт ARM базирани компютри на модул, порт ARM базирани компютри на модул, ARM базирани компютри на модул, базирани компютри на Модул, Компютри на Модул, Модул

Референции

Оставете коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са маркирани *