Перейти к содержанию
    

JTAG отладка Allwinner H5 (Cortex-A53)

Всем привет. Есть плата на Allwinner H5 Cortex-A53 4 ядра. Через IAR и JLink образ для отладки в SRAM грузится нормально, но выполнения инструкций не происходит, PC не меняется, как будто ни одно ядро не активно. Чтение\запись регистров\памяти, в том числе PC выполняется нормально. 

В дизассемблере вижу годные инструкции. PC стоит там, где нужно. 

Возможно нужно какие то дополнительные манипуляции совершить перед\после загрузки образа, чтобы активировать ядро?

 

Spoiler

T46AC 020:555.454   TotalIRLen = 4, IRPrint = 0x01
T46AC 020:556.124   JTAG chain detection found 1 devices:
T46AC 020:556.144    #0 Id: 0x5BA00477, IRLen: 04, CoreSight JTAG-DP
T46AC 020:558.296   DPv0 detected
T46AC 020:558.316   Scanning AP map to find all available APs
T46AC 020:560.040   AP[2]: Stopped AP scan as end of AP map has been reached
T46AC 020:560.066   AP[0]: AHB-AP (IDR: 0x64770001)
T46AC 020:560.080   AP[1]: APB-AP (IDR: 0x44770002)
T46AC 020:560.096   Iterating through AP map to find APB-AP to use
T46AC 020:560.110   AP[0]: Skipped. Not an APB-AP
T46AC 020:560.124   AP[1]: APB-AP found
T46AC 020:560.140   No AP map specified by user. Setting auto-detected AP map.
T46AC 020:560.962   Scanning ROMTbl @ 0x80000000
T46AC 020:567.612   [0]Comp[0] @ 0x81000000: ROM Table
T46AC 020:567.628   Scanning ROMTbl @ 0x81000000
T46AC 020:575.518   [1]Comp[0] @ 0x81010000: Cortex-A53
T46AC 020:578.522   [1]Comp[1] @ 0x81020000: CSS600-CTI
T46AC 020:578.546   Core found. Stopped ROM table scan: https://wiki.segger.com/ROMTableScan
T46AC 020:578.572   Cortex-A53 @ 0x81010000 (detected)
T46AC 020:578.588   CoreCTI @ 0x81020000 (detected)
T46AC 020:580.668   Debug architecture: ARMv8.0
T46AC 020:580.756   6 code breakpoints, 4 data breakpoints
T46AC 020:582.378   Processor features:
T46AC 020:582.398     EL0 support: AArch64 + AArch32
T46AC 020:582.412     EL1 support: AArch64 + AArch32
T46AC 020:582.428     EL2 support: AArch64 + AArch32
T46AC 020:582.444     EL3 support: AArch64 + AArch32
T46AC 020:582.460     FPU support: Single + Double + Conversion
T46AC 020:583.382   -- Max. mem block: 0x000047B0
T46AC 020:585.768   Add. info (CPU temp. halted)
T46AC 020:611.772   Current exception level: EL3
T46AC 020:611.802   Exception level AArch usage:
T46AC 020:611.816     EL0: AArch32
T46AC 020:611.828     EL1: AArch32
T46AC 020:611.838     EL2: AArch32
T46AC 020:611.854     EL3: AArch32
T46AC 020:611.868   Non-secure status: Secure
T46AC 020:613.680   Cache info:
T46AC 020:613.702     Inner cache boundary: none
T46AC 020:613.716     LoU Uniprocessor: 1
T46AC 020:613.728     LoC: 2
T46AC 020:613.740     LoU Inner Shareable: 1
T46AC 020:617.726   I-Cache L1: 32 KB, 256 Sets, 64 Bytes/Line, 2-Way
T46AC 020:617.756   D-Cache L1: 32 KB, 128 Sets, 64 Bytes/Line, 4-Way
T46AC 020:617.772   Unified-Cache L2: 512 KB, 512 Sets, 64 Bytes/Line, 16-Way
T46AC 020:626.326 - 73.917ms returns FALSE
T46AC 020:626.368 JLINK_GetIdData(pIdData)
T46AC 020:627.162   pIdData->ScanLen=4
T46AC 020:627.180   pIdData->NumDevices=1
T46AC 020:627.184   pIdData->aId[0]=0x5BA00477
T46AC 020:627.188   pIdData->aIrRead[0]=0
T46AC 020:627.194   pIdData->aScanLen[0]=4
T46AC 020:627.196   pIdData->aScanRead[0]=0
T46AC 020:627.202 - 0.833ms
T46AC 020:627.306 JLINK_JTAG_GetDeviceID(DeviceIndex = 0)
T46AC 020:627.312 - 0.006ms returns 1537213559
T46AC 020:627.316 JLINK_JTAG_GetDeviceInfo(DeviceIndex = 0)
T46AC 020:627.320 - 0.003ms returns 0
T46AC 020:627.346 JLINK_HasError()
T46AC 020:627.352 JLINK_GetDeviceFamily
T46AC 020:627.356 - 0.003ms returns 20
T46AC 020:627.358 JLINK_GetDeviceFamily
T46AC 020:627.362 - 0.002ms returns 20
T46AC 020:627.364 JLINK_GetDeviceFamily
T46AC 020:627.368 - 0.002ms returns 20
T46AC 020:627.372 JLINK_GetDeviceFamily
T46AC 020:627.372 - 0.002ms returns 20
T46AC 020:627.376 JLINK_GetDeviceFamily
T46AC 020:627.380 - 0.002ms returns 20
T46AC 020:627.382 JLINK_GetDeviceFamily
T46AC 020:627.386 - 0.002ms returns 20
T46AC 020:627.388 JLINK_GetDeviceFamily
T46AC 020:627.392 - 0.002ms returns 20
T46AC 020:627.396 JLINK_GetDeviceFamily
T46AC 020:627.398 - 0.002ms returns 20
T46AC 020:627.402 JLINK_GetDeviceFamily
T46AC 020:627.404 - 0.002ms returns 20
T46AC 020:627.408 JLINK_GetDeviceFamily
T46AC 020:627.412 - 0.002ms returns 20
T46AC 020:627.414 JLINK_GetDeviceFamily
T46AC 020:627.416 - 0.002ms returns 20
T46AC 020:627.420 JLINK_Halt()
T46AC 020:652.442 - 25.020ms returns 0x00
T46AC 020:656.928 JLINK_GetSpeed()
T46AC 020:656.942 - 0.013ms returns 1000
T46AC 020:656.948 JLINK_SetMaxSpeed()
T46AC 020:657.424 - 0.476ms
T46AC 020:657.460 JLINK_BeginDownload(Flags = 0x00000003)
T46AC 020:657.464 - 0.005ms
T46AC 020:693.404 JLINK_GetHWStatus(...)
T46AC 020:693.786 - 0.380ms returns 0
T46AC 020:693.824 JLINK_IsHalted()
T46AC 020:693.830 - 0.006ms returns TRUE
T46AC 020:693.836 JLINK_WriteMem(0x00010100, 0x130 Bytes, ...)
T46AC 020:693.840   Data:  00 00 0F E1 1F 00 C0 E3 12 00 80 E3 00 F0 21 E1 ...
T46AC 020:694.016   CPU_WriteMem(304 bytes @ 0x00010100)
T46AC 020:696.054 - 2.218ms returns 0x130
T46AC 020:696.084 JLINK_EndDownload()
T46AC 020:696.090 - 0.005ms returns 0 (0x0)
T46AC 020:696.102 JLINK_ReadMemU32(0x00010100, 0x4C Items)
T46AC 020:696.562   CPU_ReadMem(304 bytes @ 0x00010100)
T46AC 020:702.536   Data:  00 00 0F E1 1F 00 C0 E3 12 00 80 E3 00 F0 21 E1 ...
T46AC 020:702.548 - 6.445ms returns 76 (0x4C)
T46AC 020:702.698 JLINK_ReadRegs(NumRegs = 1, Indexes: 9)
T46AC 020:702.706    -- R9=0x01
T46AC 020:702.712 - 0.013ms returns 0x00
T46AC 020:715.998 JLINK_WriteReg(R8, 0x000000D3)
T46AC 020:716.028 - 0.029ms returns 0
T46AC 020:716.038 JLINK_WriteReg(R9, 0x00010100)
T46AC 020:716.042 - 0.003ms returns 0
T46AC 020:716.052 JLINK_ReadRegs(NumRegs = 1, Indexes: 😎
T46AC 020:716.064    -- R8=0xD3
T46AC 020:716.070 - 0.017ms returns 0x00
T46AC 020:716.076 JLINK_WriteReg(R8, 0x000000D3)
T46AC 020:716.080 - 0.003ms returns 0
T46AC 020:716.698 JLINK_SetBPEx(Addr = 0x000101B0, Type = 0xFFFFFFF1)
T46AC 020:716.710 - 0.013ms returns 0x00000001
T46AC 020:716.716 JLINK_WriteVectorCatch(0x00000000)
T46AC 020:716.722   
  ***** Error: 
T46AC 020:716.726   Vector catch is not supported for this CPU core
T46AC 020:716.732 - 0.014ms returns -1
T46AC 020:718.988 JLINK_SetBPEx(Addr = 0x00000008, Type = 0xFFFFFFF1)
T46AC 020:719.002 - 0.014ms returns 0x00000002
T46AC 025:463.220 JLINK_GetHWStatus(...)
T46AC 025:463.714 - 0.494ms returns 0
T46AC 025:463.730 JLINK_IsHalted()
T46AC 025:464.160 - 0.429ms returns TRUE

 

Изменено пользователем grinux
Переместил тему в соответствующий раздел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В каком состоянии перед тем как вы запустили код находился процессор? Не одно из устройств загрузки ему не доступно и он как usb устройство виден? Тогда aarch32

Или уже отработал загрузчик Linux и ядро (ядра) в aarch64?

Ps: есть опыт с bare metal allwinner a64 h616 t507 t113-s3 f133

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 часов назад, grinux сказал:

В дизассемблере вижу годные инструкции. PC стоит там, где нужно. 

T46AC 020:693.836 JLINK_WriteMem(0x00010100, 0x130 Bytes, ...)
T46AC 020:693.840   Data:  00 00 0F E1 1F 00 C0 E3 12 00 80 E3 00 F0 21 E1 ...
T46AC 020:694.016   CPU_WriteMem(304 bytes @ 0x00010100)
T46AC 020:696.054 - 2.218ms returns 0x130

Что он тогда пишет по данному адресу, когда SRAM начинается с 00010000 ? Зачем это смещение (100)?

Где у него команда передачи управления по этому адресу, ничего не вижу, кроме этого - 

T46AC 020:716.698 JLINK_SetBPEx(Addr = 0x000101B0, Type = 0xFFFFFFF1)

12 часов назад, GenaSPB сказал:

Тогда aarch32

Он вроде честно признается:

T46AC 020:611.802   Exception level AArch usage:
T46AC 020:611.816     EL0: AArch32

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 hours ago, GenaSPB said:

В каком состоянии перед тем как вы запустили код находился процессор? Не одно из устройств загрузки ему не доступно и он как usb устройство виден? Тогда aarch32

Или уже отработал загрузчик Linux и ядро (ядра) в aarch64?

Ps: есть опыт с bare metal allwinner a64 h616 t507 t113-s3 f133

Все верно, он не находит с чего грузиться, переключается в режим USB FEL и перенастраивает пины SDIO на JTAG.

A64 это очень похожий процессор. У вас получилось на нем отлаживаться через JTAG?

У меня есть успешный опыт на V3s и H3, грузится в том числе в DDR и отлаживается через IAR-JLink нормально. 

1 hour ago, mantech said:

T46AC 020:693.836 JLINK_WriteMem(0x00010100, 0x130 Bytes, ...)
T46AC 020:693.840   Data:  00 00 0F E1 1F 00 C0 E3 12 00 80 E3 00 F0 21 E1 ...
T46AC 020:694.016   CPU_WriteMem(304 bytes @ 0x00010100)
T46AC 020:696.054 - 2.218ms returns 0x130

Что он тогда пишет по данному адресу, когда SRAM начинается с 00010000 ? Зачем это смещение (100)?

Появилось в результате экспериментов с конфигурацией линкера. Поведение не отличается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я отлаживался под t507. Правда приходилось заранее запускать gdb server segger, иначе отваливалось по слишком длинной строке на приём в gdb.

И для устойчивости отладки делал одноядерную версию программы.

2 hours ago, mantech said:

Он вроде честно признается

Остальные ядра при xfel под ресетом сидят, а оно и про них что-то говорит

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, GenaSPB сказал:

Остальные ядра при xfel под ресетом сидят, а оно и про них что-то говорит

Так это ж CoreSight, встроенный отладочный движок, ему по барабану, что и где там под ресетом, он сам может выставлять и снимать ресеты, когда нужно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, GenaSPB said:

Я отлаживался под t507. Правда приходилось заранее запускать gdb server segger, иначе отваливалось по слишком длинной строке на приём в gdb.

 

У вас работала 1-ядерная JTAG отладка из состояния USB FEL без дополнительных телодвижений, кроме тех, что вы описали? Отлаживались через что?

Изменено пользователем grinux

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Segger edu не последний. 9й наверное.  Да ничего дополнительно. 

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, GenaSPB said:

Segger edu не последний. 9й наверное 

A53 поддерживается только 10-м и старше. Я имел ввиду, в какой среде? IAR\Keil и т.п.

Изменено пользователем grinux

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Позже скажу какой точно. А так это gdb в еклипсе для embedded. Gcc 13.2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Взял плату на H616. Он ближе к T507. Точно такое же поведение.

Обратил внимание на такой эффект. Делаем пошаговое исполнение. PC стоит на месте, но при этом некоторые регистры (R0, R5) меняются с циклическим повторением значений. Между повторениями на последнем шаге ощутимая пауза (2-3 сек). Т.е. "что-то" там все-таки происходит

Изменено пользователем grinux

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Segger edu v11.

Да ну её пошаговую отладку... светодиод, компорт ‐ наше всё... честное слово,  оно точно по даташиту. Что вы хотите проверить пошагово?

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, grinux сказал:

Обратил внимание на такой эффект. Делаем пошаговое исполнение. PC стоит на месте, но при этом некоторые регистры (R0, R5) меняются с циклическим повторением значений.

Запретите прерывания. Можно просто поставить галку "Disable Interrupts When Stepping" в IAR. Или запретить через соответствующий регистр CPU.

3 часа назад, grinux сказал:

 

Между повторениями на последнем шаге ощутимая пауза (2-3 сек). Т.е. "что-то" там все-таки происходит

Разбирайтесь в своей программе. Где она гуляет 2-3 сек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 minutes ago, jcxz said:

Запретите прерывания. Можно просто поставить галку "Disable Interrupts When Stepping" в IAR. Или запретить через соответствующий регистр CPU.

Разбирайтесь в своей программе. Где она гуляет 2-3 сек.

Спасибо за идею. Запретил, ничего не поменялось.

Программа не может нигде гулять, потому что там пустой main и стандартная инициализация от iar

 image.png.8ed6d8f5a57ca4c49f43944f51a5652d.png

Изменено пользователем grinux

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...