Mbed OS Studio Debugger (pyOCD) выдает ошибку, записывая неправильный адрес прошивки.

Вопрос или проблема

Я получаю ошибку :WARNING:builder:Chip erase used when flash address 0x8020000 is not the same as flash start 0x8000000 при попытке загрузить целевую отладку на устройстве STM32H743VITx. Это перезаписывает загрузчик и вызывает сбой прошивки во время сеанса отладки.

Я установил правильное значение mbed_rom_start в json для custom_target, и сборка и загрузка релизных сборок происходит успешно, но в какой-то момент после этого происходит сбой. Вот почему я пытаюсь запустить отладчик на устройстве. Проблема в том, что команда pyocd flash erase использует адрес 0x80000, а не 0x8020000.

"bootloader_supported": true,
"mbed_rom_start": "0x8020000",
"mbed_ram_size":  "0x100000",
"mbed_size":      "0x200000",
"mbed_ram_start": "0x20000000",

Существует ли способ настроить целевую отладку на использование правильного адреса? Я делаю что-то еще неправильно? Я пытался добавить base-address в флаги отладки, но возникли ошибки при запуске сервера.

--target STM32H743VITx   --erase=chip --frequency 1800000 --pack '/Library/Application Support/Mbed Studio/mbed-studio-tools/cmsis-packs/Keil.STM32H7xx_DFP.2.7.0-small.pack' -O connect_mode=under-reset

Я также пытался обновить целевую установку STM32H743VITx в ./mbed-os/tools/arm_pack_manager/index.json с

    "algorithms": [
        {
            "default": true,
            "file_name": "CMSIS/Flash/STM32H7x_2048.FLM",
            "ram_size": 1048576,
            "ram_start": 536870912,
            "size": 2097152,
            "start": 134348800
        }

==================

Выбран порт 50000 для отладки
0000452:INFO:board:Тип цели - stm32h743vitx
0000527:INFO:coresight_target:Утверждение сброса перед подключением
0000585:INFO:dap:DP IDR = 0x6ba02477 (v2 rev6)
0000639:INFO:ap:AHB-AP#0 IDR = 0x84770001 (AHB-AP var0 rev8)
0000641:INFO:ap:AHB-AP#1 IDR = 0x84770001 (AHB-AP var0 rev8)
0000643:INFO:ap:APB-AP#2 IDR = 0x54770002 (APB-AP var0 rev5)
0000648:INFO:rom_table:AHB-AP#0 Класс 0x1 ROM таблица #0 @ 0xe00fe000 (дизайнер=020 деталь=483)
0000650:INFO:rom_table:[0]
0000650:INFO:rom_table:  AHB-AP#0 Класс 0x1 ROM таблица #1 @ 0xe00ff000 (дизайнер=43b деталь=4c7)
0000652:INFO:rom_table:  [0]
0000653:INFO:rom_table:  [1]
0000654:INFO:rom_table:  [2]
0000655:INFO:rom_table:  [3]
0000656:INFO:rom_table:[1]
0000657:INFO:rom_table:[2]
0000658:INFO:rom_table:APB-AP#2 Класс 0x1 ROM таблица #0 @ 0xe00e0000 (дизайнер=020 деталь=483)
0000660:INFO:rom_table:[0]
0000661:WARNING:rom_table:Неверный компонент coresight, cidr=0x0
0000661:INFO:rom_table:[2]
0000662:ERROR:rom_table:Ошибка при попытке опросить компонент CoreSight, на который ссылается элемент таблицы ROM #5: Ошибка передачи памяти (чтение) @ 0xe00f0fbc-0xe00f1043
Отслеживание (последний вызов был последним):
  Файл "/Library/Application Support/Mbed Studio/mbed-studio-tools/python/lib/python3.7/site-packages/pyocd/coresight/rom_table.py", строка 358, в _read_table
    self._handle_table_entry(entry, entryNumber)
  Файл "/Library/Application Support/Mbed Studio/mbed-studio-tools/python/lib/python3.7/site-packages/pyocd/coresight/rom_table.py", строка 408, в _handle_table_entry
    cmpid.read_id_registers()
  Файл "/Library/Application Support/Mbed Studio/mbed-studio-tools/python/lib/python3.7/site-packages/pyocd/coresight/rom_table.py", строка 113, в read_id_registers
    regs = self.ap.read_memory_block32(self.top_address + self.IDR_READ_START, self.IDR_READ_COUNT)
  Файл "/Library/Application Support/Mbed Studio/mbed-studio-tools/python/lib/python3.7/site-packages/pyocd/probe/stlink_probe.py", строка 271, в read_memory_block32
    return self._read_mem(addr, size, Commands.JTAG_READMEM_32BIT, self.MAXIMUM_TRANSFER_SIZE, apsel)
  Файл "/Library/Application Support/Mbed Studio/mbed-studio-tools/python/lib/python3.7/site-packages/pyocd/probe/stlink/stlink.py", строка 343, в _read_mem
    raise exc
pyocd.core.exceptions.TransferFaultError: Ошибка передачи памяти (чтение) @ 0xe00f0fbc-0xe00f1043
0000664:INFO:cortex_m:Ядро CPU #0 - Cortex-M7 r1p2
0000666:INFO:cortex_m:FPU присутствует: FPv5-D16-M
0000668:INFO:dwt:4 аппаратных точек наблюдения
0000671:INFO:fpb:8 аппаратных точек останова, 1 литеральный компаратор
0000678:INFO:coresight_target:Сброс после подключения
0000683:INFO:server:Сервер Semihost запущен на порту 4444 (ядро 0)
0000693:INFO:gdbserver:Сервер GDB запущен на порту 50000 (ядро 0)
Чтение символов из /Users/seanmccully/Sources/CNC/Remora/Firmware/FirmwareSource/Remora-OS6/BUILD/SKRV3/ARMC6/firmware_application.elf...
предупреждение: 
Загружаемый раздел "RW_IRAM1" вне сегментов ELF
(символы отладки не найдены)...завершено.
0000803:INFO:gdbserver:Клиент подключен к порту 50000!
предупреждение: Загружаемый раздел "RW_IRAM1" вне сегментов ELF
0x080002c2 в ?? ()
0000896:INFO:gdbserver:Попытка загрузить argon
0000896:INFO:gdbserver:Попытка загрузить freertos
0000896:INFO:gdbserver:Попытка загрузить rtx5
0000896:INFO:gdbserver:Попытка загрузить threadx
0000896:INFO:gdbserver:Попытка загрузить zephyr
Сброс целевой системы с остановкой
Успешно остановлен устройство при сбросе
Присоединено к отладчику на порту 50000
0001539:WARNING:builder:Chip erase used when flash address 0x8020000 is not the same as flash start 0x8000000
0018000:INFO:loader:Стерт чип, записано 201728 байт (197 страниц), пропущено 60416 байт (59 страниц) со скоростью 15.00 кБ/с
Сброс целевой системы с остановкой
Успешно остановлен устройство при сбросе
Изображение загружено: /Users/seanmccully/Sources/CNC/Remora/Firmware/FirmwareSource/Remora-OS6/BUILD/SKRV3/ARMC6/firmware_application.elf
Примечание: автоматически используются аппаратные точки останова для адресов только для чтения.
Программа
 получила сигнал SIGSEGV, ошибка сегментации.
0xfffffffe в ?? ()
0036510:INFO:gdbserver:Клиент отсоединен
0036510:INFO:gdbserver:Клиент отключен от порта 50000!

Ответ или решение

Решение проблемы с ошибками Mbed OS Studio Debugger (pyOCD) при загрузке прошивки на STM32H743VITx

Ваша проблема, связанная с ошибкой :WARNING:builder:Chip erase used when flash address 0x8020000 is not the same as flash start 0x8000000, указывает на то, что процесс стирания флеш-памяти осуществляется по неправильному адресу, который приводит к перезаписи загрузчика и сбою прошивки в процессе отладки. Основные причины и возможные решения описаны ниже.

1. Проверка конфигурационных файлов

Убедитесь, что вы правильно настроили файл конфигурации custom_target.json. В вашем случае необходимо, чтобы параметры, соответствующие началу и концу области флеш-памяти, были установлены корректно:

"bootloader_supported": true,
"mbed_rom_start": "0x8020000",
"mbed_ram_size":  "0x100000",
"mbed_size":      "0x200000",
"mbed_ram_start": "0x20000000",

Значение mbed_rom_start должно точно указывать на адрес, где начинается пользовательская прошивка. Убедитесь, что при сборке не используются конфликты с другими настройками целевого устройства.

2. Установка адреса в отладочных флагах

Попробуйте настроить адрес при использовании pyOCD. При запуске dbger с помощью командной строки можно добавить флаг --base-address, чтобы указать правильный адрес загрузки. Если возникают ошибки сервера, это может сделать вашу команду некорректной. Например:

--target STM32H743VITx --erase=chip --frequency 1800000 --pack '/Library/Application Support/Mbed Studio/mbed-studio-tools/cmsis-packs/Keil.STM32H7xx_DFP.2.7.0-small.pack' --base-address=0x8020000 -O connect_mode=under-reset

Обратите внимание, что может потребоваться иная синтаксическая конструкция, в зависимости от используемой версии pyOCD.

3. Проверьте совместимость плагинов и версий программного обеспечения

Убедитесь, что используемые плагины и библиотеки pyOCD совместимы с вашей версией Mbed и STM32H7xx. Иногда новые обновления могут вызывать проблемы с определенными устройствами. Ваша строка с обновлением в файле index.json может потребовать дополнительных корректировок:

"algorithms": [
    {
        "default": true,
        "file_name": "CMSIS/Flash/STM32H7x_2048.FLM",
        "ram_size": 1048576,
        "ram_start": 536870912,
        "size": 2097152,
        "start": 134348800
    }
]

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

4. Очистка и повторная сборка проекта

Если проблема сохраняется, выполните очистку проекта и создайте его заново. Это позволит убрать любые временные файлы или временные настройки, которые могут быть загружены неправильно:

mbed clean
mbed build

5. Логирование и отслеживание ошибок

Обратите внимание на вывод отладчика при запуске. Ошибки типа Memory transfer fault могут указывать на проблемы с доступом к памяти или неправильной конфигурацией памяти. Удостоверьтесь в том, что вы используете правильные адреса для загрузки и отладки проекта.

Заключение

Тем не менее, ошибка, с которой вы столкнулись, может иметь несколько причин, и может потребоваться комплексный подход для её минимизации. Проверьте все настройки, пересмотрите конфигурацию среды и, возможно, протестируйте на другом стенде для исключения проблем с оборудованием. Если проблема сохраняется, стоит рассмотреть возможность обращения к форумам поддержки Mbed или STM32 для получения более целенаправленного решения.

Оцените материал
Добавить комментарий

Капча загружается...