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

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

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

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

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

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

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

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

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

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

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

Это у А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 и читал в родной кровати сдув чип с платы. А пикушкаи точно лочатся на стадии компилрования и прошивки.

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

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

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

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

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

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

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

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

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

Инфекция.

PIC16F876A

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

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

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