Easyelectronics.ru

Электроника для всех
Текущее время: 05 июн 2020, 15:49

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 105 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 27 мар 2012, 08:58 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 янв 2012, 07:53
Сообщения: 51
PRC писал(а):
Декодирование же происходит в самом контроллере перед программированием.

именно так ? то есть в итоге, на флешке контроллера прошивка в расшифрованном виде ?

Koder писал(а):
Во-первых если вы испльзуете свое устройство со своим протоколом передачи данных, то без собственного бутлоаджера не обойтись.

как связаны свои протоколы передачи данных с бутлоадером ? у встроенного бутлоадера свой протокол и какие у вас в программе протоколы значения не имеет. или вы имеете ввиду что у вас на устройстве не разведен ни один нужный усарт, can или usb ?

Koder писал(а):
Функциональность встроенного не дает возможность сбросить устройство в любой момент, настроить свою скорость передачи для загрузки программы пользователя и т.п.

зачем ? прошивка устройства это разовый тех процесс в цеху при сборке или (редко) на объекте. изменение скорости и.т.п это красивые бантики.

Koder писал(а):
По большому счету, коммерческая непригодность всттроенного бутлоадера также налицо.

не флейма ради ) можно таки весомые аргументы ? как по мне так для просто прошивки встроенного за глаза. и защита прошивки в моем случае весьма сомнительна, прошивка без прибора никому не нужна никаких ноухау в ней нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 27 мар 2012, 20:16 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
unkier если начнешь когда-нибудь делать коммерческие устройства, тогда сразу поймешь и необходимость шифрования и возможную работу по нестандартному для бутлоадера протоколу и про необходимость замыкать нужные ножки контроллера перед перезагрузкой, ручной конечно. И зачем вообще нужна прошивка без самого прибора:)

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 27 мар 2012, 22:29 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 14 июл 2011, 01:36
Сообщения: 72
Откуда: Москва
unkier писал(а):
у встроенного бутлоадера свой протокол и какие у вас в программе протоколы значения не имеет. или вы имеете ввиду что у вас на устройстве не разведен ни один нужный усарт, can или usb ?
Не путайте "протокол физической передачи данных" и "протокол сеанса"
По тому-же UART гоняют и X.25 и кермит и Z-modem и еще вагон сеансовых протоколов.
То-же относится и к CAN, I2C, SPI, Ethernet и т.д.
К примеру тот-же ST-Link работает по USB, но открытая реализация хромает, т.к. STM не спешит открывать протокол обмена компа с отладчиком.

unkier писал(а):
прошивка устройства это разовый тех процесс в цеху при сборке или (редко) на объекте. изменение скорости и.т.п это красивые бантики.
Разовый, только если программист - гений... Иначе будут исправления, доработки... Да и заказчик просто так не отстанет - "аппетит приходит во время еды". А скорость зависит от среды передачи - то, что на столе "летает" на 4000000 бит/c в реальных условиях (длинные провода, ЭМ шумы etc) может и на 9600 с трудом работать.

unkier писал(а):
Koder писал(а):
По большому счету, коммерческая непригодность всттроенного бутлоадера также налицо.

не флейма ради ) можно таки весомые аргументы ? как по мне так для просто прошивки встроенного за глаза. и защита прошивки в моем случае весьма сомнительна, прошивка без прибора никому не нужна никаких ноухау в ней нет.
Ключевая фраза: "защита прошивки в моем случае весьма сомнительна". Без обид, но оглянитесь - в последнее время ценность все более именно в математике прибора, алгоритмах, патентах за которые микрософт судится со всем и вся.
Реверс-инжиниринг железа сделать не так трудно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 28 мар 2012, 08:42 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 янв 2012, 07:53
Сообщения: 51
PRC писал(а):
unkier если начнешь когда-нибудь делать коммерческие устройства, тогда сразу поймешь и необходимость шифрования и возможную работу по нестандартному для бутлоадера протоколу и про необходимость замыкать нужные ножки контроллера перед перезагрузкой, ручной конечно. И зачем вообще нужна прошивка без самого прибора:)


вы наверно смартфоны делаете :) проекты с которыми я пересекался обычно очень мелкосерийные и это пром.аппаратура узкоспециализированная. для газовиков северных например приборчик. ни о каком шифровании прошивки речи никогда не было. его проще сделать заново чем реверсинжинирингом заниматься... или вот московский монорельс - штатный загрузчик никакого шифрования. кому и за чем нужно реверсинжинирить прошивку бортового вычислителя ? ради прикола ? чтобы повторить этот паровоз реверсинжинирингом нужно сильно упороться )

Цитата:
Не путайте "протокол физической передачи данных" и "протокол сеанса"
По тому-же UART гоняют и X.25 и кермит и Z-modem и еще вагон сеансовых протоколов.
То-же относится и к CAN, I2C, SPI, Ethernet и т.д.
К примеру тот-же ST-Link работает по USB, но открытая реализация хромает, т.к. STM не спешит открывать протокол обмена компа с отладчиком.

это всё правильно, но вы мне на какой то другой вопрос отвечаете ) какая разница что и по каким интерфейсам гоняет прибор в штатной работе. перевел прибор в режим загрузчина, подключился по нужному интерфейсу, прошил. всё. что не так ?


Код:
Разовый, только если программист - гений... Иначе будут исправления, доработки... Да и заказчик просто так не отстанет - "аппетит приходит во время еды". А скорость зависит от среды передачи - то, что на столе "летает" на 4000000 бит/c в реальных условиях (длинные провода, ЭМ шумы etc) может и на 9600 с трудом работать.

это самой собой, перепрошивать придется без вариантов. но если у вас в реальных условиях линия "может и на 9600 с трудом работать" то это уже наверно проблема железа, схемотехники ?

Спасибо всем за ответы. Я собственно хотел узнать от чего защита ? от того что имея файл с прошивкой его нельзя было расшифровать или от того что имея прибор на столе из него нельзя получить прошивку ? если второй вариант то интересно узнать как происходит расшифровка и старт целевой программы...

Заранее благодарен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 28 мар 2012, 10:45 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 14 июл 2011, 01:36
Сообщения: 72
Откуда: Москва
unkier писал(а):
Я собственно хотел узнать от чего защита ? от того что имея файл с прошивкой его нельзя было расшифровать или от того что имея прибор на столе из него нельзя получить прошивку ? если второй вариант то интересно узнать как происходит расшифровка и старт целевой программы...

Ответ: защита от 1-го варианта.

Бутлоадер расшифровывает прошивку "на лету" - перед записью во флеш. А защитой по второму варианту: прошивки от чтения занимается уже сам контроллер. Для информации можете почитать M0075 "STM32F10xxx Flash memory microcontrollers". Там расписано, что при установке защиты от чтения флешь нельзя прочитать ни программатором, ни в режиме пошаговой отладки, ни при исполнении кода из оперативной памяти. При выполнении кода из оперативной памяти так-же не работает DMA - запрещено именно чтение из адресного пространства флешь.
Для снятия защиты необходимо полность стереть флешь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 28 мар 2012, 11:02 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 14 июл 2011, 01:36
Сообщения: 72
Откуда: Москва
unkier писал(а):
вы наверно смартфоны делаете :) проекты с которыми я пересекался обычно очень мелкосерийные и это пром.аппаратура узкоспециализированная. для газовиков северных например приборчик. ни о каком шифровании прошивки речи никогда не было. его проще сделать заново чем реверсинжинирингом заниматься... или вот московский монорельс - штатный загрузчик никакого шифрования. кому и за чем нужно реверсинжинирить прошивку бортового вычислителя ? ради прикола ? чтобы повторить этот паровоз реверсинжинирингом нужно сильно упороться )

Ну приборы разные бывают :) А если это хоть и мелкосерийный но "валидатор контроля доступа" ? (к примеру)

unkier писал(а):
Цитата:
Не путайте "протокол физической передачи данных" и "протокол сеанса"...

это всё правильно, но вы мне на какой то другой вопрос отвечаете ) какая разница что и по каким интерфейсам гоняет прибор в штатной работе. перевел прибор в режим загрузчина, подключился по нужному интерфейсу, прошил. всё. что не так ?

я отвечал на вопрос: "как связаны свои протоколы передачи данных с бутлоадером ?". Перевести прибор в режим закрузчика , да еще и подключиться к нему шнурком не всегда есть возможность: тяжело или невозможно вскрыть корпус, устройство на ЗНАЧИТЕЛЬНОМ удалении от оператора, да еще много факторов может быть. Тут так-же все зависит от условий эксплуатации и назначения прибора - вариантов море.

unkier писал(а):
но если у вас в реальных условиях линия "может и на 9600 с трудом работать" то это уже наверно проблема железа, схемотехники ?

Скорее проблема среды передачи данных - не ко всем железкам можно медью дотянуться... бывает и радиоканал, да еще и на пределе видимости, да в плохую погоду... Потому иногда проще предусмотреть автобауд.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 28 мар 2012, 14:53 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Для unkier и др.
unkier писал(а):
как связаны свои протоколы передачи данных с бутлоадером ? у встроенного бутлоадера свой протокол и какие у вас в программе протоколы значения не имеет. или вы имеете ввиду что у вас на устройстве не разведен ни один нужный усарт, can или usb ?
unkier писал(а):
зачем ? прошивка устройства это разовый тех процесс в цеху при сборке или (редко) на объекте. изменение скорости и.т.п это красивые бантики.
unkier писал(а):
не флейма ради ) можно таки весомые аргументы ? как по мне так для просто прошивки встроенного за глаза. и защита прошивки в моем случае весьма сомнительна, прошивка без прибора никому не нужна никаких ноухау в ней нет.


Если прошивать приходится устройство на большом расстоянии, если условия создающие помехи на линию жесткие, если требуестся менять подключенную периферию для других устройств.....

Стандартный бутлоадер работает по своему протоколу и без шифрования. Каждая контора создает свой протокол обмена по UART (это обычно в основе тот же MOdbus но измененный) и она желает чтобы прошивка не сделала ноги.

Еще важное то, что поменяй устройство на другое, где например USART1 будет занят другими задачами (подключение внешних АЦП, акселерометров и др.) и вы уже не СМОЖЕТЕ использовать свой фирменный загрузчик из STM.
Еще примеры? Напишу )))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 29 мар 2012, 07:51 
Старожил

Зарегистрирован: 21 мар 2012, 14:33
Сообщения: 542
Я так и не понял про какую тут защиту написано.

Вариант 1. Мы записываем в микроконтроллер прошивку в открытом виде, а затем ставим защиту от чтения флешь.
Что даёт: когда ваш продукт подключат к SWD, то не смогут считать прошивку. Но если её нужно будет обновить, то файл вы дадите сами, а он не зашифрован. Так?

Вариант 2. Мы посылаем в микроконтроллер прошивку в зашифрованном виде, внутри сидит наша маленькая программа, которая расшифровывает и записывает в открытом виде, а затем ставим защиту от чтения флешь.
Что даёт: когда ваш продукт подключат к SWD, то не смогут считать прошивку. Но если её нужно будет обновить, то файл вы дадите сами, но так как он зашифрован, его не понять. Дешифратор сидит внутри контроллера и на него защита от чтения. Так?

Вариант 3. Мы потеем месяцок другой и делаем скремблер си кода/либо ассемблерного кода/либо бинарных опкодов. После заливки прошивки в открытом виде мы даже не ставим защиту от чтения.
Что даёт: когда ваш продукт подключат к SWD, то смогут считать прошивку и будут охреневать в отладчике с воплями "ЧТО ЭТО?". Защиту от чтения ставить не советуется, так как если кто с микроскопом будет стравливать корпус микросхемы и отключать защиту от чтения вручную, после чтения прошивки может охренеть вдвойне.

Вариант 1 самый простой, вариант 3 самый сложный. Третий вариант можно упростить, и вместо "мутации" кода перед прошивкой понатыкать в исходники специально заточенных под IAR,KEIL,COIDE,ATOLLIC кусков кода, затрудняющих и вешающих отладку, несуществующих опкодов и т.п.. Но такой информации наверное мало.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 29 мар 2012, 10:23 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
tmtlib писал(а):
Вариант 2. Мы посылаем в микроконтроллер прошивку в зашифрованном виде, внутри сидит наша маленькая программа, которая расшифровывает и записывает в открытом виде, а затем ставим защиту от чтения флешь.Что даёт: когда ваш продукт подключат к SWD, то не смогут считать прошивку. Но если её нужно будет обновить, то файл вы дадите сами, но так как он зашифрован, его не понять. Дешифратор сидит внутри контроллера и на него защита от чтения. Так?


Абсолютно верно! Этот вариант и используется повсеместно.
Только замечание: не обязательно обмен происходит по SWD, это может быть любой интерфейс для контроллера.
Теперь о протоколе.
Написанная фирманная прога для IAP используе так называемый YModem protocol. Скачать здесь.
Каждая толковая фирма пытается уйти от стандартных протоколов обмена. Спросите зачем?
Ясно, что фирма разрабатывает не одно в своей жизни устройство (в свою очередь, эти устройства могут легко обмениваться меж собой) и что беспокоится о надежности.
Ей выгоднее написать свой протокол передачи (а это плевое дело!) и спать спокойно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 29 мар 2012, 10:32 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Простите, не скинул фирменную прогу. ))
Вот здесь перейдите на закачку
http://www.hackchina.com/en/cont/115430


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 29 мар 2012, 11:10 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
tmtlib писал(а):
Вариант 2. Мы посылаем в микроконтроллер прошивку в зашифрованном виде, внутри сидит наша маленькая программа, которая расшифровывает и записывает в открытом виде, а затем ставим защиту от чтения флешь.
Что даёт: когда ваш продукт подключат к SWD, то не смогут считать прошивку. Но если её нужно будет обновить, то файл вы дадите сами, но так как он зашифрован, его не понять. Дешифратор сидит внутри контроллера и на него защита от чтения. Так?

В принципе правильно, но защита стоит на весь флеш и ставить/снимать ее в процессе перезаписи не нужно.
Кстати в стм32L после установки защиты ее нельзя уже ничем стереть и встроенный бутлоадер отключается. Т.ч. если в нем не предусмотреть свой бутлоадер, то после установки защиты менять прошивку придется перепайкой м/с:)

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Последний раз редактировалось PRC 29 мар 2012, 14:49, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 29 мар 2012, 14:44 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Дописывая свой загрузчик, я прописал модуль контроля питания. Тобишь если напр падает ниже 2.2 В то во флеш прописывается спец слово, которое после рестарта говорит о том, что нельзя стартовать на программу пользователя (значит была ошибка записи во флеш!). Это на тот случай, когда случается сбой по питанию удаленного устройства, а возможность его передергивания затруднена.

Проверял работу модуля PVD stm32f10x - при скорости падения напряжения питания 1000 В/сек контроллер (72 MHZ core) успевает прошить в память 1 слово.
Модуль работает четко без замеченных проблем. Это при условии, что вы четко определили временные интервалы как в софте, так и в железе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 29 мар 2012, 14:51 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
Koder писал(а):
Дописывая свой загрузчик, я прописал модуль контроля питания. Тобишь если напр падает ниже 2.2 В то во флеш прописывается спец слово, которое после рестарта говорит о том, что нельзя стартовать на программу пользователя (значит была ошибка записи во флеш!). Это на тот случай, когда случается сбой по питанию удаленного устройства, а возможность его передергивания затруднена.

Я делал расчет CRC и сравнивал с записанным в епроме. Если не совпадало, то принудительный запуск прошивки.

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 29 мар 2012, 15:53 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
PRC писал(а):
Я делал расчет CRC и сравнивал с записанным в епроме. Если не совпадало, то принудительный запуск прошивки.


Вы имеете в виду если в память записался кусок кода, а затем произошло ЧП, то вы при перезапуске расчитывали CRC этого куска?
Можна подробнее?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 29 мар 2012, 16:28 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
Koder писал(а):
PRC писал(а):
Я делал расчет CRC и сравнивал с записанным в епроме. Если не совпадало, то принудительный запуск прошивки.


Вы имеете в виду если в память записался кусок кода, а затем произошло ЧП, то вы при перезапуске расчитывали CRC этого куска?
Можна подробнее?

При старте считается CRC32 для всего флеша и сравнивается с тем, что хранится в епроме. Если значения не совпали, то загрузчик переходит в режим прошивки. Значение crc записывается в самом конце, когда вся программа уже перезаписана. В результате, если прошивка записана с ошибкой, то суммы не совпадут.

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 29 мар 2012, 17:06 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Ага!
Идея интересна. Спасибо!
Я правда сделал так, что в конце записи новой проги в память, в произвольное пространство флеш, сохраняется 1 слово адреса перехода на программу пользователя и рядом еще одно слово флага по сбою питания (как я уже описал выше). При старте оба этих слова проверяются на истинность. Если истинно - переходим на программу пользователя, в противном случае, программируем.

Зачем хранить адрес перехода? Для того, чтобы отвязаться от жесткого вбивания в бутлдоадер адреса перехода, таким образом, загрузчик становится более универсальным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 30 мар 2012, 19:56 
Старожил

Зарегистрирован: 21 мар 2012, 14:33
Сообщения: 542
а вот интересно, насколько хороша защита? Я где-то читал, что на плате Discovery прошивка ST-LINK защищена от чтения. Я так понял её никому ещё не удалось прочитать, только заменить на другую от третьих производителей (какой-то versalon или что там). Так это или нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 31 мар 2012, 13:31 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Безусловно ST защитили свой продукт.
По теории для STM32, а ST-Link дебаггер построен на STM32f103, если мы попытаемся стереть блокировку на чтение Flash то автоматически произойдет МАССОВОЕ стирание памяти кода. Таким образом мы не сможем похитить прошивку как не крути.
Можна конечно самому попытаться подрезаться по SWD к контроллеру и посмотреть что получиться))))))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 03 май 2012, 18:31 
Заглядывает иногда

Зарегистрирован: 22 апр 2012, 23:14
Сообщения: 53
Koder писал(а):
Мой ответ на мой вопрос в начале темы!

Копаясь с природой контроллера STM32f10x обнаружил достаточно банальную, на первый, взгляд вещь!

ВНИМАНИЕ! ВСЕМ ТЕМ, КТО РАБОТАЕТ С ПЕРЕНОСОМ ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ ПО ПРОСТРАНСТВУ ФЛЕША !

ЕСЛИ ПЕРЕД ПЕРЕХОДОМ НА ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ С БУТЛОАДЕРА ВЫ В НЕМ НЕ ЗАПРЕТИТЕ РАБОТУ ТОЙ ПЕРИФЕРИИ, КОТОРУЮ ИСПОЛЬЗУЕТЕ, ТО ПЕРЕЙДЯ НА НОВУЮ ПРОГУ ОНА НЕ БУДЕТ РАБОТАТЬ КОРРЕКТНО ИЛИ ВООБЩЕ НЕ БУДЕТ.. !


У меня остался работать TIM4 с прерываниями и я сиганул на прогу пользователя. Так этот таймер ТАК И ПРОДОЛЖАЛ РАБОТАТЬ!

Вообще лучше запретите все, что можно (особенно прерывания), а потом переходите со спокойной душой по нужному адресу новой проги.

Успехов!




Работаю над завершающей частью своего бутлоадера. Н еомгу решить одну проблемму - простые программы, не использующие прерываний, загруженные через свой бутлоадер,работают на ура. А вот программы, где используется прерывания и периферия, используемая бутлоадером,не работают. По крайней мере, прерывания в них точно.

Идея такая:
Изначально после сброса МК ждет в течении определенного времени, когда установится связь с внешним загрузчиком через USART2. Если связь утсанавливается - работает алгоритм бутлоадера, который загружает программу и запускает ее след образом: сбрасывается МК с помощью NVIC_SystemReset.
Если после времени таймаута не утсановлена связь с внешним загрузчиком - запускается программа пользователя если она есть. При этом отключается вся периферия, запрещаютс япрерывания и переносится таблица векторов перрываний. скелет основной фкнкции приведен ниже. Помогите понять и исправить ошибку, почему не хотят работать прерывания в загруженной программе (загруженная программа - программа,реализующая протокол МОДБАС на этом же ЮСАРТ2, что и бутлоадер, то есть программа пользователя натсраивает ЮСАРТ2 для своих нужд. Но эта программа не работает, загруженная своим бутлоадером, а загруженная через программатор работает).
Код:
void   JumpToApplication   (uint32_t ApplicationAddress)
{
typedef    void       (*pFunction)(void);
         pFunction    Jump_To_Application;
         uint32_t    JumpAddress;


//__disable_interrupt();                                                   // Запрещаем прерывания
NVIC_SetVectorTable(NVIC_VectTab_FLASH, USER_PROG_OFFSET);
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) //Проверяем, есть ли что-нибудь по адресу (там должно лежать значение SP для приложения, его кладет линкер)
    {
      JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);         //Адрес перехода из вектора Reset
      Jump_To_Application = (pFunction) JumpAddress;                    //Указатель на функцию перехода
      __set_MSP(*(__IO uint32_t*) ApplicationAddress);                   //Устанавливаем SP приложения
      Jump_To_Application();                                            //Запускаем приложение
    }
}

/*==============================================================================================/*====================================================================================================*/
int   main   (void)
{
   InitBootCLK();
   InitTimer(TIM2, 100000);//
   NVICTmrInit(TIM2,TIM2_IRQn,1);
   InitUSARTPeriph(USART_SPEED,USART_Pins,BOOT_USART,USART_Interrupt);
   TmrOn(TIM2);
   TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
      
   while (!BootLoaderStack.TIMEOUT_FLAG){}   //ждем таймаут после запуска
   
   switch   (BootLoaderStack.TIMEOUT_FLAG)
         {
            case   TIMER_SRC:   {
                              AppAddr=((ReadFromFlash(PRG_ADDR_CELL)<<16)|ReadFromFlash(PRG_ADDR_CELL+2));//+USER_PROG_OFFSET;
   
                              if (((AppAddr>=FLASH_START_ADDR)&&(AppAddr<=FLASH_END_ADDR))||((AppAddr>=SRAM_START_ADDR)&&(AppAddr<=SRAM_END_ADDR)))
                                 {
                                    RCC->APB1RSTR=0;
                                     RCC->APB2RSTR=0;
                                    RCC->APB1ENR=0;
                                    RCC->APB2ENR=0;
                                    TmrOff(TIM2);
                                    TIM_ITConfig(TIM2,TIM_IT_Update,DISABLE);
                                    USART_Cmd(USART2,DISABLE);
                                    USART_DeInit(USART2);
                                    USART_ITConfig(USART2,USART_IT_TC,DISABLE);
                                    USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);
                                    __disable_irq ();
                                    JumpToApplication(AppAddr);
                                 }
                                 else
                                    {
                                     while (1)
                                          {
                                                BootLoaderProcessing();
                                                if (BootLoaderStack.APPLICATION_READY_FLAG)
                                                      NVIC_SystemReset();   
                                          }   
                                    }
                            }   break;
            case   BOOT_SRC:   {   
                            while (1)
                                          {
                                                BootLoaderProcessing();
                                                if (BootLoaderStack.APPLICATION_READY_FLAG)
                                                      NVIC_SystemReset();   
                                          }
                           }   break;
            default:            break;
         } 
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 03 май 2012, 19:16 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Что находится в функции __disable_interrupt(); ?????????
Если вы запретили прерывания в проге загрузчика то должны разрешить их при инициализации в ПРОГЕ на которую переходите.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 03 май 2012, 23:21 
Заглядывает иногда

Зарегистрирован: 22 апр 2012, 23:14
Сообщения: 53
Koder писал(а):
Что находится в функции __disable_interrupt(); ?????????
Если вы запретили прерывания в проге загрузчика то должны разрешить их при инициализации в ПРОГЕ на которую переходите.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 04 май 2012, 00:15 
Старожил
Аватара пользователя

Зарегистрирован: 28 фев 2011, 19:28
Сообщения: 3634
Откуда: Белгород РФ
unkier писал(а):
вы наверно смартфоны делаете :) проекты с которыми я пересекался обычно очень мелкосерийные и это пром.аппаратура узкоспециализированная. для газовиков северных например приборчик. ни о каком шифровании прошивки речи никогда не было. его проще сделать заново чем реверсинжинирингом заниматься...


Согласен, даже смартфоны китайцы клонируют не взламывая чужой код - долго возится. На выставках в числе первых тщательно фотографируют модель какого-нибудь Samsung, LG и через несколько дней(!) выбрасывают на рынок точные копии, до выхода официальной модели. Еще и по параметрам интереснее, 2 сим карты вместо одной например. Используют более ранние наработки как я понимаю, и просто меняют корпуса и по мелочи железо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 04 май 2012, 11:22 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
batisto4ka писал(а):
__disable_interrupt(); это встроенная функция - глобальный запрет прерываний.В основной программе пользователя, которая загружается, нужные прерывания конечно включаются


Надеюсь запрет вы прописали ка стандартную функцию
__disable_irq (); это __set_PRIMASK(1);

Проверьте такое:
- перенос таблицы векторов прерываний в проге на кот переходите
- далее после разрешения прерываний NVIC разрешите глобальные прерывания __set_PRIMASK(0);
- проверьте адрес компиляции проги для загрузки бутлоадером и сравните с новым адресом в таблице векторов.

пример для проги на которую перешли.

void NVIC_Configuration(void)
{

#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08010000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x10000);
#endif

//Настройка общей группы прерываний по 4-ре уровня
//на preempting priority и subpriority

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

/*UART4*/
NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

/* Enable the TIM2 global Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

/* Enable the TIM4 global Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

/* Enable the PVD Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

//Разрешаем все прерывания
__set_PRIMASK(0); //enable all system interrupts

}


И еще одно: ЗАПРЕЩАЙТЕ ПЕРИФЕРИЮ в бутлоадере не только с помощью DISABLE, используйте DeInit(); для каждого подключенного модуля, чтобы переход на прогу был эквивелентен сбросу контроллера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 04 май 2012, 13:21 
Заглядывает иногда

Зарегистрирован: 22 апр 2012, 23:14
Сообщения: 53
Koder писал(а):

И еще одно: ЗАПРЕЩАЙТЕ ПЕРИФЕРИЮ в бутлоадере не только с помощью DISABLE, используйте DeInit(); для каждого подключенного модуля, чтобы переход на прогу был эквивелентен сбросу контроллера.


К описаннному выше коду бутлоадера внесла исправления
Код:
AppAddr=((ReadFromFlash(PRG_ADDR_CELL)<<16)|ReadFromFlash(PRG_ADDR_CELL+2));//+USER_PROG_OFFSET;
   
                              if (((AppAddr>=FLASH_START_ADDR)&&(AppAddr<=FLASH_END_ADDR))||((AppAddr>=SRAM_START_ADDR)&&(AppAddr<=SRAM_END_ADDR)))
                                 {
                                    RCC->APB1RSTR=0;
                                     RCC->APB2RSTR=0;
                                    RCC->APB1ENR=0;
                                    RCC->APB2ENR=0;
                                    USART_DeInit(USART2);
                                    TIM_DeInit(TIM2);
                                    GPIO_DeInit(GPIOA);
                                    //__disable_irq ();
                                    __set_PRIMASK(1);
                                    JumpToApplication(AppAddr);
                                 }

Проект программы, загружаемой в МК через этот бутлоадер прикреплен


Вложения:
Com_RECEIVE_DONE.rar [93.37 Кб]
Скачиваний: 601


Последний раз редактировалось batisto4ka 04 май 2012, 15:37, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 04 май 2012, 13:28 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Гляну.
На будущее. Осторожнее с проектами которые выкладываете (если для вас они важны). Лучше фрагменты кода.))))

А где же файлы проекта *.с ?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 105 ]  На страницу Пред.  1, 2, 3, 4, 5  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB