ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
5 июля
150917
Гудвин, волшебник (17.03.2009 03:13, просмотров: 2409)
Бляттть... (AlexB, поправь, если чего не вкупил) Хочется простого - boot область, защищенную от записи, и надежное обновление фирмвари, ну защиту от считывания, наконец... Задача: дать юзверю возможность элегантно и ненапряжно обновлять фирмварь девайса с SD карточки. Типа воткнул карточку, бутлодырь нашел на диске файлик "firmware.bin" и перешил целевую область. (короче все то, что влехкую позволяет atmega) В dsPIC/24H очень шибко заебатая фишка - CodeGuard™ Security. Курил бумажонки от некрочипа весь вечер и пришел к выводу, что вся эта говенная начинка и нахер не фперлась, ибо не позволяет достичь требуемого результата: Вариант1: Защищаем Вoot сегмент (запись/чтение), в нем загрузчик. Защищаем General Segment от чтения. Вроде все красиво. Типа после сброса обновляем фирмварь, если требуется, в General Segment и передаем туда управление. (я именно так это дело и реализовал на сей момент) Но! Хоть и пишут вот это: "If any of the code-protect bits in FBS, FSS or FGS is clear, then the entire device must be erased before it can be reprogrammed.", там-же пониже есть "ICSP 0x404D "Erase General Segment and FGS Configuration register". Т.е. ничего не мешает извне выполнить командочку ICSP 0x404D, стреть GS и его защиту (не стирая кристалл целиком/оставив boot), воткнуть карточку, подождать и спокойненько считать все, что бутлодырь прописал. Как это понять? Сколько не рылся в бумажонках, точной информации не нашел. Ибо всякие PicKit оболочки и прочие МПлабы трут кристаллы целиком пикоманам. Фсе Щасливы... Способ, назойливо предлагаемый некрочипровцами (приложение стартует в GS и при необходимости передает управление в защищенный CodeGuard-ом загрузчик для обновления) не катит - а вдруг питание дернется, или банально выдернут SD в это время и получаем трупик... Ибо более долбнутой реализации таблицы векторов, чем у некрочипа, мне еще не встречалось ;) Вариант2: Оставляем только GS (как в PIC24F). Схема такая-же. При попытке стереть извне, трется весь кристалл. Но бутлодырь в этом случае не защищен от случайной записи из самой фирмвари. Как-то некузяво по сравнению с той-же мегой... Хоть и есть вроде отдельный битик защиты boot сегмента от записи, но как я понимаю, он актуален в комплексе с другими битами Boot Segment Program Memory Code Protection. А?