Pavel30
Apr 10 2014, 05:54
Добрый день! Возникла такая проблема, в данной схеме включения, возникают проблемы с прошивкой. ( Прошивается, но, раз через раз). Может кто-нибудь сталкивался с проблемами с микроконтроллером STM32F407VD? С чем это может быть связано?
Нажмите для просмотра прикрепленного файла
UnDerKetzer
Apr 10 2014, 06:00
Чем шьете (софт/программатор)? Какую ошибку получаете в случае неудачной попытки? Устройств партия? Если да, повторяется ли ошибка на других платах?
Сергей Борщ
Apr 10 2014, 07:18
Цитата(Pavel30 @ Apr 10 2014, 07:54)

( Прошивается, но, раз через раз).
Я бы выкинул тяжелое наследие
оккупацииPIC16C84 в виде C596.
Existing
Apr 10 2014, 07:35
Цитата(Сергей Борщ @ Apr 10 2014, 11:18)

Я бы выкинул тяжелое наследие оккупацииPIC16C84 в виде C596.
Конденсатор там как раз соответствует даташиту, в отличие от R583.
Сергей Борщ
Apr 10 2014, 07:43
Цитата(Existing @ Apr 10 2014, 09:35)

Конденсатор там как раз соответствует даташиту,
А нагрузочной способности выхода программатора? Нету на этом входе кнопки на длинном проводе, не нужен там конденсатор. А резистор не помешает.
Поясню немного ситуацию. Дело больше не в "шитье", а в неадекватной работе самого процессора. В некоторых случаях работы программы, например в перрываниях, программа улетает непонятно куда и не знает куда ей оттуда возвращаться. То есть будто стек разлетается и вместо тех адресов, что там должны быть, появляются абсолютно случайные числа. Иногда каким-то образом затираются или переписываются какие-то участки флеша и программа не работает, пока ее заново не прошить. При этом та же самая программа, прошитая в отладочную Discovery, работает без проблем. Замена самого микроконтроллера также ни к чему не привела.
Golikov A.
Apr 10 2014, 09:52
а разве флэш перешить без спец команд можно?
Прошили, проверили прошивку, если ок, то все проблемы у вас в программе...
SasaVitebsk
Apr 10 2014, 09:56
Работаю с этим процессором. Текуший объём прошивки:
138 610 bytes of readonly code memory
59 535 bytes of readonly data memory (+ 4 absolute)
108 809 bytes of readwrite data memory
293 объектных файла. FreeRTOS.
Работает супер устойчиво. Просто блеск. За время отладки убил 2 проца перетыркиванием JTAG на лету. Больше инциндентов не было. Задействовано большинство периферии проца. Работает на максимальной частоте.
С прошивкой были проблемы. Связаны с тем, что прошивка возможна из нескольких источников. Детектирование идёт на лету, непонятно как, но проц часто неверно определяет источник. Для устранения данной ситуации необходимо чётко придерживаться доки CD00167594. Во время детектирования неиспользуемые источники должны сидеть на постоянном уровне. (Не должны болтаться в воздухе). Кроме того, даже если это соблюдено, иногда программа "STMicroelectronics flash loader" может выдать ошибку с сообщением, что надо сбросить проц. Сбрасываешь - и всё поехало. Это относится и к терминальной версии. Сделали свой бутлоадер - всё работает устойчиво.
Удачи.
Цитата(Golikov A. @ Apr 10 2014, 13:52)

а разве флэш перешить без спец команд можно?
Прошили, проверили прошивку, если ок, то все проблемы у вас в программе...
Знаю, что нельзя. В том то и загадка.
Дело точно не в программе. Пробовал простейшую программку зашивать, которая просто несколько байт по USART принимает. Те же чудеса происходят. А вот на Discovery то же самое работает как часы.
Сергей Борщ
Apr 10 2014, 12:41
Тогда надо внимательно смотреть схему питания, разводку питания и земли.
Всё дело было в земле. На плате небыли соедединены аналоговая и цифровая земли, и между ними появлялся потенциал в 0,4 вольта. После соединения всё заработало. Видимо ядру нехватало питания, потому что до соединения земель на пинах VCAP 1 и 2 были минимальные 1,2В, а после соединения земель, стало 1,26В, как и должно быть по даташиту.
Новый фокус. Линия V_BUS от USB и резистор P580. Подключаю USB разъем, со стороны разъема на резисторе 5В, со стороны контроллера - всего 0.5В. Контроллер на подключение разъема никак не реагирует. Делаю вывод, что сгорел вход контроллера. Но как-то странно он сгорел, потому что, если убрать инициализацию USB и настроить ногу PA9 на вход, то контроллер видит сигнал на этой ноге. Так же и на выход работает. Реально такое или снова фантастика какая-то?
Leopoldius
Apr 11 2014, 10:44
Цитата(Haamu @ Apr 11 2014, 12:11)

Новый фокус. Линия V_BUS от USB и резистор P580. Подключаю USB разъем, со стороны разъема на резисторе 5В, со стороны контроллера - всего 0.5В. Контроллер на подключение разъема никак не реагирует. Делаю вывод, что сгорел вход контроллера. Но как-то странно он сгорел, потому что, если убрать инициализацию USB и настроить ногу PA9 на вход, то контроллер видит сигнал на этой ноге. Так же и на выход работает. Реально такое или снова фантастика какая-то?
Может все же резистор плохо пропаян?
В корзинке опыта были случаи, что вывод вроде припаян, но то ли трафарет с браком, то ли пасты "зажмотили" и после пропайки, обыкновенным паяльником все наладилось. В пользу этого говорит :" если убрать инициализацию USB и настроить ногу PA9 на вход, то контроллер видит сигнал на этой ноге. Так же и на выход работает."
Цитата(Leopoldius @ Apr 11 2014, 14:44)

Может все же резистор плохо пропаян?
В корзинке опыта были случаи, что вывод вроде припаян, но то ли трафарет с браком, то ли пасты "зажмотили" и после пропайки, обыкновенным паяльником все наладилось. В пользу этого говорит :" если убрать инициализацию USB и настроить ногу PA9 на вход, то контроллер видит сигнал на этой ноге. Так же и на выход работает."
Как раз не в пользу, а наоборот. Если нога настроена на вход, то напряжение с обоих сторон резистора одинаковое. А паяльником пропаивал...
Сергей Борщ
Apr 11 2014, 19:06
Цитата(Haamu @ Apr 11 2014, 14:11)

Если нога настроена на вход, то напряжение с обоих сторон резистора одинаковое.
Может стоит разобраться, почему при нештатной работе эта кога настроена на вывод?
Еще на житаге некоторые резисторы по 10к лишние.
Перепаяли контроллер, проблема с USB осталась. Но нашлась одна особенность. Если запустить программу в режиме отладки, без всяких брейкпоинтов, ситуация не меняется. Но! После выхода из отладки комп начинает видить плату как COM-порт, собственно как и должен и всё работает. После перезапуска платы, снова перестает определяться. Где искать проблемму?
Сергей Борщ
Apr 16 2014, 08:41
Можно предположить, что при запуске отладки ваша среда совершает некие действия (настройку тактирования, отключение периферии или что-то еще), которые не дают вашей программе работать как задумано, ибо писавший программу программист полагался на значения периферийных регистров по умолчанию. При выходе из отладки отладчик на прощанье сбрасывает процессор и он начинает выполнять программу заново, но уже со сброшенной периферией. Более точно трудно сказать - вы не признались, какую среду разработки используете, а с телепатией у нас напряженка.
Среда CoIDE. Программатор/отладчик ST-Link V2, расположенный на плате STM32F4Discovery.
Обнаружил еще одну особенность. Дело даже не в отладке. Отладчик отключен, USB подключен. Включаю питание платы, USB не определяется. Очень кратковременно, буквально в одно касание, замыкаю ресет на землю и после этого комп начинает видить плату, можно втыкать - вытыкать USB, всё работает, до выключения питания платы. Попробовал выпаять конденсатор С596, тот что на ресете, ситуация не изменилась.
Разобрался. Оказалось, что не успевал завестись внешний кварц. Увеличил HSE_STARTUP_TIMEOUT и всё заработало. А кварц не успевал стартовать, потому что емкости на нем слишком большие висели.
Но все-же для меня осталось загадкой, зачем контроллер пытается V-BUS к земле притянуть?
Eminem
Apr 18 2014, 09:50
Haamu
А в чем Вы схемы рисуете?
Golikov A.
Apr 19 2014, 14:27
Цитата
Но все-же для меня осталось загадкой, зачем контроллер пытается V-BUS к земле притянуть?
может чтобы определить есть внешние питание == подключение или нет? Ибо устройства с автономным питанием должны контролировать подключение через мониторинг VBUS, а не линии данных.
Цитата(Eminem @ Apr 18 2014, 13:50)

А в чем Вы схемы рисуете?
Я не рисую, я программист. А вообще вроде в Альтиуме. Но конкретно эта похоже еще в Пеинте подтерта.
Цитата(Golikov A. @ Apr 19 2014, 18:27)

может чтобы определить есть внешние питание == подключение или нет? Ибо устройства с автономным питанием должны контролировать подключение через мониторинг VBUS, а не линии данных.
Похоже что так. Просто ввела в заблуждение инициализация этой ноги:
Код
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_OTG_FS);
Golikov A.
Apr 21 2014, 17:49
я в этой инициализации ваще теряюсь) но вроде как к земле ее не тянули... а в альтернативных функциях все само работает, могли прочие поля структуры от копи паста остаться...
блин неужели так ноги инициализировать удобнее чем через 3-4 понятные строки?
выбор функции
выбор подтяжки (если надо)
направление
начальное значение?
Сергей Борщ
Apr 21 2014, 21:21
Цитата(Haamu @ Apr 21 2014, 17:17)

Просто ввела в заблуждение инициализация этой ноги:
Я не разбирался с системой USB этого контроллера, но строка GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; как бы подсказывает, что этот вывод настраиваивается совсем не на ввод. В задачнике спрашивается: зачем этой ноге быть выходом с открытым коллектором? Если вы сможете это обосновать, вы наверняка поймете кто и зачем тянет ее к земле. Если же обосновать не сможете - вероятно придете к выводу, что тут и кроется ошибка.
Прошу прощения, не тот кусок инициализации выложил, это от ноги ID. Инициализация V-Bus отличается лишь тем, что там не открытый коллектор, а push-pull, но сути это не меняет. Перерыл весь USB-стек и не увидел нигде, чтобы V-Bus явно подтягивалась к земле, кроме работы в режиме хоста, где она отвечает за подачу питания на подключенное устройство. Следовательно, подтягивать ее к земле в режиме девайса может только альтернативная функция.
Golikov A.
Apr 22 2014, 05:49
А она в альтернативную функцию настроена, или для STM это ничерта не значит?
Сергей Борщ
Apr 22 2014, 07:37
Цитата(Haamu @ Apr 22 2014, 08:32)

отличается лишь тем, что там не открытый коллектор, а push-pull, но сути это не меняет.
То есть все равно выход? Вероятно вам все же стоит почитать описание этой ноги и работы с ней в руководстве пользователя. Поверьте, в примерах из интернета могут быть ошибки. Даже если эти примеры распространяет производитель контроллера.
Да, эта нога настроена на работу альтернативной функции, соответственно и управляется она этой самой альтернативной функцией.
Кстати, на другой плате с аналогичной схемой подключения USB, эта нога ведет себя точно так-же.
VBUS, как я предполагаю, нужна для включения подтягивающего резистора на D+ (или D- для Low speed). Естественно, она должна быть выходом, OD или PP - неважно.
Надо посмотреть по схеме, какой полярностью включается этот подтягивающий резистор. Там, наверное, и транзистор есть. А то и два.
Сергей Борщ
Apr 23 2014, 07:15
Цитата(ViKo @ Apr 22 2014, 16:47)

VBUS, как я предполагаю, нужна для включения подтягивающего резистора на D+ (или D- для Low speed).
Драссте. Ну откройте же описание. VBus -
вход во всех режимах работы USB. Сигнал VBUS не входит в группу альтернативных функций (Alternative function) соответствующего разряда порта. Он является дополнительной функцией (Additional function) и включается настройками USB-контроллера, а не порта. И когда вы включаете альтернативную функцию на этой ноге вы подключаете к ней выход какой-то другой периферии.
Блин, да ну вас нафиг - три дня мусолить тему, которая в даташите ищется за две минуты. Причем почитать документацию автору темы предлагалось уже давно.
Цитата(Сергей Борщ @ Apr 23 2014, 10:15)

Драссте. Ну откройте же описание.
VBUS есть для OTG. Как эта ножка используется в проекте - ...

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