electrovenic 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба Делаю девайс на lpc2124, прога почти готова макет уже пашет. А фирма заказчик не совсем "чиста на руку". Есть там паренек, который жаждет "слизать" девайс и получать прибыль за мой счет. Суть проблемы: Сколько не рылся в документации не могу найти защиты программы от считывания. Поэтому возникают сл. вопросы: 1. Есть ли штатная защита и как ее включить. 2. Если нет, можно ли организовать программно. 3. Если нет, то аппаратно. Буду благодарен за любые идеи по этим вопросам. P.S. Девайс возможно будет дорабатываться после испытаний, поэтому вариант обкусывания ножек, не совсем подходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба Сколько не рылся в документации не могу найти защиты программы от считывания. Ну зачем-же обанывать на счет "рылся" :-( Конечно есть. Конечно устанавливается программно и блокирует JTAG и ISP (кроме возможности стереть все нафиг). Конечно есть раздел в документе по ISP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alechek 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба Конечно есть раздел в документе по ISP. Еще б место под галочку было в филипсовкой флеш утилите.... Или она по умолчанию залочивает чтение??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба Если в Кейле #pragma NOINIT const unsigned long code_protection __at 0x1FC = 0x87654321; В яре на сахаре видал на асме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба Конечно есть раздел в документе по ISP. Еще б место под галочку было в филипсовкой флеш утилите.... Или она по умолчанию залочивает чтение??? Галочка не возможна в принципе - сначала место должно быть зарезервировано, а это уже в стартапе ручками должно быть сделано. В принцпе проcто сразу собирается release прошивка с установленным 87654321 и все - заодно прошивальщики не смогут забыть поставить "галочку". При большом желании можете добавить ключик в гораздо более удобный в альтернативный ISP, исходники которого имеются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
electrovenic 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба "Ну зачем-же обанывать на счет "рылся" :-( Конечно есть. Конечно устанавливается программно и блокирует JTAG и ISP (кроме возможности стереть все нафиг). Конечно есть раздел в документе по ISP." Я не обманываю, может проглядел, а может в той документации которая у меня это не указано(у меня ведь далеко не вся). Если не затруднит можно подробней как включить, или скажите в каком описании написано сам попробую разобраться. Я в IAR работаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба а может в той документации которая у меня это не указано(у меня ведь далеко не вся). У же в user manual (полагаю, что есть :-) )сие упомянуто черным по белому. 20.7 Code Read Protection (CRP) Code read protection is enabled by programming the flash address location 0x1FC (User flash sector 0) with value 0x8765 4321 (2271560481 Decimal). Address 0x1FC is used to allow some room for the fiq exception handler. When the code read protection is enabled the JTAG debug port, external memory boot and the following ISP commands are disabled: • Read Memory • Write to RAM • Go • Copy RAM to Flash The ISP commands mentioned above terminate with return code CODE_READ_PROTECTION_ENABLED. The ISP erase command only allows erasure of all user sectors when the code read protection is enabled. This limitation does not exist if the code read protection is not enabled. IAP commands are not affected by the code read protection. Important: CRP is active/inactive once the device has gone through a power cycle. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
electrovenic 0 12 июля, 2006 Опубликовано 12 июля, 2006 (изменено) · Жалоба а может в той документации которая у меня это не указано(у меня ведь далеко не вся). У же в user manual (полагаю, что есть :-) )сие упомянуто черным по белому. 20.7 Code Read Protection (CRP) Code read protection is enabled by programming the flash address location 0x1FC (User flash sector 0) with value 0x8765 4321 (2271560481 Decimal). Address 0x1FC is used to allow some room for the fiq exception handler. When the code read protection is enabled the JTAG debug port, external memory boot and the following ISP commands are disabled: • Read Memory • Write to RAM • Go • Copy RAM to Flash The ISP commands mentioned above terminate with return code CODE_READ_PROTECTION_ENABLED. The ISP erase command only allows erasure of all user sectors when the code read protection is enabled. This limitation does not exist if the code read protection is not enabled. IAP commands are not affected by the code read protection. Important: CRP is active/inactive once the device has gone through a power cycle. Вы правы, простите проглядел. :-( Как я понял, по адресу 0x1FC во флеш нужно записать число 0x8765 4321. Простите за назойливость, а как это правильно сделать? Например в начале до main написать const unsigned long ... =0x8765 4321. А как указать компилятору что константу записать по адресу 0x1FC? Изменено 12 июля, 2006 пользователем electroveni Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба Простите за назойливость, а как это правильно сделать? Разместить именно это число именно по этому адресу. Один из вариантов приводился выше. Либо что-то типа: ORG 0x1FC dc32 0 // Protect Label place - protect if 0x87654321 в startup.s79 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
electrovenic 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба Вот спасибо ОГРОМНОЕ всем!!! :cheers: Буду пробовать. P.S. Простите иногда тормажу по дикому :( . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба На самом деле это не аппаратная защита просто бутлоадер, который на филипсе всегда стартует первым (я его дизассемблировал от LPC2129 правда, но для остальных он такой же) первым делом запрещает JTAG (путем записи в PIN CONNECT BLOCK) потом проверяет это слово и если оно не равно 0x8765 4321 восстанавливает регистры PIN CONNECT BLOCK Поэтому важно случайно при нинициализации чипа не разрешиь JTAG обратно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
electrovenic 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба Получилось!!! Получилось!!! Теперь при попытке читать флеш или рам lpc2000 Flash Utility выдает ошибку Cannot communicate with test board Но приэтом может проситать ID процессора командой Read Device ID. А сделал так: в программе где описываются глобальные переменные (до main), написал следующее #pragma location=0x1FC const unsigned long code_protection = 0x87654321; Спасибо всем ответевшим!!! Тему можно считать исчерпаной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба На самом деле есть такой потайной регистр в LPC-шках, в который ботлоадер просто копирует слово из адреса 0x1FC. И именно этот регистр аппаратно блокирует отладку и чтение флэша. Это значит, что потом при желании можно снова разблокировать защиту. Я вот думаю, если записать по адресу 0x1FC поверх старых 0x87654321 скажем все нули, то защита исчезнет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба На самом деле есть такой потайной регистр в LPC-шках, в который ботлоадер просто копирует слово из адреса 0x1FC. И именно этот регистр аппаратно блокирует отладку и чтение флэша. Это значит, что потом при желании можно снова разблокировать защиту. Я вот думаю, если записать по адресу 0x1FC поверх старых 0x87654321 скажем все нули, то защита исчезнет? Да нет там потайного регистра! Бутлоадер просто отключает JTAG при помощи PINSEL2 регитсра и все. А перед выполнением команд проверяет была ли защита флеша или нет! Можно в программе разрешить отладку по JTAG даже если защита была включена просто установить нужные биты в PINSEL2 регистре. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба Да нет там потайного регистра! Подтверждаю - нету. Чисто софтовая защита на существующих и документированных возможностях железа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться