Статьи

Ошибка отладки: контрольный список и подсказки

Я думаю, что самым большим разочарованием для любого нового или даже опытного инженера является фаза отладки: мое приложение наконец-то работает нормально, но я не могу подключиться и загрузить его на целевую плату :-(. На мой взгляд, отладочная часть самая хрупкая часть процесса разработки. Я всегда очень рад, что могу подключиться к совершенно новой плате, потому что я знаю, что если она не работает, то проблема может быть очень плохой, стоить моих нескольких часов или даже дней, чтобы преодолеть это.

Ошибка удаленной связи

Ошибка удаленной связи, что теперь?

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

Контрольный список

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

  1. Проверьте источник питания . Слишком много раз плата не получает питание или источник питания не включается. Или хуже того, что внешний источник питания не стабилен или не может обеспечить необходимый ток. У меня был случай, когда внешний источник питания сбрасывал напряжение каждую минуту или около того, что драматично сказывалось на плате. Если ваша плата питается от USB: убедитесь, что питание достаточно. Некоторые ноутбуки обеспечивают только 100 мА, используют концентратор с питанием или настенный блок питания USB 5 В. P & E Multilink и другие отладочные датчики имеют светодиодный индикатор мощности, который помогает в такой ситуации.

    Индикатор питания на P & E Multilink

    Индикатор питания на P & E Multilink

  2. Проверьте разъем : на платах Freescale Freedom есть два порта USB, но только один предназначен для отладки:

    Неверный USB-порт

    Неверный USB-порт

  3. Проверьте полярность вашего отладочного кабеля : многие отладочные разъемы / разъемы не защищают вас от неправильного подключения кабеля.

    Неправильная ориентация кабеля

    Неправильная ориентация кабеля

  4. Убедитесь, что вы говорите с нужным устройством . Если у вас есть несколько плат и несколько отладочных устройств: убедитесь, что вы подключаетесь с правильным. убедитесь, что ваше устройство отладки в списке. У большинства отладочных кабелей есть USB ID: я ставлю наклейки с номером на отладочное устройство.

    Подключено несколько устройств отладки

    Подключено несколько устройств отладки

  5. Убедитесь, что у вас есть файл : если вы получите диалоговое окно, сообщающее, что файл программы не существует:

    Программный файл не существует

    Программный файл не существует

    Тогда это точно означает, что: файл программы не существует (:-)), или вы не указали ни один, или несуществующий файл. Проверьте конфигурацию отладки / запуска и укажите правильный файл:

    Нет файла программы в конфигурации запуска

    Нет файла программы в конфигурации запуска

  6. Обновление микропрограммы платы / зонда отладки : я провел несколько раз для отладки проблемы, только чтобы выяснить, что новая микропрограмма платы / зонда отладки решает проблему. В редких случаях новая прошивка может что-то сломать, поэтому на всякий случай сохраняйте резервные копии старой прошивки. Смотрите « Иллюстрированные пошаговые инструкции: Обновление прошивки платы Freedom для Freescale », как обновить прошивку платы Freedom.
  7. Не используйте значок «отладка» : в Eclipse Kepler + CDT существует ошибка, из-за которой нажатие кнопки «отладка» не запускает правильную конфигурацию или приводит к ошибкам в противном случае.

    Кнопка Отладка как

    Кнопка Отладка как

    Вместо этого выберите конфигурацию отладки / запуска из выпадающего списка:

    Отладка из выпадающего списка

    Отладка из выпадающего списка

    Если у вас ничего нет в списке, выберите запись «Debug Configurations…» и оттуда нажмите «Debug». Используйте параметр меню «Избранное», чтобы вызвать его в список:

    Отображать в избранном меню

    Отображать в избранном меню

  8. Убить висячих отладчиков . Проверьте в диспетчере задач, есть ли у вас процесс отладки зомби (исполняемый файл gdb или какая-либо технология отладчика, которую вы используете, см. « Мягкое убийство меня: зомби и отладочные движки » или  здесь ).

    GDB Зомби

    GDB Зомби !!!!

    Убей их в диспетчере задач. Или выйдите из IDE. Если это не помогает: перезагрузите компьютер в крайнем случае. Если вы попытаетесь запустить вторую отладочную сессию, когда она уже запущена, возникает проблема с GDB.

    Error in final launch sequence
    Failed to execute MI command:
    -target-select remote 127.0.0.1:7224
    
    Error message from debugger back end:
    Remote communication error.  Target disconnected.: No error.
    Remote communication error.  Target disconnected.: No error.
    Попытка отладки дважды

    Попытка отладки дважды

    Kill / Terminate сначала текущий сеанс отладки перед началом нового.

  9. Проверьте драйверы хоста . Драйверы USB являются постоянным источником боли. Убедитесь, что вы знаете, какие драйверы USB должны быть активны / присутствовать в вашей системе. Запишите вашу текущую конфигурацию, потому что, возможно, вы получите обновление хост-машины или что-то еще, и ваши драйверы больше не будут работать. Смотрите « Исправление драйверов USB ». Если на вашей машине есть разъемы USB 3.0, переключитесь на USB 2.0, так как для меня USB 3.0 — постоянный источник проблем.
  10. Проверьте кабели . У меня было слишком много раз плохие USB-кабели, попробуйте заменить кабели. В одном случае USB-штекер ноутбука был изношен, попробуйте разные USB-порты. У меня также была плохая отладка плоских кабелей: если они используются слишком долго или слишком сильно изогнуты, кабель может сломаться внутри, вызывая всевозможные странные проблемы. Проверьте также USB-разъем датчика отладки (холодная пайка на разъемах, может быть так же плохо, как в « Как НЕ паять разъемы на плате»).«? Перепайка разъемов помогла мне в одном случае). Я видел человека, жалующегося на то, что отладка не работает, и я заметил, что длина USB-кабеля была 5 или 6 метров (да!). В другом случае у нас были частые сбои отладки, и причиной был шум от соседнего двигателя, который влиял на сигналы в отладочном датчике и кабеле: экранирование кабелей и датчика плюс укорочение плоского кабеля решило проблему. В любом случае: дублируйте критически важное оборудование: проще заменить часть цепи, чем просто догадываться, сломан ли ваш отладочный зонд или нет. У меня были плохие отладочные датчики, вероятно, сломанные электростатическим разрядом или другим высоким напряжением: наличие второго устройства под рукой будет огромной экономией времени.
  11. Проверьте SWD или JTAG . Многие контроллеры ARM могут использоваться с SWD или JTAG (см. « Использование FRDM-K64F с CodeWarrior »). Если у вашего совета только SWD, а у вас вы получите например:
    Connecting to target.
    OpenSDA detected - Flash Version 1.14
    Can not enter background mode.
    Unable to initialize PEDebug.
    PE-ERROR: Failed to Initialize Target

    Затем вы пытаетесь подключиться в режиме JTAG к плате, а не к SWD. Убедитесь, что в вашем отладчике установлены правильные настройки:

    Набор параметров отладки SWD

    Набор параметров отладки SWD

  12. Проверьте процессор : если не установить правильный процессор в настройках отладчика, то отладчик сможет общаться с совершенно другим процессором (другой алгоритм программирования флэш-памяти, другая карта памяти и т. Д.), И все будет плохо. Легко выбрать неправильное устройство из списка. Каждая буква или цифра имеют значение.

    Много устройств

    Много устройств

    Внимательно проверьте, что припаяно на плате: возможно, схемы неправильные, или у вас есть похожая (но другая) плата. У меня был случай, когда фабрика заполнила не тот микроконтроллер!

  13. Проверьте часы . На ядрах ARM вам необходимо «синхронизировать» любые периферийные устройства, прежде чем вы сможете получить к ним доступ, или вы получите серьезную ошибку. Убедитесь, что вы, например, часы RTC, прежде чем получить к нему доступ. Возможно, вам даже потребуется сначала подключить внешнее устройство с помощью специального контакта. Попробуйте сначала запустить ваш микроконтроллер с внутренними часами, по умолчанию и на низкой скорости. Проверьте цепь внешних часов, проверьте технические характеристики вашего генератора / кристалла, если вы использовали правильную сеть с байпасной емкостью. Помните, что внешние тактовые сигналы должны быть как можно ближе к процессору, и что они могут влиять на другие трассировки. У меня был случай, когда следы отладки были направлены под осциллятором. Конечно, это был большой недостаток :-(.
  14. Проверьте сторожевой таймер : на некоторых устройствах сторожевой таймер включен по умолчанию. Если сторожевой таймер не будет выгнан, он перезагрузит ваш процессор. Убедитесь, что сторожевой таймер отключен очень рано при запуске (сразу после сброса).
  15. Проверьте логи . Внимательно осмотрите логи отладчика или вывод консоли. Имеет ли это смысл? Перечислены ли ожидаемые параметры? Что делает отладчик и когда он выходит из строя?

    Журнал консоли отладчика

    Журнал консоли отладчика

  16. Шаг через код запуска . Если вы можете подключиться, но приложение как-то не доходит до основного, вам нужно будет выполнить отладку через код запуска. У вашей настройки отладчика должно быть что-то вроде «запустить до основного» или «запустить после сброса»: отключите его, чтобы вы могли узнать, что происходит.

    Запуск после сброса отключен

    Запуск после сброса отключен

  17. Проверьте контакты отладки : если вы сделали свою собственную плату, правильны ли сигналы / площадь? Сбросить линию стабильно и в соответствии с рекомендациями производителя (обычно подтягивание с помощью конденсатора)? Используйте как область для проверки сигналов. Проверьте, нет ли ярлыков между сигнальными линиями. Отладочный зонд нуждается в линии сброса, чтобы остановить процессор: если подтягивание слишком сильное или C слишком высокое, отладчику может быть трудно получить доступ. У меня был один случай, когда процессор был перепаян (пакет QFN) неправильно :-(.
  18. Проверьте, не отключили ли вы отладку : защитили ли вы свою часть (см. « Как (не) защитить мой микроконтроллер »)? Если он защищен, отладка невозможна, поэтому, надеюсь, вы все равно сможете выполнить массовое стирание (см. « Разблокировка и стирание FLASH с помощью Segger J-Link »). С помощью современного микроконтроллера можно отводить выводы отладки для выполнения функций общего назначения. Проверьте, не отключили ли вы в приложении критические ресурсы для отладки (сбросить штырьки? Штырьки JTAG / SWD?). Некоторые процессоры имеют дополнительные «контакты обновления прошивки», например  EzPort  на Kinetis / ColdFire: неправильное подключение этих контактов приведет к тому, что процессор перейдет в специальный режим загрузки / загрузки, что помешает отладке.
  19. Разделяй и властвуй : Попытайся получить работающее решение / проект (например, используйте простой / пустой проект с оценочной доской от вашего поставщика). Тогда узнайте, что отличается в вашей неработающей среде. Попробуйте ограничить количество переменных: удалите внешние / ненужные соединения на плате. У меня был случай, когда возникла проблема с цепью внешних часов: удаление этих часов привело меня на правильный путь.
  20. Сохраняйте контрольный журнал : используйте систему контроля версий для вашего проекта (ов). Много раз это работает в течение длительного времени, и затем вы вносите (вы думаете, что это не связано) изменение, и вещи больше не работают. Использование системы контроля версий, такой как Git, позволяет вам вернуться назад во времени или изменить то, что вы изменили. Это также поможет вам, когда инструмент повредил вам некоторые настройки.
  21. Попробуйте разные инструменты / машины : надеюсь, у вас есть выбор альтернативных инструментов. Как ни печально, в зависимости от вашей системы / драйверов / других установленных инструментов, один или другой инструмент может просто не работать. Попробуйте установить инструменты на новую машину, чтобы посмотреть, поможет ли это. Используйте другую операционную систему (32-битная / 64-битная, другая версия Windows и т. Д.), Попробуйте ее на своем домашнем компьютере. Может быть, это работает на одной машине, чтобы вы могли изолировать проблему.
  22. Повторно включите плату и / или датчик отладки : иногда плата и / или датчик отладки облажаются. Попробуй их снова. Иногда отладочный зонд не может заставить цель перейти в режим сброса (отладочный зонд постоянно пытается вытащить вывод сброса): отключите питание целевого микроконтроллера и включите его снова, чтобы отладочный зонд мог подключиться. Если у вас есть кнопка сброса (вы всегда должны добавлять ее в свой собственный дизайн!), Нажмите кнопку сброса при включении питания платы, чтобы сохранить ее в надежде на сброс.
  23. Запах синего дыма . Электроника управляется синим дымом. Потому что, когда вы видите, как оно выходит, вы знаете, что оно мертво. Если вы чувствуете запах чего-то странного, проверьте, является ли это вашей доской. Проверьте температуру вашего микроконтроллера, осторожно прикасаясь к нему (у меня один раз сильно сгорел один палец!). Если он горячий, выключите питание и надейтесь на лучшее (или замену).

Резюме

Нет ни единого совета или хитрости, если отладка не работает. Но проверка основ Shure поможет. В противном случае попробуйте поменять объекты, чтобы ограничить область поиска. Самые неприятные вещи — это нестандартные доски, так как многие вещи могут потерпеть неудачу. Инвестируйте в оценочную доску, которая работает, чтобы вам было с чем сравнивать.

Удачной отладки ?

PS: Если у вас есть еще советы и рекомендации, оставьте комментарий и поделитесь!