STM32 один раз в день

Для все того же BLDC контроллера сделал недавно две платки. Первую силовую, с ключами, драйверами, и компараторами. Вторую с контроллером, т.к. avr в прошлый раз стало не хватать, то взял потолще, stm32f103c4. Одна к другой подключается через PLS/PBS.

На форуме тема похоже заглохла, а у меня версии закончились. Плата с контроллером предполагает использование встроенного загрузчика. BOOT0 к питанию, BOOT1 к земле, и пишем flash/ram через uart1. Но не может быть все так просто, и с первого раза ничего не заработало. Дальше было примерно следующее,

— Замеры напряжения на пинах питания, BOOTX/NRST и RX/TX (результаты — все хорошо)
— Выцарапывание грязи между панами
— Ещё раз промывка в ацетоне и сушка
— Ещё раз замеры (все хорошо)
— Попытка добавить внешний pull-up на вывод NRST (результат — fail)
— Попытка добавить ещё конденсатор на питание (результат — fail)
— Попытка использования настоящего rs232 порта + конвертор (до этого был ftdi) (результат — fail)

За все время возни было замечено, что связь с загрузчиком устанавливается только один раз в день, после того как плата полежит в покое десяток часиков в темной коробке. Программный ресет который производит stm32flash (а его я и использую) не ломает работоспособность МК, а вот прижатие NRTS к земле или передрыг питания ломает. И связи нет до следующего дня.

По уровню напряжения на пине TX можно понять когда загрузчик определяет скорость uart и инициализирует его, иногда даже что-то приходит в ответ, но похоже на неправильной скорости (точнее посмотреть нечем). Но чаще не приходит ничего.

— Разрядил/перемкнул все конденсаторы, подождал ~20 минут (результат — fail)

Если выше было не очень ясно, еще разок. Достаю утром плату из коробки, подключаю, запускаю,


$ stm32flash /dev/ttyUSB0 
stm32flash - http://stm32flash.googlecode.com/

Serial Config: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0412 (Low-density)
RAM          : 10KiB  (512b reserved by bootloader)
Flash        : 32KiB (sector size: 4x1024)
Option RAM   : 15b
System RAM   : 2KiB

Resetting device... done.


передергиваю питание либо делаю ресет и,


$ stm32flash /dev/ttyUSB0 
stm32flash - http://stm32flash.googlecode.com/

Serial Config: 57600 8E1
^C


застряло, т.к. ответа нет. Следующий удачный запуск только завтра. Так уже три дня.

Про то, что скорость тоже менял наверно можно не упоминать.


ompldr.org/vZHBjdQ


ompldr.org/vZHBkMQ

Схема — ompldr.org/vZHBjcg

Интересно, почему. Ответ вероятно очень прост.
  • 0
  • 11 мая 2012, 16:52
  • amaora

Комментарии (48)

RSS свернуть / развернуть
Я бы пропаял все ноги контроллера еще раз.
0
результат — fail, ничего не поменялось, только флюсом и грязью все обмазал, опять мыть.
0
Мыть и тщательно проверять монтаж, даже, казалось бы, в самых безобидных местах. У меня было нечто похожее, но там ситуация решилась уменьшением емкости на ресете (!) и уменьшением сопротивления на нем же (!). Был еще случай, когда плата (давно прошитая, впрочем) спустя некоторое время переставала работать. Виноват оказался недостаточно хорошо отмытый довольно агрессивный флюс. Тщательная отмывка и пропай свежим менее агрессивным флюсом с последующей повторной отмывкой помогли.
0
Как бы там ни было, но я считаю, что stm'ка продолжает работать (может спать) от накопленного заряда. Тут вроде как при попытке вновь войти в бут, прога думает, что ресетнула камень, а камень в то же время с предыдущей попытки в бут то уже вошел… Моя версия такая. Но мое предположение…
0
Где держится заряд?
0
Может дело в температуре? :) Ночью чуть остывает, а днем в коробке не успевает нагреться, вот и запускается.
0
  • avatar
  • ACE
  • 11 мая 2012, 19:04
Подержал ~5 минут в потоке от вентилятора (который тянет холодный воздух через форточку, это явно холоднее чем в коробке), результат — fail, все так же.
0
Проверить питание, после отключения питания замкнуть все ноги процессора на минуту, разомкнуть и подключить. Если после этого не работает, грешить или на глючный проц, или попробовать на другом компьютере (лучше под виндой фирменным Flash Loader Demonstrator)
0
Глупый, наверное, совет, но может брак камня, не?..

По схеме так у меня все так же как у вас (вот тут можно найти схему). Отличия разве что в резисторах.
Т.е. у меня: подтянут резет (да, внутри есть подтяжка и даташит, но); а BOOT0 и BOOT1 тоже через резисторы, а не на прямую подключаются… Вряд ли из-за этого может быть беда, но…
0
Сдул 103с4, впаял 100с4, резульат — fail. Что может быть не так с питанием? Пробовал блок от PC, потом перешел на питание от ftdi (меньше проводов, можно взять с собой). Кондеры все на месте.
0
перед каждой попыткой заливки stm-ку надо сбрасывать — reset
0
Попытка это вот так,

— Включил питание (и ftdi и stm одновременно)
— Запуск stm32flash
— NRST к земле
— Запуск stm32flash
— … (так несколько раз)
— Передерг питания (и ещё один кружок)
— …

* Иногда ещё замеры напряжения
0
я делал загрузку через RS-485 — MAX13487 и usb-usart cp2101 все работало четко
Мой процесс: boot0 и boot1 прижимаются к земле, ресет (в смысле нажатие кнопки и отпускание), подключение флэш демонстратор
Проверьте вашу ftdi соедините rx c tx и посмотрите терминалом
0
а вот еще что важно во флэш демонстраторе- четность только которая там по умолчанию Even, по другому не работало
0
boot0 же надо к питанию прижимать а не к земеле. ftdi работает, по крайней мере такой простой тест как замкнуть rx/tx проходит. Четность в stm32flash менять нельзя, но она правильная.
0
да описался естественно boot0 на питание
0
извините за идиотский вопрос — ног «висящих» в воздухе нет?
0
Все, что по схеме висящие, те висящие. Да и на фото видно, под корпус идет только земля а там большой квадратный полигон.
0
В порядке бредовой идеи: частоту, на которой он реально стартует после ресета и после ночного «отстоя» проверить не хотите?
0
Как?
0
Таймер настроить или просто дрыгать пином в цикле. Если нет ни осциллографа, ни частотомера, то хотя бы настроить мигание светодиодом, к примеру, раз в секунду. Так будет заметно отклонение в N-раз.
Но, если правильно помню, то для последовательного порта допустимое отклонение по скорости ~1%, ток что лично я бы делал изначально с кварцем, либо проверил бы таки реальную частоту.

P.S. ACE не зря спрашивал про выводы osc32. Вот мне светодиоды там тоже не очень нравятся.
0
Стартует он на встроенном генераторе и на нем же живет загрузчик. В целом вся конструкция отличается завидной живучестью, во всяком случае мне удавалось прошивать камни с коротухами на некоторых ногах и без части питания.
0
Глянул схему повнимательнее. У вас светодиоды подключены к PC14, PC15? Даташит говорит:
PC13, PC14 and PC15 are supplied through the power switch and since the switch only sinks a limited amount of current
(3 mA), the use of GPIOs PC13 to PC15 in output mode is restricted: the speed should not exceed 2 MHz with a maximum
load of 30 pF and these IOs must not be used as a current source (e.g. to drive an LED).
Фиг знает, может ли оно влиять, но наверное так лучше всё-таки не делать.
0
  • avatar
  • ACE
  • 11 мая 2012, 23:35
Ещё один фэйл, но к основному отношения он не имеет. Хотя один раз уже успел залить код который должен был мигать светодиодом (в ram), но не получил результата.
0
А точно не имеет? Это проверялось выпаиванием светиков/резисторов?
0
Нет, а разве внутренний загрузчик что-то делает с этими пинами? включает osc32? Хотя припоминаю какое-то странное значение напряжения на этих пинах (~1.9в), надо проверить, если вывод в hi-z то должно быть 3.3в.
0
Хотя, падение на диодах же есть, но я уже перерубил дорогу, результат — fail.
0
ясно, тогда сдаюсь.
0
Да кто его знает, но когда исключены все возможные логичные причины проблемы, надо проверять нелогичные. В целом 1.9В нормально, 3.3 минус падение на диодах. Вообще, функция этих пинов зависит от байтов в бэкап домене, хрен знает, вдруг туда попадает какой-то бред и при следующем сбросе питания включается osc32. Бредово, конечно, но я бы проверил.
0
Проверить кондеры по питанию мультиметром — без танталки сумма 0.4мкф есть?
0
Мое мнение:
1. Попробовать поставить скорость поменьше.
2. А вы компьютер выключаете/перезагружаете за эти 10 часов?
2а. Попробовать с другим компьютером.
3. Искать осцилограф/анализатор, дабы проверить скорости, и посмотреть, о чем там процессор с компьютером шушукается.
0
Оказывается да, после нескольких включений/выключений ftdi `ломается`. Помогает сделать `modprobe -r ftdi_sio`.
0
У меня то же самое происходило с моим прошивальшиком для AVR на FTDI
Проблема решилась установкой всех конденсаторов по шиту на FTDI, а также устранением паразитных емкостей на плате.
После чего плата была залита китайсоплями, проблема вроде устранилась.
Кроме того, шью на скоростях не выше 48000 Бод
Хотя раза 2-3 в сутки FTDI все равно виснет. (это уже с использованием драйверов D2XX под WIN + .NET).
Думаю, что проблема в дровах тоже есть, и не только под Linux.
0
В порядке бредовой идеи…
После первой попытки удачной связи поменять дату в BIOSе и попробовать ещё раз. Понимаю, что это танец с бубном, но раз уж других идей нет…
0
отчего же, есть ещё идея. Переделать плату с нуля. Наверняка что-то упущено.
0
Перепаяйте резюки через которые идут сигналы на uart1.
А для тестов лучше вообще их перемычками замените.
0
Всем спасибо, проблема очевидно в софтовом баге в linux ведре.
0
скорее в модуле от фтди… у нас даже виндовые дрова после сотни перетыканий дуба дают.
0
Так видимо, или точно? В dmesg что по этому поводу? Перезагрузка (желательно с ресетом) помогает? С TI Launchpad, например, тоже проблемы в драйвере CDC/ACM, но это уж TI постарался реализовать там протокол покорявей для платки за $4.30. При этом в dmesg что видно, что с портом проблема, и пересоединение платы помогает (распознается правда тоже не сразу после подключения).
0
но это уж TI постарался реализовать там протокол покорявей для платки за $4.30
Дык там же он железный, протокол этот, на USB-CDC чипе от TI?
0
«USB-CDC чип» является МК на ядре 8051, выполняющим команды из I2C EEPROM. Вот что туда записали, то и есть ;-).
0
В dmesg ничего, даже если сделть `modprobe ftdi_sio debug=1`. Ну то есть там так же как и в хорошем случае. Я посмотрел код подиагонально, тоже ничего плохого не заметил, ели где и может образоваться какое-то нехорошее состояние то не в модуле ftdi, там все структуры инициализируются заново при перетыкании устройства. Дальше обновил ядро и сделал небольшой патч на stm32flash, чтобы не возвращать настройки порта при выходе. Моя основная версия — настроки четности или ещё какие-то относящиеся к формату кадра меняются (не соответсвуют выставленным в софте), поэтому эхо при замкнутых tx/rx есть, а связи stm32 нет. Что из этого помогло (и помоголо ли, но пока файлов не было) я еще не понял.
0
BOOT0 оказался с внутренним подтягом, и через 10K резистор прижать к земле его не получается. Странно, нигде в документации об этом не видел.
0
Вставьте задержку после инициализации переферии в 500мс, иногда помогает. Сам таким образом вылечил пару своих проектов.
0
Тоже проблема с загрузчиком.
Подключил комп к первому уарту, на boot1 подал 0,
на boot0 подал 1, сделал ресет.
В одном устройстве работало нормально, но через время его угробил.
Сделал другое — нет связи. Все проверил, поменял 4 процессора — все равно нет связи. Я в шоке…
0
Процы менять нужно в последнюю очередь. Самое первое — проверить напряжения на выводах контроллера, как минимум все питания, буты и ресет. Затем проверить напряжения на входах уарта. Если все соответствует норме, то чип должен шиться (ему даже коротухи на других ногах, включая кварцы) не помешают.
0
Я знаю, что должен шиться, но не хочет.
Все проверил — и питание, и ресет и буты. Тестером раз 200 наверно.
Скоро буду волосы на голове рвать.
До этого прошивал другие платы без проблем, а здесь застрял. Правда там процессоры были другие — STM32F103, а здесь STM32F100
0
А RX/TX UART-а?
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.