Jump to content

    

TOG

Участник*
  • Content Count

    352
  • Joined

  • Last visited

Community Reputation

0 Обычный

About TOG

  • Rank
    Местный

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

2956 profile views
  1. Друзья, помогите пожалуйста решить один ребус: есть AWG генератор сигналов Siglent SDG5082. Через несколько лет после покупки у него появился глюк: при любой попытке задействовать первый канал он намертво зависал. Пользовались вторым каналом. Потом я подумал, что может быть проблема в прошивке, т.к. вместо серийного номера отображался какой-то мусор. Обновил прошивку. Все заработало, оба канала, все прекрасно. Но через пару дней опять генератор стал зависать при задействовании первого канала. И при очередной перезагрузке он так и остался висеть на заставке (Splash screen). Больше он не загружался, отображает только заставку. В интернете пишут, что повреждение прошивки это очень распространенный дефект на данных генераторах, к сожалению никаких вариантов восстановления прошивки для данной модели производитель не предусмотрел. Поэтому я выпаял чип флэш памяти Spansion S29GL064N90TFI04 и скачал прошивку(в прикрепленных файлах: Firmware original.bin). Вижу такие области: 1. 0x0000 - 0xDBD4 (Видимо распаковщик) 2. 0x0DBD5 - 0xA44B5 (возможно упакованная прошивка для Blackfin'a) 3. 0x100000 - 0x2FFFFF (FPGA DATA) 4. 0x300000 - 0x30FFFF (FOREVER DATA, этой части нет в прошивках распространяемых через сайт производителя) 5. 0x310000 - 0x34FFFF (FOREVER DATA, видимо продублирована для надежности) 6. 0x350000 - 0x7FFFFF (графика, картинки) На плате установлен процессор ADSP BF531 Blackfin, FPGA Lattice LCMXO640C, RAM, FLASH. Если отображается Splash Screen, то какую часть прошивки можно считать исправной ? И на кой там стоит FPGA, на ней собран процессор с линуксом что-ли (судя по времени загрузки (около минуты), когда он еще работал) ? Тот файл обновления прошивки, который производитель распространяет через свой сайт, немного заXORен и требует неких манипуляций. Мне бы хотя бы узнать на какую область обратить больше внимания. SDG5082 Firmware update from internet.zip SDG5082 Firmware original.zip
  2. Ну должны же быть в природе микроконтроллеры с защищенным хранилищем ключей типа как в ATSHA204A. Подскажите если кто знает.
  3. Вопрос пока был чисто теоретический. Ищем способ как-то защитить девайс от клонирования
  4. Друзья, интересует теоретический вопрос: Вот имеем мы к примеру микроконтроллер STM32L051, как пишет производитель он имеет свой уникальный ID (UID 96 bit). Вот прошили мы этот микроконтроллер, защитили его 2-м уровнем и отдали китайцам на вскрытие нашей прошивки. Заплатили $10k. Прошивку они прочитают, это понятно. А смогут ли они прочитать ID микроконтроллера ?
  5. Друзья, есть только hex файл и нужно пройтись отладчиком по некоторым участкам кода. Можно ли в Keil uVision это как-то сделать ? Микроконтроллер ADuc831.
  6. Все, разобрались. Так же через UART подключаться можно к камню в режиме отладки.
  7. Друзья, имеется древнее устройство на микроконтроллере ADuC831, даташит на микроконтроллер ADuC831 сообщает, что у него имеется встроенный загрузчик и отладчик через UART. Загрузчик кода через UART освоили, с помощью ADI'шной программы WSD. Но как быть с отладкой ? Нигде никаких девайсов для отладки под ADuC831 найти не можем. В Keil uVision во вкладке Debug написано, что нужен некий ADI Monitor Driver, что это такое и где это взять ? Подскажите как отладку запустить ?
  8. Друзья, неделю боролись с ужасными глюками программы пока наконец не увеличили размер стека. Но как же узнать о таких проблемах заранее ? И чтобы не наугад ?
  9. Я пробовал много разных вариантов. Компилятор умеет обходить эту таблицу куда бы я ее не разместил, ну в самое начало 0x08000000 я ее понятно не ставил. Получается идет код, потом таблица, потом продолжение кода. Я где-то тут встречал тему, где обсуждалось, что дескать плохо если инициализированные переменные оказались ниже самой программы. Но почему это "плохо" я не понял. Там все куда более странно. Hard Fault возникает при чтении инициализированного массива(глобальная переменная). Читаю из функции. uint8_t dat[] = {1,2,3,4,5,6,7,8,9}; // глобальная переменная SimpleFunc(dat, 4, sig); void SimpleFunc(uint8_t* Buf1, signed int Vector1, uint32_t* Sig) { ... Dat2 = Buf1[Vector1 - 1]; // Тут возникает Hard Fault. Если эту строку закомментировать, то Hard Fault возникает дальше на строке if (Vector1 != 1) // тут тоже может возникнуть Hard Fault
  10. Друзья, имеется микроконтроллер STM32L051. Размер встроенного флэша у данного МК 64 кБ. нужно разместить во внутренней флэш памяти большой массив данных - 16 кБ. Я размещаю этот массив ближе к началу флэш памяти, а именно по смещению 2кБ от начала, пробовал и в конце флэш памяти размещать. У меня такое чувство, что я что-то делаю не так. Хотя компилятор ошибок не выдает и все вроде работает, но периодически возникают какие-то чертовски странные сбои - программа может буквально на ровном месте улететь в Hard Fault. #define PageSize 128 #define zDATA_addr 0x08000000 + 16 * PageSize static const uint8_t zDATA[] __attribute__((at(zDATA_addr)))= { 0x40, 0x32, 0xD2, 0x60, 0xF9, 0x23, 0x71, 0x11, 0x06, 0x6E, 0x75, 0x86, 0x3F, 0x7C, 0x76, 0x77, 0x98, 0x03, 0x74, 0x77, 0x37, 0x44, 0x5C, 0x12, 0x23, 0xC4, 0xA3, 0x1B, 0x15, 0x5B, 0x48, 0x35, 0x4B, 0x27, 0xDB, 0x63, 0xA1, 0x73, 0x34, 0x5A, 0x92, 0x39, 0x64, 0x34, 0x23, 0x21, 0x5E, 0x4E, 0x90, 0x91, 0x3A, 0x3C, 0x13, 0x78, 0xAB, 0x06, 0xDF, 0x3B, 0x68, 0x14, 0x65, 0x26, 0x53, 0x42, // 1000 строк по 16 байт... 0x50, 0x51, 0x6A, 0x2C, 0x33, 0x58, 0x6B, 0x76, 0xD3, 0x4B, 0x68, 0x74, 0x75, 0x36, 0x72, 0x30};
  11. Понял, у меня в настройках была галочка "Verify code download" и Keil проверял целостность программы во флеше.
  12. Друзья не могу понять, записываю программу в микроконтроллер STM32L051K8, далее программа стирает одну из последних страниц флэш памяти в которой расположен массив данных и после этого я не могу подключиться в Keil в режиме отладки, выдает "Cannot access target". Через ST-Link Utility все подключается, видно, что страница стерта, но через отладчик Keil подключиться невозможно, только прошивать по новой и после прогона программы опять получаем "Cannot access target". static FLASH_EraseInitTypeDef EraseInitStruct; uint32_t PAGEError = 0; HAL_FLASH_Unlock(); // разлочиваем EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.PageAddress = 0x08008000; // адрес с которого стирать EraseInitStruct.NbPages = 1; // одну страницу 128 байт HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError); // стираем HAL_FLASH_Lock(); // закрываем
  13. Верно, но трассировать в мусорном коде это тот еще гемор.
  14. да, но этот код будет невозможно анализировать , я уж не говорю про его декомпиляцию в нечто си-подобное. Насколько я помню Exe-cryptor перемешивает машинный код с "мусорным" кодом, заменяет стандартные конструкции создаваемые компилятором на свои (очень сильно замороченные). И если в таком коде будет проверка серийного номера микроконтроллера, то ее найти будет очень не просто. Тоже вариант. Только отправив на тот свет пару девайсов, китайцы наверняка сообразят, что нельзя отсоединять батарейку.