Защита прошивки в PIC-контроллерах

Я от всех этих lock-битов и т.п. (как бы они у PIC не назывались) далёк.
Но вот рассказываю как на духу и потом вопрос задам.
У меня есть три “девайса” на микроконтроллерах PIC.
Истинные китайцы, сборка и зашивание прошивки.

У одного “накрылся” микроконтроллер, я купил новый, поменял и решил прошить его. А где взять прошивку? Так у меня же еще два есть!
Беру один, подключаю к программатору и нажимаю “считать прошивку”. Что-то считывается, я пробую загрузить это “что-то” в новый микроконтроллер и по факту получаю - два не работающих устройства!
Да ну не может быть - подумал я, и решил считать прошивку с последнего третьего. Получилась такая же ерунда.

Что за ерунда?
Неужели имеются такие защитные биты, что не только запрещают считывание прошивки, но и портят ее внутри микроконтроллера при попытке считывания? Или мне просто не повезло (два раза)?

Программатор: PICkit 3, программа: PICkit 3 v3.10 Programmer

Если залочен(что чаще всего), то считывается
00 01 02 03 04 …или что-то подобное. Можно в редакторе глянуть

Штош. Основной закон органической химии гласит “Если смешать килограмм варенья и килограмм говна, получицца 2 килограмма говна”. С Пиками, видимо, это тоже проходит. :slight_smile:

Утверждение верно для AVR, что там с PIC-ами происходит, никому неведомо.

Не, прошивка внешне похожа на “нормальную” (ну то есть или рандомные числа или типа того).

Мне больше интересно - как это так в устройстве, с которого пытаешься считать прошивку, прошивка портится?

Да, не прав. Вот глянул, например, из инвертора

1 лайк

Это у АVR “fuses” (фьюзы), а у пиков “Configuration Bits”.
и выставляются они прям в исходнике, и шьются вместе с хексом.

эт если я ничего не путаю…давно было.

//   Code Protection bit:
//     CP0 = ON             Block 0 (000800-001FFFh) is code-protected
//     CP0 = OFF            Block 0 (000800-001FFFh) is not code-protected
//
#pragma config CP0 = OFF

//   Code Protection bit:
//     CP1 = ON             Block 1 (002000-003FFFh) is code-protected
//     CP1 = OFF            Block 1 (002000-003FFFh) is not code-protected
//
#pragma config CP1 = OFF

//   Code Protection bit:
//     CP2 = ON             Block 2 (004000-005FFFh) is code-protected
//     CP2 = OFF            Block 2 (004000-005FFFh) is not code-protected
//
#pragma config CP2 = OFF

//   Code Protection bit:
//     CP3 = ON             Block 3 (006000-007FFFh) is code-protected
//     CP3 = OFF            Block 3 (006000-007FFFh) is not code-protected
//
#pragma config CP3 = OFF

//   Boot Block Code Protection bit:
//     CPB = ON             Boot block (000000-0007FFh) is code-protected
//     CPB = OFF            Boot block (000000-0007FFh) is not code-protected
//
#pragma config CPB = OFF

Было что то подобное и на 128 меге у меня. Как это делал производитель так тогда и не понял, но 2 девайса тоже ушатал, хотя программатор был Phyton и читал в родной кровати сдув чип с платы. А пикушкаи точно лочатся на стадии компилрования и прошивки.

1 лайк

Ну как же ж! Конечно имеются, иначе было бы всё просто. Для холявщиков.)

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

1 лайк

Кажись, это было во младших моделях. Сейчас просто счётчик адреса в содержимом, ЕМНИП. Но, ведь это и не важно. Важно то, что не сосчитаешь. Хотя, в старинных ПИК-ах были какие то выверты, но затем это прикрыли. Опять таки. За большие деньги, думаю, возможно всё. Только, как правило, игра не стоит свечь.)

1 лайк

То есть имеются некие биты, при установке которых прошивка портится внутри самого пика? 0_0

Нет, я не совсем понял вопрос. Защитные биты имеются, по аналогии с AVR, но не более того. Испортить прошивку чтением нельзя. По крайней мере я с таким не сталкивался.

А я вот столкнулся… :frowning:
И не только я.

Что вообще может по способствовать такому?

ЗЫ: После стирания - получились отличные микроконтроллеры, то есть (не без сомнений) наверное можно отмести вариант “специально изготовили такие чипы”.

А конкретно какие МК?

Инфекция.

PIC16F876A

В них точно нет никаких защит с уничтожением. Если только китайцы что то не придумали.

Видимо ТС не совсем правильно считывал. Что, в общем, неудивительно, если первый раз в жизни сталкиваешься с МК

В этих МК используется высоковольтное программирование. Т.е., на RESET подаётся 12,5 вольт. Даже при считывании. Как бы, теоретически можно что то придумать, с тем что бы фиксировать как то эту подачу. Думаю, для китайцев это не проблема.)