Спасибо за ответ.
Quote (DAlexV)
Посмотри про слово конфигурации с COFIG5L по COFIG7H. Там есть защита блоков от табличного чтения(EBTR) или записи(WRT). Но есть одно но, если запретить чтение/записть в память программ то и Bootloader не сможет получить к ним доступ.
Да. это плохо. Тогда можно сделать так, но будет ли работать.
Программа бутлоадера при принятии любых данных с USB, будет сканировать в реальном времени
каждое принятое слово(16бит) на присутствие кодов 6EF6 и 6EF7.
Логическая структура программы:
1.Принять данные по юсб.
2.Если в слове присутствует 6EF6 или 6EF7, остановить работу бутлоадера.
3.Если всё нормально записать полученный код.
Очень примерное написание программы: (не пинать)
Code
SPper2 = 4000 'адрес начала прошивки пользователя
idleloop:
USBService
cnt = 8
USBIn 3, buffer, cnt, idleloop
if buffer = 6EF6 then newper1
if buffer = 6EF7 then newper1
writecode SPper2,buffer
SPper2 = SPper2 + 1 'добавление нового адреса для записи
goto idleloop
newper1:
end
Добавлено (27.12.2010, 00.04.10)
---------------------------------------------
Ещё хорошо былобы чтоб команды записи и чтения в прошивке пользователя были доступны.
Можно добавить дополнительные ветвления if проверяющие на какой адрес записывается или
читается информация, но может возникнуть лазейка для обхода защиты.
Пример проверки наличие команды записи/чтения и проверка адреса
Code
idleloop:
USBService
cnt = 8
USBIn 3, buffer, cnt, idleloop
if buffer = 6EF6 then newper1 'если обнаружена команда, то проверить адрес приняв следующее слово
if buffer = 6EF7 then newper1 'если обнаружена команда, то проверить адрес приняв следующее слово
errno:
peremen1 = 0
writecode SPper2,buffer
SPper2 = SPper2 + 1 'добавление нового адреса для записи
goto idleloop
newper1:
USBService
cnt = 8
USBIn 3, buffer, cnt, newper1
newper2:
if buffer = peremen1 then err 'проверить адрес, если совпадёт то прекратить выполнение программы
peremen1 = peremen1 + 1 'адреса с 0 по 3800 которые заняты бутлоадером
if peremen1 = 3800 then errno
goto newper2
err:
end
Тут в коде есть ошибки но это как пример чтобы понять смысл защиты.
Возможен ли обход этой защиты если например прошивка такая.
peremenCrack = 9999
peremen1 = 10000 - peremenCrack
readcode peremen1, peremen2
или ещё проще
peremen1 = 5
readcode peremen1, peremen2
Вобщем не пойму как мне нормальную защиту сделать оставив возможность записи и чтения пользователю в разрешённой области.