Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32: Как бороться с ложной автонастройкой скорости USART у ROM-загрузчика?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Porty
Добрый день

Кратко: Как бороться с ложной автонастройкой скорости USART у ROM-загрузчика STM32?

У нас имеется устройство в которое может заливаться прошивка пользователем через подключенный RS232 порт.
Устройство обязано стартовать с входа в загрузчик. Поставить кнопочку входа в режим загрузчика проблематично, потому что требуется удалённое управление.
Для этого мы используем функцию ROM загрузчика согласно документу AN3155 "USART protocol used in the STM32™ bootloader".
Согласно этому документу ROM загрузчик выставляет скорость по первому принятому байту 0x7F и далее с ней работает.

Устройство подключается к компьютеру через RS232 либо через USB переходники, в любом случае при подключении винда пытается опросить по P&P, либо этот комп порт пытаются опросить другие программы, в любом случае возникает ситуация когда загрузчик настраивается на ложную скорость, которая неизвестна и вряд ли попадает в стандартный ряд для уарта и достучаться до него становится невозможно без перезагрузки МК.

Как с этим бороться?
Как отключить Plug&play в винде через новые ком порты?
Или как скрыть ком порт чтоб у него не было имени вида COMx, а только строка с ID реестра, например "\??\USB#VID_1234&PID_5678#7&2bec8296&0&3#{a5dcbf10-6530-11d2-901f-00c04fb951ed}" чтобы левые программы не открывали его в поисках GSM шлюзов, сотиков, и прочего железа и не писали левые байты и не приводили к ложному срабатыванию автонастройки скорости?
Или как сбросить скорость у загрузчика или иным образом запустить автонастройку не дёргая рэсет?
Или какие есть дешовые интеллектуальные WDT которые например сбрасывают раз в минуту если не было подтверждения, до 10р за шт, если всё-таки сделать ресет или аналогичные цепи / заменители?

Заранее Спасибо.
scifi
Самый православный способ - написать свой загрузчик.
Serj78
Цитата(scifi @ Dec 23 2011, 18:18) *
Самый православный способ - написать свой загрузчик.


Я использую ноги порта RTS и DTR чтобы коммутировать питание и ногу BOOT0. Можно вместо питания управлять ресетом.
Питание использую через разъем прошивки- от usb.
maksimp
Цитата(Porty @ Dec 23 2011, 17:11) *
при подключении винда пытается опросить по P&P

Сначала включить и загрузить компьютер. Затем воткнуть RS-232 (схема должна быть крепкая, с соответствующей защитой для горячего подключения).
Или по другому. Включить и загрузить компьютер и устройство, при этом 0 на BOOT0 . Подать 1 на BOOT0. Сбросить процессор. Прошить.

Цитата(Porty @ Dec 23 2011, 17:11) *
Как отключить Plug&play в винде через новые ком порты?

Тоже было бы интересно узнать как.
Porty
Цитата(scifi @ Dec 23 2011, 18:18) *
Самый православный способ - написать свой загрузчик.

понимаю, но хотелось бы этого избежать, в добавок уже какой то есть в самом чипе.

Цитата(Serj78 @ Dec 23 2011, 21:07) *
Я использую ноги порта RTS и DTR чтобы коммутировать питание и ногу BOOT0. Можно вместо питания управлять ресетом.
Питание использую через разъем прошивки- от usb.

DTR и RST не выведены в стм32. т.к. требуется гальваническая развязка и ставить доп микросхемы типа адумов или оптронов нет ни места ни бюджета, макс что влезет - 2 транзистора в сот23 с обвязкой или эквивалент.

Цитата(maksimp @ Dec 24 2011, 12:13) *
Сначала включить и загрузить компьютер. Затем воткнуть RS-232 (схема должна быть крепкая, с соответствующей защитой для горячего подключения).
Или по другому. Включить и загрузить компьютер и устройство, при этом 0 на BOOT0 . Подать 1 на BOOT0. Сбросить процессор. Прошить.


Тоже было бы интересно узнать как.

как понимаю предлагается программой на проце подать на ноги 1 и сделать програмный сброс? - тоже не вариант, клиенты хотят сами прошивку писать на проц и часто делают очевидные ляпы типа доступа к не выравненным данным в итоге все висит и перепрошить потом не смогут.

Я думаю подать на ресет данные с RX в устройство через RC цепочку и сбрасывать проц посылая очень длинный 0 по уарту. т.е. BREAK. но остается проблема скремблера, чтоб не было слишком много нулевых бит в штатном режиме... это как запасной вариант если ничего не придумаем.
maksimp
Цитата(Porty @ Dec 25 2011, 12:30) *
как понимаю предлагается программой на проце подать на ноги 1 и сделать програмный сброс?

Нет, имеется ввиду щёлкнуть рукой специальным тумблером, установленным на устройстве и соединённым с BOOT0. Сброс может быть от этого тумблера через дифференцирующую RC цепочку и ещё некоторые элементы. Если тумблер неохота ставить то можно поставить перемычку (джампер), которую нужно будет переставлять.

Ещё можно вывести BOOT0 на свободный контакт разъёма последовательного интерфейса (через защитный резитор), и приделать тумблер снаружи на кабель.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.