Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: вопрос по fuse
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
MicronSys
Есть ли возможность провить fuse прямо с программы
тут прикол в том что давичи я отдовал партию своих приборов
и перед отдачей решил проверить не оставил ли я доступ к прошивке
из 50 устройст 2 оказались полность с открытой прошивкой ( а она денег стоит )

так вот можна ли изменять fuse на лету или хотябы прочитать их
конкретно интересуют Lock и BootLock help.gif
vesago
Никак нельзя. Вот по этому я и полюбил консольные программаторы. Прописал в батнике нужные фузы и только тискаешь на батник.
MicronSys
Цитата(vesago @ Dec 20 2007, 15:54) *
Никак нельзя. Вот по этому я и полюбил консольные программаторы. Прописал в батнике нужные фузы и только тискаешь на батник.


ВО БЛИН ПОПАЛ
так можно и зароботка лишится
vesago
Я думаю, маловероятно, что юзер будет пытаться слить прошивку дабы клонировать железку.
andrvisht
Цитата(MicronSys @ Dec 20 2007, 16:02) *
ВО БЛИН ПОПАЛ
так можно и зароботка лишится

прочитать можно, в IAR в файле <intrinsics.h> есть функции, а где-то в этом форуме была подобная тема. Если не найдете попробую поискать в сохраненных. Пробовал читать, читалось smile.gif
vesago
Гм, действительно. Век живи - век учись...

Код
#define _SPM_GET_LOCKBITS()  \
  __AddrToZByteToSPMCR_LPM((void __flash*)0x0001, 0x09)

#define _SPM_GET_FUSEBITS()  \
  __AddrToZByteToSPMCR_LPM((void __flash*)0x0000, 0x09)
arttab
Насколько помню про самопрограммиравание AVR, то fuse можно изменить. Гляньте первоисточники.
MicronSys
да это хорошо
а можит кто то подскажит как это сделать в winavr
a123-flex
Цитата(&-rey @ Dec 20 2007, 15:21) *
прочитать можно, в IAR в файле <intrinsics.h> есть функции, а где-то в этом форуме была подобная тема. Если не найдете попробую поискать в сохраненных. Пробовал читать, читалось smile.gif



может подскажете еще форму для set_fuse_bits smile.gif
man with no name
см. avr/boot.h Там есть __boot_lock_bits_set
Цыкетчик
Цитата(a123-flex @ Dec 23 2007, 00:17) *
может подскажете еще форму для set_fuse_bits smile.gif

Такой нет. И быть не иожет. По определению. Поскольку в системе команд AVR есть команды программирования (т.е. изменения с '1' на '0') LOCK-битов: BLB11,BLB10,BLB01,BLB00 защиты секции программы и секции загрузчика (но нет команд "разлочивания", т.е. изменения LOCK-битов с '0' на '1'). Также нет команд изменения FUSE-битов. Также нет команд программирования / стирания LOCK-битов защиты от "считывания/записи программатором": LB1,LB2. Так что если Вы при прошивке девайса не запрограммировали LOCK-биты LB1 и LB2 и отдали девайс заказчику, то Ваша прога залочить сама себя от считывания программатором уже не сможет и заказчику ничто не помешает считать Вашу прошивку программатором

P.S. Для тех кто не в курсе LOCK- и FUSE-биты - разные вещи.
Цыкетчик
Цитата(Цыкетчик @ Sep 24 2008, 14:02) *
Так что если Вы при прошивке девайса не запрограммировали LOCK-биты LB1 и LB2 и отдали девайс заказчику, то Ваша прога залочить сама себя от считывания программатором уже не сможет и заказчику ничто не помешает считать Вашу прошивку программатором

Хотя можно сделать вот что. Прога при запуске считывает LOCK-биты LB1 и LB2. И если они не запрограммированы (не равны '0') стирают самую себя во FLASH. Поэтому если заказчик считает прошивку, то он увидет только $FFFF во всех ячейках
defunct
Цитата(Цыкетчик @ Sep 24 2008, 13:02) *
Поскольку в системе команд AVR есть команды программирования (т.е. изменения с '1' на '0') LOCK-битов: BLB11,BLB10,BLB01,BLB00 защиты секции программы и секции загрузчика (но нет команд "разлочивания", т.е. изменения LOCK-битов с '0' на '1').


.....
Так что если Вы при прошивке девайса не запрограммировали LOCK-биты LB1 и LB2 и отдали девайс заказчику, то Ваша прога залочить сама себя от считывания программатором уже не сможет и заказчику ничто не помешает считать Вашу прошивку программатором

Какая-то глобальная нестыковка получается.
Есть команды залочивания, но почему-то нельзя ими пользователься.
Уж будьте добры, лучше цитаты из ДШ приводите. ;>
bill_vs
Цитата(Цыкетчик @ Sep 24 2008, 17:39) *
Хотя можно сделать вот что. Прога при запуске считывает LOCK-биты LB1 и LB2. И если они не запрограммированы (не равны '0') стирают самую себя во FLASH. Поэтому если заказчик считает прошивку, то он увидет только $FFFF во всех ячейках

Ну, стирать-то не обязательно. После прошивки должна следовать проверка функционирования изделия. Достаточно после анализа LOCK бит чем-нибудь этот факт проиндицировать и отказаться правильно работать.
defunct
Цитата(bill_vs @ Sep 24 2008, 17:07) *
Ну, стирать-то не обязательно. После прошивки должна следовать проверка функционирования изделия. Достаточно после анализа LOCK бит чем-нибудь этот факт проиндицировать и отказаться правильно работать.

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

И не тратить флеш память на код чтения локов в программе. Для бутлоадера каждое слово флеш критично.
Цыкетчик
Цитата(defunct @ Sep 24 2008, 17:59) *
Какая-то глобальная нестыковка получается.
Есть команды залочивания, но почему-то нельзя ими пользователься.
Уж будьте добры, лучше цитаты из ДШ приводите. ;>

Почему же нестыковка?

Просто LOCK-биты бывают двух "типов":
1.Для блокировки чтения командой LPM и/или записи командой SPM ячеек FLASH самим процессором: BLB11,BLB10,BLB01,BLB00
2.Для блокировки чтения и/или записи ячеек FLASH внешним девайсом (программатором): LB1, LB2

LOCK-биты первого типа можно как читать, так и изменять программно. Причём изменять можно только с '1' на '0'.
А LOCK-биты второго типа программно можно только читать.

Что непонятного то? 07.gif

Цитата(bill_vs @ Sep 24 2008, 18:07) *
Ну, стирать-то не обязательно. После прошивки должна следовать проверка функционирования изделия. Достаточно после анализа LOCK бит чем-нибудь этот факт проиндицировать и отказаться правильно работать.

Но тогда что помешает юзеру взять и считать эту прошивку программатором?

Где же тут тогда защита прошивки от "постороннего глазу"? cranky.gif

Цитата(defunct @ Sep 24 2008, 18:14) *
вообще достаточно автоматизировать процесс прошивки.
bat'ник которым фузы, локи, и бутлоадер прошиваются одновременно.

А что помешает продвинутому юзверю взять..Да и зарЭмить строчку в BAT-нике , в которой Вы устанавливаете LOCK-биты? twak.gif
defunct
Цитата(Цыкетчик @ Sep 24 2008, 17:23) *
А что помешает продвинутому юзверю взять..Да и зарЭмить строчку в BAT-нике , в которой Вы устанавливаете LOCK-биты? twak.gif

Если это сотрудник - его вероятно уволят..
А если не сотрудник, то простите у какого такого продвинутого юзверя будет доступ к этому батнику?

Продвинутый юзер может заливать по пользовательскому интерфесу (232 / 485 / Eth) нужную ему пользовательскую программу в уже подготовленный и залоченный девайс.
Цитата
Что непонятного то?

Быстро читал. Понял как программно лочить локи можно и в то же время программно нельзя лочить локи. Сейчас уже ясно что Вы имели в виду.
bill_vs
Цитата(Цыкетчик @ Sep 24 2008, 18:23) *
Но тогда что помешает юзеру взять и считать эту прошивку программатором?

Где же тут тогда защита прошивки от "постороннего глазу"?


А у Вас "юзер" сам прошивает? Или все-таки Вы или Ваши сотрудники?

Если после прошивки изделие проверяется, то не "залоченое" оно не попадёт к пользователю.
smk
Цитата
так вот можна ли изменять fuse на лету или хотябы прочитать

Да без проблем. Используйте студию и програматор под нее. В исходном коде пишите ну например:
FUSES =
{
.low = (FUSE_CKSEL0 & FUSE_CKSEL2 & FUSE_CKSEL3 & FUSE_SUT0),
.high = (FUSE_SPIEN & FUSE_BODLEVEL1 & FUSE_BODLEVEL0),
.extended = EFUSE_DEFAULT,
};

LOCKBITS = (LB_MODE_1);

Это чтоб при прошивке сразу фузы правильно ставились. Ну а потом ручками в панели управления программатором можно и LB_MODE_3 установить.
Цыкетчик
Цитата(bill_vs @ Sep 24 2008, 19:05) *
А у Вас "юзер" сам прошивает? Или все-таки Вы или Ваши сотрудники?

Вот что сказал топикстартер:
Цитата(MicronSys @ Dec 20 2007, 15:50) *
тут прикол в том что давичи я отдовал партию своих приборов
и перед отдачей решил проверить не оставил ли я доступ к прошивке
из 50 устройст 2 оказались полность с открытой прошивкой ( а она денег стоит )


Цитата(bill_vs @ Sep 24 2008, 19:05) *
Если после прошивки изделие проверяется, то не "залоченое" оно не попадёт к пользователю.

Никогда не говорите "никогда". Всякое может быть. Прошивщики могут банально "забыть" запрограммировать LOCK-биты. Да просто помеха пробежала во время программирования LOCK-битов. Мало ли что? Лучше всё чтобы при подаче питания на процессор прога проверяла "а точно ли я залочена?" И если нет - стирать нах всю важную часть проги. Оставляем только индикацию "юзверь! Я не залочена. Перепрошей меня и залочь"

Цитата(smk @ Sep 24 2008, 19:07) *
Да без проблем. Используйте студию и програматор под нее. В исходном коде пишите ну например...

Разве программаторы научились понимать СИшные исходники? Простите, не знал
Цитата(smk @ Sep 24 2008, 19:07) *
Ну а потом ручками в панели управления программатором можно и LB_MODE_3 установить.

Человек спрашивал:
Цитата(MicronSys @ Dec 20 2007, 15:50) *
Есть ли возможность провить fuse прямо с программы

Т.е. чтоб сама прога в процессоре правила LOCK-биты, а Вы ему "ручками" советуете. Из-за того что "ручками" вышло то, о чём топикстартер написал:
Цитата(MicronSys @ Dec 20 2007, 15:50) *
тут прикол в том что давичи я отдовал партию своих приборов
и перед отдачей решил проверить не оставил ли я доступ к прошивке
из 50 устройст 2 оказались полность с открытой прошивкой
bill_vs
Цитата(Цыкетчик @ Sep 24 2008, 19:50) *
Вот что сказал топикстартер:
Никогда не говорите "никогда". Всякое может быть. Прошивщики могут банально "забыть" запрограммировать LOCK-биты. Да просто помеха пробежала во время программирования LOCK-битов. Мало ли что? Лучше всё чтобы при подаче питания на процессор прога проверяла "а точно ли я залочена?" И если нет - стирать нах всю важную часть проги.

Либо я плохо написал, либо Вы невнимательно читаете.
На Ваше
Цитата(Цыкетчик @ Sep 24 2008, 17:39) *
Хотя можно сделать вот что. Прога при запуске считывает LOCK-биты LB1 и LB2. И если они не запрограммированы (не равны '0') стирают самую себя во FLASH. Поэтому если заказчик считает прошивку, то он увидет только $FFFF во всех ячейках

я ответил
Цитата(bill_vs @ Sep 24 2008, 18:07) *
Ну, стирать-то не обязательно. После прошивки должна следовать проверка функционирования изделия. Достаточно после анализа LOCK бит чем-нибудь этот факт проиндицировать и отказаться правильно работать.

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