Serj78
Dec 13 2011, 18:59
В общем, ситуация такова: сделали редизайн небольшой серийной платки, на которой STM32F103 100- ногий, несколько транзисторов, внешняя SPI память, SPI АЦП.
Поменяли только корпуса транзисторов (были SO-8, поставили поменьше) и форм- фактор резонатора 16Мгц (также поменьше)
Плату протестили- работает, я взял себе одну как макет.
Среда- кейл 4.12.
И начались непонятные глюки. Дело в том, что на производстве прошивают через бутлоадер, а я для быстроты пользуюсь SWD (МТ-линк 5-й, переделаный в 6-й. )
При прошивке проца через SWD при верификации флеша байты страницы читаются как FF, кейл выкидывает ошибку верификации. При том, что все прошивается нормально. (по факту программа работает и из бутлоадера содержимое флешь видится нормально)
Отладчик при этом работает корректно, все видит, переменные можно менять, они показываются адекватно.
Понижение частоты SWD вплоть до 100 Кгц не помогает (сначала грешил на 30 см кабель)
Зачем-то поменял проц. Конечно, не в нем дело.
Начал я копать, копал почти целый день.
Что накопал:
тип резонатора- не влияет (пробовал разные).
При запайке проца на "голую" новую плату (только проц и линейный стабилизатор питания)- верификация есть.
То есть дело (формально) или в плате или в обвязке.
На "заполненной" рабочей плате стал модифицировать софт
оставил одну инициализацию- нет верификации.
отключил все кроме RCC и ядра - нет верификации.
отключил внешний тактовый генератор- верификация ЕСТЬ. (также она есть если отключить или коротнуть резонатор, ну это и понятно)
А вот теперь самое непонятное- переключил биты SW в регистре конфигурации RCC на работу от внешнего генератора, минуя PLL и верификация появилась!
(правда программа в 5 раз медленнее работает)
Понятно, что дело в самой плате (методом замены ясно), но почему такой странный глюк? Плата 4-х слойка, все питание отфильтровано, емкостей вокруг проца штук 6, и главное, все порты отключены, оно жрет всего 40ма.., никаких сигналов никуда не подается, все SPI микросхемы спят, порты проца выключены...
Может, кто- нибудь сталкивался?
AHTOXA
Dec 14 2011, 04:09
Цитата(Serj78 @ Dec 14 2011, 00:59)

отключил все кроме RCC и ядра - нет верификации.
отключил внешний тактовый генератор- верификация ЕСТЬ. (также она есть если отключить или коротнуть резонатор, ну это и понятно)
Та же история, только F107, через JTAG и openocd. Заметил также, что поведение при прошивке варьируется в зависимости от включенной набортной периферии (например, с включенным UART4 не шилось, а с выключенным - шилось). Но закорачивание резонатора (и, как следствие, программирование на внутреннем генераторе) помогает всегда.
Честно говоря, я особо не парился, считал это кривизной JTAG/openocd. На штатную работу устройства это вроде бы не влияет.
Serj78
Dec 14 2011, 05:41
Цитата(AHTOXA @ Dec 14 2011, 08:09)

Та же история, только F107, через JTAG и openocd. Заметил также, что поведение при прошивке варьируется в зависимости от включенной набортной периферии (например, с включенным UART4 не шилось, а с выключенным - шилось). Но закорачивание резонатора (и, как следствие, программирование на внутреннем генераторе) помогает всегда.
Честно говоря, я особо не парился, считал это кривизной JTAG/openocd. На штатную работу устройства это вроде бы не влияет.
Антоха, читайте дальше! там еще чудесатее

Во первых этот же проц на этой же плате без обвязки- верифицируется.
Во вторых не обязательно выключать внешний генератор- достаточно переключить источник тактирования SW с PLL на внешний генератор!
Возможно, дело в большой тактовой частоте..
AHTOXA
Dec 14 2011, 05:56
Цитата(Serj78 @ Dec 14 2011, 11:41)

Антоха, читайте дальше! там еще чудесатее

Во первых этот же проц на этой же плате без обвязки- верифицируется.
С той же самой программой внутри? Тогда получается, что влияет не только программа (через включение/выключение различной периферии), но и железо? Вот это да

Хотя я всё же думаю, что это JTAG/SWD как-то раскорячивается. Может и наводки какие-нибудь на него.
Да мало ли в чём там может быть дело
Кстати, если программа использует режим sleep, то JTAG-ом за неё вообще невозможно зацепиться.
Serj78
Dec 14 2011, 06:07
Цитата(AHTOXA @ Dec 14 2011, 09:56)

С той же самой программой внутри?
Да, и с той же самой и с другой тоже - от программы практически не зависит.
На плате с запаяной обвязкой- поотключал в программе все, кроме настройки RCC и конфигурации флеша. программа 209 байт
Верификация зависит от источника тактирования.
Сегодня еще покопаю.
Serj78
Dec 14 2011, 16:12
НАШЕЛ!
Достаточно долго копал- впаивал в "голую" плату по одному или нескольким элементам, нашел место когда перестало верифицироваться.
Оказалось- резистор на подтяжку Nrst - поставили 100ом ом вместо 1к
Порту очевидно, не хватало мощи его "продавить" за необходимое время на высокой частоте, на пониженной тактовой все работало.
Вот такие пироги..
AHTOXA
Dec 14 2011, 19:17
Поздравляю!
Надо будет мне тоже глянуть, что там у меня установлено. Но, насколько я помню, сначала на той моей плате вообще не было резисторов на JTAG, и я думал, что это и есть причина глюков. Потом поставили, но глюки не прошли.