Я большой поклонник синих макетов в виде таблеток.
Они очень хороши по соотношению цена/возможности.
Вообще моя любовь к ним заметна с Первоапрельская статья про прошивку педалей для игры на балалайке .
Открыть коробку с такими платами и быстро взять одну для решения каких-то задач – в порядке вещей.
Правильно, недавно я взял другую плату, прошил ее хорошо отлаженной и проверенной «прошивкой» и… получил неопознанное USB-устройство.
Взял другую плату, прошил и аппарат заработал.
На этом бы дело и закончилось, но мне интересно, в чем дело.
Поэтому, когда наступили выходные, я начал детальное изучение того, почему это не работает. А вообще, прежде чем прошивать платы, я проверяю, что включенный производителем тест работает: светодиод моргает. Так что я был уверен, что процессор в целом жив.
В чем тогда виноват? Возможно USB или кварцевые линии.
С линиями все было в порядке, кварц не заводился.
Но он может не запуститься по многим причинам.
Запускается программно, уже в недрах функции основной() , Ну отлично, приступим к отладке программы.
Все бы ничего, но для функции основной() отладчик не завершает работу.
Программа зависает где-то между запуском и этой функцией.
Останавливаем программу: вполне ожидаемо, мы в обработчике HardFault .
Что привело нас сюда? Сброс счетчика адресов:
И начинаем внимательно пошагово проходить программу.
В этой строке все умирает, даже если мы используем операцию Шаг , хотя Переступить .
Веселый Кейл.
Ну ничего.
Сбрасываем все заново (RST), кликаем мышкой по окну дизассемблера и заходим туда.
В этом случае мы можем понять, что внутри функции все умирает. __scatterload .
В общем, если в этой функции все умирает, то уже есть повод посмотреть, не перепутан ли тип контроллера.
Ан нет, все правильно (настройки я тоже перепроверил, но эта прошивка работает и на других платах).
Отлично.
Сбрасываем все еще раз и отслеживаем эту функцию.
После нескольких проб, зависаний и перезагрузок находим виновную линию.
Да Да.
Все умирает, когда регистры сохраняются в стеке.
При этом слева видно, что SP равен 0x200030A0. Посмотрим документацию к контроллеру:
Посмотрим, какое окно отведено под SRAM:
Это верно.
Указатель стека (SP) находится в допустимом диапазоне.
Так в чем виноват? Попробуем нахально заменить значение SP с 0x200030A0, скажем, на 0x200020A0, благо отладчик это позволяет. Чёрт! Подвисание на указанной строке прекратилось! Это значит, что у нашего кристалла памяти нет 20 килобайт. Сколько? Проверив несколько раз, узнаем, что последнее рабочее значение SP — 0x20002800. То есть 10 килобайт. Это соответствует кристаллу STM32F103C6. Перед нами отпиленная микросхема.
Увы.
Все бы ничего, но платы из этой партии легко отличить в моей немаленькой коробке.
У них особый цвет перемычки и очень красивый изумрудный светодиод (у остальных менее приятный оттенок зеленого).
Поэтому они легко выделяются из толпы других плат. Конечно, я их проверил.
Конечно, вся партия была распилена (я взял десяток).
Непонятно, что с этим делать.
Когда я получил три платы из десятка, у которых стандартный тест не сработал: светодиод не моргнул (поэтому теперь проверяю их не выборочно, а полностью), я неделю бодался с продавцом.
Он «включил дурака».
Он постоянно интересовался тем, чем я хочу заниматься, и обещал помочь советом.
И я ему снова и снова повторял, что я тупо подключил его к питанию, семь плат моргали, три нет. Это значит, что они мертвы.
И он снова взял свой орган.
И так в течение недели.
Но там все было очевидно.
Не прошел стандартный тест. Здесь проходит стандартный тест; для этого не нужно много памяти.
Непонятно, как доказать, что пришедший товар контрафактный.
И даже если вы сможете это доказать, то по правилам Али Экспресс отправить товар обратно вам все равно придется.
В общем, все выглядит как безысходность.
И самое главное, у конечного продавца не было злого умысла.
Позже я взял у него еще одну порцию.
Там все в порядке.
Он сам был подведен.
Так или иначе, я информирую общественность, что именно это и происходит. Проверяйте платы не только на общую работоспособность, но и на реальные характеристики.
Правда, что делать, если есть несоответствие, непонятно.
Статья имеет еще одну практическую пользу.
Там показано, как можно быстро найти причину, по которой плата вдруг не работает, если проблема не в полной неработоспособности контроллера (отвечает через отладочный порт SWD).
Теги: #Программирование микроконтроллеров #Компьютерное оборудование #микроконтроллеры #Системное программирование
-
Обход Массива В Javascript
19 Oct, 24 -
Makemap - Покажи Себя На Карте
19 Oct, 24