Перейти к содержанию
    

d7d1cd

Участник
  • Постов

    439
  • Зарегистрирован

  • Посещение

Весь контент d7d1cd


  1. Хотя, наверное, то, что я предложил, не получится. Такой вывод делаю из того, что при проверке фьюза программатором, программа в микроконтроллере останавливается.
  2. Или пишу в 200, читаю из 1100? Тогда все понятно. Спасибо большое!
  3. На сколько я знаю, этого нельзя сделать непосредственно. Можно только соединить необходимое количество портов микроконтроллера с портом JTAG и выполнять проверку так, как это делает программатор (как описано в MSP430 Programming Via the JTAG Interface).
  4. Приветствую всех. В даташите на микроконтроллер MSP430F47187 в разделе Memory organization я не совсем понял описание размера памяти RAM. Во первых указано, что всего памяти RAM (Total) 8KB 030FFh-01100h. Тут вроде все ясно: объем памяти 8 килобайт, расположена она по адресам от 1100h до 30FFh. Эта память делится на Extended (объем 6 килобайт, расположение 1900h-30FFh) и Mirrored (объем 2 килобайта, расположение 1100h-18FFh). Тут смутно понимаю. Вроде Extended - это расширенная память, Mirrored - отраженная. Но далее в таблице Memory organization есть еще одна область памяти. Называется RAM (mirrored at 018FFh-01100h), объем 2 килобайта, расположение 200h-9FFh. Как я понимаю, данные по адресам 200h-9FFh копируются (отражаются) соответственно по адресам 1100h-18FFh. Например, пишем байт по адресу 200h, записывается в 2 адреса: 200h и 1100h. Тогда непонятно что будет, если записать байт по адресу 1100h. Он отразится в 200h? Разъясните, пожалуйста...
  5. Вы имеете ввиду определить из программы, которая выполняется в этом микроконтроллере?
  6. Обфускатор кода

    Можно подробнее об этом?
  7. Обфускатор кода

    Смотря для кого :) Тиражирование как раз приветствуется. Однако работа программы зависит от лицензии. Чтобы хоть как то защититься от взлома и обхода лицензии надо обфусцировать код для усложнения дизассеблинга.
  8. Обфускатор кода

    Наверное ничем :). Просто я ничего не знаю об обфускаторах, а запутать код надо. Причем у меня особенность: мой проект написан на ассемблере (около 22000 строк). Поэтому мне нужен либо обфускатор для кода на ассемблере, либо обфускатор для скомпилированной программы (если такой существует).
  9. Обфускатор кода

    Здравствуйте все! Уважаемые знатоки, подскажите, существует ли обфускатор кода для MSP430?
  10. UART MSP430

    А зачем тогда устанавливаете бит разрешения прерывания на прием? У Вас бит разрешения прерывания на передачу устанавливается один раз (не в основном цикле). На сколько я помню, после выполнения прерывания (после отправки данных), данный бит сбрасывается. То есть, у вас через USART должен отправиться только 1 байт. Вы пишете, что выполняете перезапуск программы. Позвольте уточнить: перезапуск программы в ПК или в МК?
  11. UART MSP430

    Где у вас происходит включение передатчика USART?
  12. программатор MspFet

    Я тоже использую программу этого производителя. Все отлично работает. Программатор MSP-FET430UIF.
  13. Если такой покупатель найдется, то я думаю, что не буду ему отказывать. Вот только устроит ли его моя цена...
  14. Аренда (даже бессрочная) подразумевает возврат устройства. Я не требую возвращать мне устройство. Хотя можно подумать и над этим, но только не требовать, а предлагать вернуть устройство, например за стоимость месяца лицензии.
  15. В моей, как тут все выражаются, бизнесс-модели устройство бесплатное. Но оно предоставляется пользователю только при покупке лицензии минимум на месяц.
  16. Начну с того, что изделие сделал я и, представьте себе, я буду диктовать свои условия вне зависимости от того нравится это Вам или нет, считаете Вы меня монополистом или не считаете. Это во-первых. Во вторых, от моего устройства не зависит жизнь и здоровье людей: не купил лицензию - не умрешь от этого. В третьих, нужны устройства или "на фиг не нужны" решать точно не Вам. И в четвертых, не надо брызгать слюной и отправлять меня куда-то "развлекаться". P. S. Следующий раз, когда будете проходить мимо этой темы, проходите мимо...
  17. Ну а разве не удобнее задавать в лицензионном ключе время действия в сутках? С учетом того, что я планирую хранить время действия в 2-х байтах, то максимум - это 65535 суток или 179 с лишним лет. Более чем предостаточно! В этом случае нет никакой привязки к дате. Пользователь может купить код и сколь угодно долго не вводить его в прибор. При этом его срок действия не теряется. И это намного проще! При продаже устройства на него будет наносится начальный уникальный ключ (первое число из ПСП). Он и будет выполнять роль серийного номера. При запросе лицензионного ключа, пользователь будет сообщать этот номер (идентификация пользователя). Естественно, при этом надо хранить список всех серийных номеров и количество запросов. Эти данные надо сохранять в архиве на случай сбоя или умирания компа. Если быть вообще параноиком, то можно для каждого проданного устройства сгенерировать ПСП, распечатать ее и зачеркивать использованные коды. В общем, здесь полет фантазии может завести очень далеко.
  18. Хорошо, хорошо. Ваша критика верна. В принципе, как я считаю, для этого и нужен форум, где можно изложить свои идеи или задать вопрос, а пользователи укажут тебе где ты не прав или подскажут что-то. У каждого устройства будет серийный номер. Следуя Вашим рекомендациям, я буду определять следующее случайное число для создания лицензионного ключа, по серийному номеру и номеру запроса. При этом все равно надо держать в своем компе список всех серийных номеров и сколько запросов от них было. Или я опять не прав?
  19. В общем, как в той сказке: "думал, думал и наконец придумал". А точнее, наверное, решил делать следующим образом. Для каждого устройства будет задан начальный уникальный ключ. Назовем его пароль. С помощью этого пароля будет создан первый лицензионный ключ. При вводе этого ключа в устройство, последнее с помощью имеющегося пароля расшифрует лицензию и, посредством генератора псевдослучайных чисел, сгенерирует следующий пароль. Я, имея параметры генератора псевдослучайных чисел, знаю какой следующий пароль будет сгенерирован. При запросе второго лицензионного ключа я создаю его, используя этот следующий пароль. Пользователь вводит второй ключ в устройство, устройство производит расшифровку, генерирует следующий пароль и т. д. Таким образом, каждый новый лицензионный ключ будет создаваться используя новый пароль, что значительно повышает криптостойкость ключа, я так думаю... Кроме этого, пользователю не нужно передавать мне никаких данных. Теперь у меня следующая головоломка: каким способом, используя пароль от генератора псевдослучайных чисел, мне создавать лицензионный ключ?
  20. Вычислить CRC кода

    Baser, у меня проект, где необходимо вычислять CRC, написан на ассемблере. Как я понимаю, это ничего не меняет и настройку линкера, в части вычисления CRC, нужно производить в xcl-файле? Если я все правильно понял, то подскажите, как настроить линкер так, чтобы он вычислял CRC по такому алгоритму: //****** ВЫЧИСЛЕНИЕ ЦИКЛИЧЕСКОГО ИЗБЫТОЧНОГО КОДА ПО ПОЛИНОМУ A001 ******************************************************************************** /* ПАРАМЕТРЫ: R13 - начальное значение ЦИК R14 - адрес начала обсчитываемого массива байт R15 - адрес конца обсчитываемого массива байт (байт по данному адресу не включается в расчет) ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ: R13 - вычисленное значение ЦИК */ CALCULATE_CRC16: // ГЛАВНЫЙ ЦИКЛ РАСЧЕТА ЦИК MOV.B @R14+, R12 ; Определяю очередной байт из массива данных XOR R12, R13 ; Инвертирую биты значения ЦИК по байту массива данных MOV #8, R12 ; Задаю счетчик битов CALCULATE_CRC16_ByteLoop: // ЦИКЛ ОБСЧЕТА БАЙТА CLRC ; Очищаю бит переноса RRC R13 ; Определяю значение очередного бита байта (сдвиг вправо) JNC CALCULATE_CRC16_ByteLoopExit ; Если бит равен 0, то перехожу к декременту счетчика битов XOR #0A001h, R13 ; ...иначе инвертирую биты значения ЦИК по полиному 0xA001 CALCULATE_CRC16_ByteLoopExit: // ПРОВЕРКА УСЛОВИЙ ВЫХОДА ИЗ ЦИКЛОВ DEC R12 ; Уменьшаю счетчик битов JNZ CALCULATE_CRC16_ByteLoop ; Если не все биты обсчитаны, то перехожу к очередному циклу обсчета байта CMP R15, R14 ; Если не весь массив данных обсчитан, то... JNC CALCULATE_CRC16 ; ...перехожу к очередному циклу определения байта массива RET ; Завершаю работу функции
  21. Вычислить CRC кода

    У меня другой МК (семейства MSP430), поэтому я перешел несколько по иной ссылке и скачал пример. Там показано как происходит расчет циклического избыточного кода линкером, программно и аппаратно. Для рассчета программным методом есть 2 функции: табличный расчет (быстрый) и без использования таблицы. При запуске в симуляторе и вычислении ЦИК программным методом по табличному расчету, полученное значение совпадает с ЦИК, вычисленным линкером. Когда же ЦИК определяется без использования таблицы, то он не совпадает со значением, вычисленным линкером. Повторю свой вопрос: каким образом линкер вычисляет ЦИК? Кто-то может привести алгоритм вычисления ЦИК, чтобы результат совпадал со значением, которое вычисляет линкер?
  22. Вычислить CRC кода

    Здравствуйте все. Мне необходимо, чтобы IAR вычислял циклический избыточный код данных во флеш памяти. И знать как он его вычисляет. Я зашел в опции проекта на вкладку Checksum. Вкладку заполнил так: установил галку Fill unused code memory, Fill pattern = 0xFF, установил галку Generate checksum, Size = 2 byte, Alignment = 2, установил радиокнопку Crc polynomial = 0xA001, Complement = As is, Bit order = MSB first, Init value = 0xFFFF, Checksum init size = 16-bit. При запуске в симуляторе я увидел, что мой код начинается с адреса 0x1102, а по адресу 0x1100 расположен вычисленный IAR-ом циклический избыточный код. Так же по MAP файлу я определил, что CRC вычисляется с адреса 0x1102 по адрес 0xFFFF (я так понимаю, включительно данные по эти адреса). В коде сразу происходит вычисление CRC той же области флешь памяти, что и при автоматическом вычислении линкером (то есть с 0x1102 по 0xFFFF). Вычисление происходит так: char *data = (char*)0x1102; // Адрес начала кода int size = 0xEEFE; // Размер кода int crc = 0xFFFF; // Начальное значение CRC while(size--) { crc ^= *data++; for(int i = 0; i < 8; i++) if(crc & 1) crc = (crc >> 1) ^ 0xA001; else crc = crc >> 1; } В результате CRC, который вычисляет линкер и CRC, вычисляемый моим кодом не совпадают. Я пробовал менять параметры Complement и Bit order, однако совпадения CRC так и не добился. Подскажите, каким образом линкер вычисляет CRC?
  23. Разъема в устройстве нет. Сегодня было время подумать над моей задачей и я понял, что варианты, предложенные controller_m30 и slanted мне не подходят. По крайней мере без соответствующих доработок. Все дело в том, что система активации должна быть такой, что код активации должен подходить только к одному устройству и только один раз. У покупателя может быть несколько устройств и код активации должен быть индивидуальным и одноразовым для каждого устройства. Чтобы код активации был индивидуальным и одноразовым для каждого устройства, его необходимо шифровать каждый раз новым ключом. Получается, что этот ключ должно генерировать само устройство, а покупатель будет передавать его мне для генерации нового кода активации. Или можно сделать систему активации так, что новый ключ будет генерироваться по заранее известному алгоритму. При этом, из-за того, что начальное значение ключа в каждом устройстве индивидуально, следующий сгенерированный ключ в данном устройстве с большой долей вероятности не будет иметь такое же значение, как и в другом устройстве. Тем более у одного и того же покупателя. Теперь у меня вопросы: каким образом генерировать новый ключ, какой он должен быть длины и каким образом с помощью этого ключа шифровать код активации?
  24. Baser, Спасибо за ответ. Он, кстати, был Вашим 1000 по счету. Так что с юбилеем!
×
×
  • Создать...