AVNET EMBEDDED MSC SM2S-IMX8M Debug UART Port ARM កុំព្យូទ័រផ្អែកលើការណែនាំអំពីម៉ូឌុល
AVNET EMBEDDED MSC SM2S-IMX8M បំបាត់កំហុស UART Port ARM កុំព្យូទ័រផ្អែកលើម៉ូឌុល

បុព្វបទ

សេចក្តីជូនដំណឹងស្តីពីការរក្សាសិទ្ធិ

រក្សាសិទ្ធិ © 2023 Avnet Embedded GmbH ។ រក្សា​រ​សិទ្ធ​គ្រប់យ៉ាង។ ការចម្លងឯកសារនេះ ផ្តល់ជូនអ្នកដ៏ទៃ និងការប្រើប្រាស់ ឬការប្រាស្រ័យទាក់ទងនៃខ្លឹមសារនោះ ត្រូវបានហាមឃាត់ដោយគ្មានសិទ្ធិអំណាចច្បាស់លាស់ពី Avnet Embedded /MSC Technologies

GmbH ។ ជនល្មើសត្រូវទទួលខុសត្រូវចំពោះការសងការខូចខាត។ សិទ្ធិទាំងអស់ត្រូវបានរក្សានៅក្នុងព្រឹត្តិការណ៍នៃការផ្តល់ប៉ាតង់ឬការចុះឈ្មោះនៃគំរូឧបករណ៍ប្រើប្រាស់ឬការរចនា។

ព័ត៌មានសំខាន់

ឯកសារនេះគឺសម្រាប់តែទស្សនិកជនដែលមានសមត្ថភាពប៉ុណ្ណោះ។ ផលិតផលដែលបានពិពណ៌នានៅទីនេះមិនមែនជាផលិតផលអ្នកប្រើប្រាស់ចុងក្រោយទេ។ វាត្រូវបានបង្កើតឡើង និងផលិតសម្រាប់ដំណើរការបន្ថែមទៀតដោយបុគ្គលិកដែលបានទទួលការបណ្តុះបណ្តាល។

ការបដិសេធ

ទោះបីជាឯកសារនេះត្រូវបានបង្កើតដោយយកចិត្តទុកដាក់បំផុតក៏ដោយ ក៏គ្មានការធានា ឬការទទួលខុសត្រូវចំពោះភាពត្រឹមត្រូវ ឬភាពសមស្របសម្រាប់គោលបំណងជាក់លាក់ណាមួយត្រូវបានបញ្ជាក់ដែរ។ ព័ត៌មាន​ក្នុង​ឯកសារ​នេះ​ត្រូវ​បាន​ផ្តល់ “ដូច​ជា” ហើយ​អាច​នឹង​មាន​ការ​ផ្លាស់​ប្តូរ​ដោយ​គ្មាន​ការ​ជូន​ដំណឹង។

ពាណិជ្ជសញ្ញា

ឈ្មោះផលិតផល ស្លាកសញ្ញា ឬពាណិជ្ជសញ្ញាដែលបានប្រើទាំងអស់ គឺជាកម្មសិទ្ធិរបស់ម្ចាស់រៀងៗខ្លួន។

ព័ត៌មានទូទៅ

វិសាលភាព

ឯកសារនេះអនុវត្តសម្រាប់គ្រប់ Avnet Embedded Computer-on-Modules ដោយផ្អែកលើ NXP i.MX8- និង i.MX9-series CPUs ដូចជា ឧ.

  • 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 M. Koch កំណែដំបូង

របៀបផ្លាស់ប្តូរច្រក UART បំបាត់កំហុស

សេចក្តីផ្តើម

ប្រព័ន្ធដែលមានមូលដ្ឋានលើ ARM ជាច្រើនបានភ្ជាប់មកជាមួយ Serial Console ជាមធ្យោបាយសំខាន់នៃការចូលប្រើសម្រាប់គោលបំណងបំបាត់កំហុស និងប្រព័ន្ធ។ អាស្រ័យលើតម្រូវការរបស់អតិថិជន វាគឺជាតម្រូវការដែលកើតឡើងញឹកញាប់នៅក្នុងប្រព័ន្ធបែបនេះ ដែលច្រក UART បំបាត់កំហុសលំនាំដើមត្រូវប្តូរទៅច្រកសៀរៀលផ្សេង។ តាមរយៈការបំបាត់កំហុស ច្រក UART យើងមានន័យថាច្រក UART ដែលនឹងផ្តល់នូវការបញ្ចូល/ទិន្នផល U-Boot ទាំងអស់ លទ្ធផលដំណើរការរបស់ខឺណែល និងសែលខឺណែល ជាទូទៅការទំនាក់ទំនង UART ទាំងអស់នឹងឃើញនៅក្នុងរូបភាព Yocto តិចតួចបំផុត។ ដោយសារច្រក UART លំនាំដើមមិនត្រូវបានប្រើដោយសមាសភាគកម្មវិធីតែមួយប៉ុណ្ណោះ ប៉ុន្តែជាធាតុផ្សំជាច្រើន រួមទាំង u-boot, atf-firmware, optee-os និង kernel ខ្លួនវា ការកំណត់ច្រក UART លំនាំដើមអាចជាបញ្ហាប្រឈម ហើយលើសពីនេះទៅទៀតview អាចបាត់បង់យ៉ាងឆាប់រហ័ស។ ឯកសារនេះនឹងពន្យល់ជំហានទាំងអស់ដែលត្រូវអនុវត្តតាម ដើម្បីសម្រេចកិច្ចការនេះ។ សម្រាប់ការពន្យល់កាន់តែងាយស្រួល ឯកសារនេះត្រូវបានសរសេរសម្រាប់ NXP i.MX8 MINI processor និង mscldk ប៉ុន្តែអាចត្រូវបានអនុវត្តចំពោះប្រព័ន្ធដំណើរការ i.MX8- និង i.MX9-series ទាំងអស់ និងប្រព័ន្ធសាងសង់ផ្សេងទៀតដោយមានការខិតខំប្រឹងប្រែងតិចតួចបំផុត។

ការរៀបចំបរិស្ថាន

ការផ្លាស់ប្តូរច្រកបំបាត់កំហុសលំនាំដើម UART នឹងតម្រូវឱ្យមានការកែប្រែកូដនៅក្នុង Yocto ហើយវិធីងាយស្រួលបំផុតដើម្បីធ្វើវាគឺប្រើ Yocto devtool ដើម្បីរៀបចំប្រភពសម្រាប់ពួកយើង។ វានឹងចាំបាច់ក្នុងការកែប្រែកញ្ចប់ Yocto ខាងក្រោម៖

  • u-boot-imx (virtual/bootloader)
  • linux-imx (និម្មិត/ខឺណែល)
  • atf-imx
  • optee-os (លុះត្រាតែ optee ត្រូវបានប្រើ)

ប្រភពគួរតែត្រូវបានរៀបចំជាមួយ devtool: 

$ ./devtool កែប្រែ u-boot-imx
$ ./devtool កែប្រែ linux-imx
$ ./devtool កែប្រែ atf-imx
$ ./devtool កែប្រែ optee-os

ប្រភពទាំងអស់អាចរកបាននៅក្នុងថត "កន្លែងធ្វើការ" ។

ការកែប្រែលេខកូដ

ការកែប្រែកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធ

នៅក្នុង bootloader ការចាប់ផ្តើម UART មូលដ្ឋានមួយចំនួននឹងកើតឡើង ដូច្នេះវានឹងចាំបាច់ក្នុងការកែប្រែ muxing និង base address នៃ UART port ។ ភារកិច្ចទីពីរនៃ u-boot គឺត្រូវបញ្ជូន boot argument ទៅកាន់ kernel ហើយនៅទីនេះ វានឹងចាំបាច់ក្នុងការកែប្រែ console tty argument ។ ការចាប់ផ្តើម UART និង muxing កើតឡើងនៅដើមដំបូងបំផុត។tage នៃដំណើរការចាប់ផ្ដើមនៅក្នុង SPL ។ កូដប្រភពអាចរកបាននៅក្នុងក្រុមប្រឹក្សាភិបាលជាក់លាក់ spl.c file.

គោលដៅ file: កន្លែងធ្វើការ/ប្រភព/u-boot-imx/board/msc/sm2s_imx8mm/spl.c

បើក file ហើយរុករកទៅមុខងារ init_ser0():

ទុកជាមោឃៈ init_ser0 (ចាត់ទុកជាមោឃៈ)
{
imx_iomux_v3_setup_multiple_pads(ser0_pads, ARRAY_SIZE(ser0_pads)); init_uart_clk(1);
}

មុខងារធ្វើឱ្យនាឡិកាសកម្ម UART2(សន្ទស្សន៍ 1 សម្រាប់ UART រាងកាយ 2) ។

ឥឡូវនេះ ប្រសិនបើយើងចង់ប្រើ UART1 ជំនួសវិញ យើងអាចកំណត់មុខងារ init_ser1 ផ្ទាល់ខ្លួនរបស់យើង៖

ទុកជាមោឃៈ init_ser1 (ចាត់ទុកជាមោឃៈ)
{
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 pads ។ ដូច្នោះហើយ ser1_pads អាចត្រូវបានកំណត់ជា៖

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
};

ឬផ្សេងទៀតដោយប្រើ 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 };

ឥឡូវនេះអាសយដ្ឋានមូលដ្ឋាន UART គួរតែត្រូវបានកែប្រែ អាសយដ្ឋានត្រូវបានកំណត់នៅក្នុងការកំណត់បឋមកថារបស់ក្រុមប្រឹក្សា file.

គោលដៅ file: កន្លែងធ្វើការ/ប្រភព/u-boot-imx/include/configs/msc_sm2s_imx8mm.h

កែប្រែនិយមន័យ CONFIG_MXC_UART_BASE ។ សម្រាប់ UART1 នេះនឹងមានៈ 

  • // #កំណត់ CONFIG_MXC_UART_BASE
  • UART2_BASE_ADDR
  • #កំណត់ 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៖ workspace/sources/imx-atf/plat/imx/imx8m/imx8mm/platform.mk 

អាសយដ្ឋានមូលដ្ឋាន UART ត្រឹមត្រូវអាចរកបាននៅក្នុងសៀវភៅណែនាំ imx8 ។ នៅក្នុងនេះ អតីតampយើងប្តូរពី UART2 ទៅ UART1 នៅលើ imx8mm៖

# IMX_BOOT_UART_BASE ?= 0x30890000
IMX_BOOT_UART_BASE ?= 0x30860000

ការកែប្រែ optee-os

Optee OS ជាធម្មតាត្រូវបានផ្ទុកនៅពេលដែល CAAM module cryptography ត្រូវបានប្រើនៅលើប្រព័ន្ធ។ Optee ដំណើរការលើស្នូល ARM Cortex-A53 ដូចគ្នា ប៉ុន្តែនៅក្នុងឧទាហរណ៍ឯករាជ្យទាំងស្រុងមួយទៀតដូចជាខឺណែល។ Optee ក៏តម្រូវឱ្យមានការចូលប្រើ UART ហើយក្នុងករណីនេះវាមានន័យថាការកែប្រែអាសយដ្ឋានមូលដ្ឋាន។

គោលដៅ file: workspace/sources/optee-os/core/arch/arm/plat-imx/conf.mk

អតីតampឡេនឹងកំណត់អាសយដ្ឋានមូលដ្ឋាន UART ពី UART2 ទៅ UART1៖ 

#CFG_UART_BASE ?= UART2_BASE
CFG_UART_BASE ?= UART1_BASE

ការកែប្រែខឺណែល។

ខឺណែលនឹងតម្រូវឱ្យមានការកែប្រែមែកធាងឧបករណ៍តិចតួចប៉ុណ្ណោះ ហើយប្រសិនបើ UART មិនទាន់មាននៅក្នុងខឺណែលនៅឡើយ។ ក្នុង​ករណី​ជា​ច្រើន​ ការ​កែប្រែ​នឹង​មិន​ត្រូវ​បាន​ទាមទារ​ទាល់​តែ​សោះ។ ទោះយ៉ាងណាក៏ដោយ សូមផ្ទៀងផ្ទាត់ថាតើឧទាហរណ៍ tty ដែលអ្នកចង់ប្រើមានឬអត់! ពិនិត្យវត្តមាន tty ដោយប្រើពាក្យបញ្ជាសែល៖

$ 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 ថ្មីគួរតែមានមុខងារពេញលេញ សម្រាប់ការនោះសូមផ្ទៀងផ្ទាត់ការតភ្ជាប់ដោយប្រើសែល UART U-boot និងកុងសូលលីនុច។

ការគាំទ្រផលិតផល

វិស្វករ និងអ្នកបច្ចេកទេសបង្កប់ Avnet ប្តេជ្ញាផ្តល់ការគាំទ្រដល់អតិថិជនរបស់យើងនៅពេលណាដែលត្រូវការ។ មុននឹងទាក់ទងផ្នែកជំនួយបច្ចេកទេសរបស់ Avnet Embedded សូមពិគ្រោះជាមួយទំព័រនីមួយៗនៅលើរបស់យើង។ webគេហទំព័រនៅ
https://embedded.avnet.com/support/
សម្រាប់ឯកសារចុងក្រោយបំផុត កម្មវិធីបញ្ជា និងការទាញយកកម្មវិធី។

ប្រសិនបើព័ត៌មានដែលបានផ្តល់នៅទីនោះមិនអាចដោះស្រាយបញ្ហារបស់អ្នកបានទេ សូមទាក់ទងក្រុមជំនួយបច្ចេកទេស Avnet Embedded របស់យើងដូចខាងក្រោម៖

អ៊ីមែល៖ support.boards@avnet.eu
ទូរស័ព្ទ៖ +49 (0)8165 906-200

រូបសញ្ញា AVNET បង្កប់

ឯកសារ/ធនធាន

AVNET EMBEDDED MSC SM2S-IMX8M បំបាត់កំហុស UART Port ARM កុំព្យូទ័រផ្អែកលើម៉ូឌុល [pdf] សេចក្តីណែនាំ
MSC SM2S-IMX8M, MSC SM2S-IMX8M បំបាត់កំហុស UART Port ARM កុំព្យូទ័រផ្អែកលើម៉ូឌុល, បំបាត់កំហុស UART Port ARM កុំព្យូទ័រផ្អែកលើម៉ូឌុល, UART Port ARM កុំព្យូទ័រផ្អែកលើម៉ូឌុល, Port ARM កុំព្យូទ័រផ្អែកលើ Module, កុំព្យូទ័រផ្អែកលើ ARM នៅលើម៉ូឌុល កុំព្យូទ័រផ្អែកលើ Module កុំព្យូទ័រផ្អែកលើម៉ូឌុល

ឯកសារយោង

ទុកមតិយោបល់

អាសយដ្ឋានអ៊ីមែលរបស់អ្នកនឹងមិនត្រូវបានផ្សព្វផ្សាយទេ។ វាលដែលត្រូវការត្រូវបានសម្គាល់ *