Предисловие В предыдущем статья Рассмотрен механизм защиты от клонирования адаптеров программатора XELTEK SuperPro 6100. В данной статье будет описано создание собственного программного модуля для данного программатора, который путем определенной модификации кода можно адаптировать для работы с любыми другими типами микросхем – не поддерживаемыми на данный момент или, как в нашем случае, заявленными лишь формально.
.
Фон
В очередной раз перед нами возникла задача, которую на первый взгляд можно было решить достаточно просто — нам нужно было сделать копию одной специализированной микросхемы флэш-памяти — mDOC H3 SDED5-512M. Этот чип был разработан более десяти лет назад. Вот PDF-файл (1) с его описанием.Ниже приводится краткая выдержка из русскоязычного анонса: .
msystems подготовила семейство mDOC, пригодных для использования в качестве «твердотельных накопителей»… Прошивка TrueFFS, отвечающая за управление флэш-памятью mDOC H3, имеет собственный контроллер модуля, что делает ее полноценным автономным устройством, которое можно легко добавить к различным портативным устройствам.
… Такая микросхема входила в список поддерживаемых программатором SuperPro 6100, и для нее даже существовал соответствующий переходник DX5057. Но после сборки всего конструктора и выбора этой микросхемы программа выдала следующую картинку с загадочным пунктом «DimageMain», описания которого не нашлось ни в документации, ни на сайте разработчика.
При попытке выполнить операцию «DimageMain» без чипа в адаптере было получено предупреждение о его отсутствии, и после подтверждения этого факта программа вывела следующую информацию:
Судя по надписи «mDOC H3 Write Image», «Образ» — это образ, который можно записать в чип с помощью этого программатора.
Но как это изображение прочитать с уже записанной микросхемы, как его стереть и т.п.
? Чуть позже в Интернете был найден файл (2) от компании Dataman, где частично описывается структура приведенного изображения и упоминается программное обеспечение для его создания.
Таким образом, дальнейшие усилия были направлены на поиск утилит от M-Systems, описанных в документе «Программные утилиты для TrueFFS 7.1».
(3) .
Обращение в техподдержку бывшей M-Systems, теперь SanDisk, не дало никаких результатов – ответа просто не было.
В Интернете нам удалось найти только старые утилиты, не поддерживающие версии чипов H3. Полный SDK от SanDisk также найти не удалось, только его «осколки» (5) с точки зрения реализации драйверов для Linux. Когда мы изучали накопленную информацию, наше внимание привлекла следующая строка в файле от Dataman: «Файлы изображений можно создать с помощью утилиты SanDisk Docshell или PG4UW».
Утилиты «SanDisk Docshell» себя никак не обнаружили, поэтому пришлось разбираться типа PG4UW (4) работает с этим чипом.
Они не стали внедрять весь SDK от SanDisk в свое ПО, а создали плагин с экспортированными методами, необходимыми для работы утилит TrueFFS, которые затем вызываются из их программы.
Мы пойдем тем же путем.
Создание собственного программного модуля
Здесь оговаривается, что автор не несет никакой ответственности за любое использование вами этой статьи.Другими словами, только вы сами будете нести ответственность за свои действия, к совершению которых вас может побудить чтение данного материала.
Давайте договоримся, как и в предыдущей статье, просто называть программу-программатор SuperPro 6100 «программным обеспечением», а компьютер, на котором эта программа работает, «хостом».
Теперь у нас есть еще одна программа, работающая в самом программаторе.
Мы назовем его «программным модулем».
В руководстве «Программные утилиты для TrueFFS 7.1».
(3) описывает функции, реализуемые утилитами DOCSHELL, которые разделены на следующие четыре категории:
- DFORMAT — утилиты для форматирования mDOC-устройства.
- DINFO — утилиты для получения различной информации об устройстве mDOC и существующих на нем разделах.
- DIMAGE — утилиты для чтения, записи и сравнения mDOC-образа устройства.
- SPLITIMAGE — утилиты для разделения образа mDOC-устройства на части.
Один из экспортированных методов «mainEntry» в качестве входного аргумента.
принимает строку ASCIIZ — команду, описанную в руководстве «Программные утилиты для TrueFFS 7.1».
(3) .
Парсер внутри «DOCSHELL.dll» обрабатывает полученную команду и в зависимости от самой команды и ее аргументов вызывает тот или иной метод из основного ПО программатора по указателю, полученному при первичной инициализации.
Мы решили написать свою программу для программатора.
Такой подход, с одной стороны, избавил нас от «копания» в исходных файлах для соблюдения соглашений об обмене информацией между хостом и программистом, а с другой, значительно облегчил процесс отладки, что в случае интеграция модуля в исходное программное обеспечение в некоторых аспектах сделала это невозможным или крайне затруднила.
Собственный пользовательский интерфейс программиста был написан на C# в Visual Studio 2017. Источники (6) прикреплены.
Функциональность, естественно, была на первом месте, поэтому ни о каком улучшении внешнего вида, как и текста самих исходников, не могло быть и речи.
Поэтому минималистичный «дизайн» программы выглядит так.
Вверху главного (и единственного) окна находится меню, кнопкам которого можно назначить произвольные функции.
Пункт меню «XILINX» будет описан ниже.
Ниже два окна.
Сообщения, отправленные из программы плагину «DOCSHELL.dll» и полученные от него, отображаются вверху.
В нижнем окне вы можете набрать нужные вам команды и выполнить их двойным щелчком по соответствующей строке.
Когда программа запустится, она отобразит некоторые команды.
Если вам вдруг представится возможность работать с настоящей микросхемой, будьте осторожны, потому что.
никаких предупреждений о том, что вы можете потерять все данные при форматировании и т.п.
, в программе не реализовано.
Файл «DOCSHELL.dll» находится в каталоге с установленной программой PG4UW. (4) от «Датаман» (можно и от «Элнец»).
Чтобы иметь возможность использовать стороннюю DLL в своей программе, вам нужен заголовочный файл, описывающий экспортированные методы и их аргументы.
В его отсутствие мне пришлось восстанавливать эту информацию самостоятельно.
Методы такого восстановления выходят за рамки данной статьи, поэтому аргументы экспортируемых методов можно найти в прикрепленных исходниках.
С пользовательским интерфейсом в плане его взаимодействия с плагином дела обстоят несколько понятнее.
Теперь мы можем перейти к реализации связи с чипом на физическом уровне, чтобы иметь возможность выполнять команды чтения/записи, полученные от плагина, из/в mDOC. Программный модуль для программатора был написан на языке C в IDE «IAR Embedded Workbench for ARM».
Источники (7) прикреплены.
Его отладка осуществлялась с помощью J-Link JTAG-отладчика, подключаемого к программатору через JTAG-разъем, установленный на боковой панели корпуса и подключаемого к материнской плате плоским кабелем.
JTAG-отладчик J-Link v9 был куплен на Алиэкспресс.
Драйвера, установленные вместе с «IAR Embedded Workbench for ARM», прекрасно с ним работают, и даже обновление родной прошивки от SEGGER прошло успешно.
Конструктивно программатор выполнен в виде восьми плат, расположенных одна над другой и соединенных между собой разъемами.
Самая нижняя плата содержит регулируемые DC-DC преобразователи для формирования нескольких напряжений, необходимых для работы с различными микросхемами памяти.
Над ней расположена материнская плата, на которой расположен ARM-микроконтроллер ATMEL AT91SAM9G20, SDRAM, SPI FLASH с прошивкой, ID-чип AE801 с указанием модели программатора и его серийным номером, микросхема USB-контроллера ISP1582, цифро-аналоговый преобразователь TLC7226 для управление напряжениями DC-DC преобразователей, ряда других микросхем и внешних разъемов для подключения блока питания и USB-кабеля для подключения к хосту.
Третья снизу плата содержит микросхему XILINX XC2S50E, которая управляет ножками микросхемы на адаптере, подключенном к программатору, во время процедур чтения/записи и т.п.
На остальных пяти платах расположены последовательно загружаемые регистры и сборки с подключенными к их выходам транзисторными ключами, через которые можно осуществлять питание определенных ножек микросхемы в адаптере, образованном преобразователями постоянного напряжения постоянного тока, включая «землю».
Поскольку регистры, управляющие транзисторными ключами, загружаются последовательно, а количество управляемых ветвей в адаптере может достигать 144, загрузка всех ключевых блоков требует значительного времени.
Поэтому с помощью транзисторных ключей на микросхему подаются только статические уровни: земля, питание и т.д. А с помощью XILINX - динамические: адреса, данные, CS, OE, RD, WR и т.д. Для движения вперед необходимо было как минимум иметь инструмент для создания прошивки микросхемы XILINX XC2S50E и принципиальную схему если не всего программатора, то хотя бы его части ЦП - ПЛИС - адаптера - сокета.
.
Что касается IDE для XILINX Spartan-IIE, то мне пришлось использовать старую версию ISE 10.1, потому что.
все последующие IDE не поддерживают модель Spartan-II FPGA. С принципиальной схемой ситуация оказалась сложнее.
Для выявления интересующих нас соединений пришлось «снять» процессор U4 и XILINX U12 с плат, чтобы получить доступ к контактным площадкам под их BGA-корпусами, ведь не все из них имеют переход на обратную сторону.
|
|
Хост всегда выступает в роли хоста.
Через одну из конечных точек хост отправляет команду программисту и получает через него подтверждение, через другой они обмениваются данными друг с другом.
Парсинг команд от хоста в программном модуле осуществляется в методе USB_ReceiveBuf_EP1RX_Parse().
Пакет команд описывается структурой CMD_PROG и состоит из нескольких полей.
Если поле Cmd содержит 1, то это команда работы с чипом, а поле ProgProcNum в данном случае является индексом в массиве _progProcedures структур PROG_PROC, в одном из полей которого хранится указатель на выполняемую команду.
В каталоге с установленной программой «SUPERPRO 6100N» есть подкаталог «\lib».
Содержит файлы прошивки XILINX с расширением «*.
bin» для всех типов чипов, поддерживаемых программатором.
Среди них есть две универсальные прошивки для проверки контакта ножек микросхемы с контактами гнезда в адаптере.
Это «GENERAL~.
BIN» с внутренней затяжкой всех опор XILINX и «GENERAL_.BIN» с внутренней затяжкой вниз.
Проверка контакта выводов микросхемы осуществляется в методе SOCKET_CkeckInsertIC() программного модуля следующим образом.
Сначала в XILINX загружается прошивка «GENERAL_.BIN» и с ее помощью все выводы ПЛИС, подключенные к разъему, настраиваются как выходные и на них подается логическая «1».
Затем поочередно каждый вывод ПЛИС перенастраивается на вход, с него считывается логический уровень, а затем на этот вывод снова выводится «1».
Если ножка микросхемы имеет электрический контакт с соответствующей ножкой гнезда, то с нее следует считать «1» (через внутренние защитные диоды микросхемы со всех остальных ножек).
А если контакта нет, то из-за того, что все выводы ПЛИС подтянуты к земле, с этого входа будет читаться «0».
После этого прочитанный таким образом массив логических уровней отправляется на хост и обрабатывается там.
Далее заданная операция продолжается, либо выдается сообщение о неконтакте соответствующих ножек микросхемы в гнезде.
После успешного прохождения этого теста хост отправляет программисту прошивку для XILINX, соответствующую чипу, установленному в адаптере.
Компиляция программы для ПЛИС в ISE 10.1 (последовательное выполнение процедур синтеза (Synthesize), реализация проектирования (Implement Design) и генерация файлов для программирования (Generate Programming File)) создает бинарный файл конфигурации «xeltek.bin» размером 78756. байтов в каталоге проекта.
Для этого в свойствах процесса «Создать файл программирования» в окне «Процессы» в категории «Общие параметры» необходимо установить две опции: «Создать битовый файл» и «Создать бибарический файл конфигурации».
Неизвестно по каким причинам, но программисты из XELTEK решили модифицировать полученные таким образом файлы путем зеркальной перестановки всех битов в каждом байте.
Если по каким-то причинам вам необходимо таким образом «отзеркалить» собственный файл, или «отзеркалить» файл из каталога «\lib» в нормальное состояние, в ПО в меню «XILINX» для этого есть пункт « Bitstream Converter» (в конце имени к полученному файлу добавляется подчеркивание).
Для работы с чипом SDED5 на физическом уровне в программном модуле реализованы четыре метода: — PROGPROC_FLWRITE_IO_WORD() — запись слова (16 бит) по заданному адресу — PROGPROC_FLREAD_IO_WORD() — прочитать слово (16 бит) по заданному адресу — PROGPROC_hal_blk_write_nor() — записать один или несколько секторов (по 512 байт каждый) по заданному адресу — PROGPROC_hal_blk_read_nor() — прочитать один или несколько секторов (по 512 байт каждый) по заданному адресу Для взаимодействия с FPGA XILINX мы определили в нашей прошивке четыре регистра (порты ввода/вывода, описанные в файле «common.h» исходников ARM).
— _IC_ADDR (0x30000010) — _IC_DATA (0x30000012) - _IC_CTRL (0x30000014) // Выход: 0 - МЫ, 1 - 0E, 2 - CE, 3 - RSTIN; Пришло: 0 – ЗАНЯТО - _IC_ENABLE (0x30000016) // In:7 - Включить работу (0 - активна, 1 - все ножки на сокете в Z) _IC_ADDR и _IC_DATA — 16-битные регистры адреса и данных для программируемого чипа SDED5; _IC_CTRL — 8-битный регистр управления, через который устанавливаются сигналы WE, OE, CE и RSTIN и считывается сигнал BUSY из SDED5. В оригинальных программных модулях для связи с ПЛИС используются адреса от 0x30000000 до 0x3000000E. В качестве декодера адреса в программаторе установлен CPLD с надписью XELTEK, и поскольку его прошивка нам не известна, мы на всякий случай использовали адреса с 0x30000010, чтобы снизить вероятность неожиданных последствий от проявления кого-либо.
логика поведения else при использовании «стандартных» адресов.
После загрузки вашей прошивки в ПЛИС все выходы ПЛИС, подключенные к выводам микросхемы в сокете, находятся в состоянии Z, и чтобы начать с ней работать, необходимо включить разрешение, записав ноль в седьмой бит регистра _IC_ENABLE. .
Алгоритм работы всей системы может выглядеть следующим образом.
- После запуска ПО на хосте оно проверяет, есть ли подключение к программатору по USB и отображает соответствующее сообщение в статусной строке внизу главного окна.
(программатор можно подключить после запуска программы).
- Пользователь выбирает тип чипа, с которым он намерен работать.
- В базе данных (в простейшем случае просто в файле) выбранная микросхема соответствует типу необходимого адаптера и программисту отправляется запрос на тип установленного в ней адаптера.
- Программист запрашивает у адаптера его тип и отправляет эту информацию обратно на хост, где эта информация сравнивается с найденной в базе данных и если типы адаптеров совпадают, работа продолжается.
- Для каждого типа выбранной микросхемы программа должна отображать соответствующее меню с доступными для этой микросхемы командами (чтение, запись, проверка на чистоту, сравнение и т.п.
).
- При выборе любого пункта меню для работы с микросхемой в программатор подается соответствующая команда, после чего программатор сначала проверяет наличие электрического контакта между контактами гнезда и ножками микросхемы, а затем, в случае успеха, выполняет эту команду.
Нижняя граница
Перед нами не стояла задача интеграции программного модуля в исходное ПО, поэтому материал, описанный в этой статье, не претендует на полное решение.Мы надеемся, что представленная здесь информация будет полезна для определенной категории читателей, и в меру наших возможностей и свободного времени мы постараемся ответить на ваши вопросы.
Спасибо за Ваш интерес!
Ресурсы
1. PDF — Встроенный флэш-накопитель mDOC H3 (EFD) со встроенным программным обеспечением для управления флэш-памятью TrueFFS 2. PDF — Программирование флэш-памяти mDOC H3 с помощью программаторов устройств Dataman 3. PDF — Программное обеспечение_Утилиты_TrueFFS_7.1 4. Программное обеспечение управления Dataman — PG4UW 5. Реализация драйвера mDOC H3 для Linux (работоспособность не проверялась) 6. Исходные файлы программиста для хоста (Visual Studio 2017).7. Исходные файлы программного модуля (IAR Embedded Workbench for ARM v8.30.1).
8. Исходные файлы для FPGA XILINX XC2S50E (XILINX ISE 10.1).
Теги: #Программирование микроконтроллеров #обратное проектирование #mDOC H3 #TrueFFS #SDED5 #DOCSHELL #XELTEK SuperPro 6100
-
Антивирус Для Понимающих
19 Oct, 24 -
Спокойной Ночи? Дети!
19 Oct, 24 -
Firefox 3: Выпущен!!!
19 Oct, 24 -
Особенности Национального Маркетинга
19 Oct, 24