ЭФО предлагает со своего склада новую серию преобразователей интерфейсов USB UART компании FTDI FT232RNL-REEL
РадиоЛоцман - Все об электронике

Postal programmer — «умный» программатор

Журнал Ремонт&Сервис, февраль 2015

Валерия Ершова (г. Москва)

Видеопроцессоры фирмы Genesis Microchip Inc. (далее —Genesis) используют для хранения программного кода внешнюю Flash-память. Основная область применения этих процессоров — компьютерные мониторы и теле- визоры. Процессоры ранних выпусков используют параллельную Flash-память (general purpose), а более новые —последовательную SPI-Flash (8 выводов). В обоих случаях программно-аппаратный комплекс Postal предоставляет возможность работать внутрисхемно с памятью видеопроцессоров через доступные внешние разъемы (VGA или HDMI), не вскрывая аппарат.

Технология правильного хранения аккумуляторов и батареек по рекомендациям FANSO и EVE Energy

Общие сведения

Фирма Genesis Microchip Inc. была поглощена в 2007 году ST Microelectronics, однако в эксплуатации находится много устройств на выпущенных ранее процессорах, и они продолжают поставляться со статусом NRND (не рекомендовано для нового дизайна). Тем не менее, производство чипа GM5621 находится в активном статусе [1]. Несмотря на солидный возраст, чипы от Genesis великолепно обрабатывают изображение. Но нас интересует исключительно ремонт устройств, использующих эти процессоры. В данном случае имеется в виду ремонт, связанный со сбоями программного обеспечения (ПО).

Postal programmer — «умный» программатор
Рисунок 1. Внешний вид процессора
фирмы Genesis.

Процессоры от Genesis имеют весьма разную архитектуру. Ядро процессора (обычно оно встроено в чип) может быть типа 8051 или 80186, также на чипе имеется ЭСППЗУ (EEPROM) с базовым ПО, позволяющее иногда не использовать внешнюю Flash память, а только EEPROM с конфигурацией.

Такой режим называется «standalone», то есть чип работает как бы сам. Второй режим называется «User» (режим пользователя), выбор этого режима происходит после подачи питания на процессор. Используя встроенную память, чип проверяет на соответствие определенные данные во внешней памяти (сигнатуру) и выбирает соответствующий режим. Если сигнатура подходит, то происходит старт с нулевого адреса внешней памяти Flash. Программные процедуры, обеспечивающие перезапись внешней памяти Flash (а именно это нам и нужно), имеются в обоих режимах, однако нетрудно догадаться, что работа с режимом «standalone» будет более предсказуема. Тем не менее, трудности все равно возникают.

Краткое описание оригинальной программы фирмы Genesis

Оригинальная программа от производителя GProbe работает под ОС Windows и предназначена для чтения и записи внутренних регистров чипов Genesis с использованием различных коммуникационных интерфейсов. Физически это соединение параллельного или последовательного порта компьютера с соответствующими выводами чипа через схему согласования уровней сигналов. Программно же используются специализированные протоколы, основанные на интерфейсе I2C и стандартном последовательном протоколе на разных скоростях.

Postal programmer — «умный» программатор
Рисунок 2. Внешний вид платы монитора на
процессоре Genesis
.

При установке и запуске программы GProbe возникает ложное впечатление ее «мощности», которое создается большим количеством ручных настроек и разных окон с информацией. Однако на самом деле она позволяет посылать лишь 18 команд и использовать пакетные файлы, заранее написанные на придуманном макроязыке (оперируя тем же количеством команд). Причем все параметры необходимо установить вручную, а для этого еще надо овладеть «фирменной» терминологией, прочитав довольно большое описание (User Guide). Практически, для записи внешней Flash-памяти необходим пакетный файл, подстроенный вручную под конкретный чип (и еще понадобится драйвер для загрузки в чип). Программатор Postal совместим с этими файлами и имеет лучший функционал, поэтому подробное описание процесса внутрисхемного программирования будет исходить из его возможностей.

Программатор Postal как замена для GProbe

На момент написания статьи работа с чипами Genesis поддерживается только версией для параллельного порта. Подключение программатора Postal к чипу происходит по I2C-совместимому протоколу, обычно через соответствующие контакты разъема VGA. Для выбора режима сначала нужно в группе «Select Mode» выбрать «Philips», затем нажать кнопку «Settings» и в диалоге настройки выбрать «Genesis via I2C». В выпадающем меню обычно выбирают «Genesis FLASH», т.к. команды доступа к EEPROM, как правило, не работают на новых чипах. Можно поставить галку «Stop UOC», если на этой же I2C-шине находится процессор фирмы Philips, тогда будет подана команда ввода чипа Philips в отладочный режим, иначе он помешает обмену с чипом Genesis. Далее проверяют правильность установки порта и скорости и возвращаются к главному экрану программы кнопкой OK.

Разными чипами Genesis используются различные протоколы (I2C-совместимые), программатор Postal определяет их автоматически, также можно заранее выбрать протокол вручную кнопкой «Status». Далее для работы с чипом нажимают кнопку «Set ISP». Логика работы этой кнопки в случае чипов Genesis довольно сложна и требует детального описания. Сначала проверяется ответ на I2C-адрес 6E с контролем его передачи. Если операция неуспешна, то делается вывод, что чип обесточен и нужно ожидать подачи питания, при этом в цикле подается команда «Force Standalone», чтобы «поймать» чип на раннем старте. Если чип Genesis исправен, то этот шаг всегда успешен.

Далее подается команда «Debug On» с попыткой определить протокол. Если с первого раза не получилось, делается попытка уточнения протокола и снова подается команда «Debug On». Далее, независимо от результата (чип уже может быть в отладочном режиме), производится попытка чтения сигнатуры чипа (на самом деле для разных чипов разные команды и разные регистры). Если попытка неуспешна, то выполняется останов, иначе по таблице сигнатур устанавливаются необходимые начальные данные. После этого делается попытка загрузки исполняемого кода в ОЗУ чипа (в терминологии Genesis — драйвер), затем старт кода. Если
сигнатура неизвестна, то загружается код для чипа с SPI-Flash (т.к. их много разновидностей). Результат операции выводится в окно лога.

Если операция успешна — чип находится в ISP-режиме и готов к работе с внешней памятью Flash. При этом кнопка «Status» меняет свое назначение и можно вручную выставить размер (обычно для чтения). Также замечено, что загружаемый исполняемый код не всегда подходит для чипа. Например, один драйвер разрешает только чтение, а другой — только запись. Чтобы загрузить альтернативный вариант, нужно на странице настроек «Misc» выбрать желаемый номер из выпадающего списка «GNSS, IAP alter» и полностью повторить подключение.

Очень часто загружаемый код работает только на запись, поэто- му верификация также невозможна, поскольку делается обратны чтением. Многие команды (в том числе и для проверки контрольных сумм) просто не реализованы программистами фирмы Genesis и существуют только в документации.

Postal programmer — «умный» программатор
Рисунок 3. Вид окна программы в режиме Genesis.

Программатор Postal способен также обрабатывать пакетные файлы от GProbe (batch в терминологии Genesis). Для этого файл должен иметь расширение «.txt», в этом случае он открывается в стандартном диалоге, и программа спросит, нужна ли обработка файла как пакетного от GProbe. Если ответ утвердительный, то файл обрабатывается встроенным парсером построчно, выполняя команды с параметрами. Однако, несмотря на совместимость с оригинальным форматом, присутствуют и различия в синтаксисе при написании команд пакетного файла. Ниже приводится полное описание синтаксиса, используемого программатором Postal.

Перед открытием пакетного файла сначала желательно вручную установить протокол кнопкой «Status», иначе будет запущена процедура его автоматического определения (то есть будут посылаться лишние команды, которые могут повлиять на результат при нестандартных условиях).

Далее обработка идет построчно, комментарии в файле могут быть после символов «//», такая строка дальше не обрабатывается, пропис- ные буквы приводятся к строчным.

Всего из строки считываются 4 подстроки, то есть сама команда и 3 возможных параметра к ней, разделенные пробелами. Если строка начинается с «0x»,
то предполагается команда «regread», либо «regwrite» — если обнаружен знак «=» без пробелов и найден параметр для записи.

Название команды выводится в окно лога. Далее название команды последовательно сверяется со следующим списком команд, который программа умеет выполнять:

  • «connect» — выполняется, но не имеет смысла для программатора Postal, т.к. протокол ставится заранее;
     
  • «delay» — выполняется Sleep на заданное число миллисекунд (мс);
     
  • «setdelay» — использует два параметра: первый — «короткий» тайм-аут для установки пауз между операциями, второй — длинный таймаут, ожидание, например, при стирании (устанавливается в мс);
     
  • «setbuffer» — использует 2 параметра: первый — начальный адрес в ОЗУ чипа, второй — размер буфера в байтах. Команда не посылается в чип, а просто устанавливает параметры для других команд;
     
  • «forcesa» — в отличие от GProbe Postal посылает команду «force standalone» до успеха или таймаута, одиночная команда не имеет смысла;
     
  • «regread» — один параметр адреса регистра, результат выводится в окно лога;
     
  • «regwrite» — 2 параметра: первый — адрес регистра, второй — данные для записи;
     
  • «ramwrite», «ramwrite2» — в качестве параметра служит имя файла, если файл имеет расширение «.hex», то адрес старта содержится в нем, иначе еще один параметр — адрес ОЗУ, с которого начнется загрузка файла напрямую (как «.bin»). В основном используется «.hex», т.к. запись выполняется обычно фрагментами в разные адреса без стирания промежутков (из-за чего невозможно конвертировать в бинарный файл для этой цели);
     
  • «ramread» — холостая команда, не используется;
     
  • «debugon» — включение отладочного режима;
     
  • «debugoff» — выключение отладочного режима;
     
  • «reset» — может иметь один параметр, без параметра используется старый набор регистров. Выполняется программный сброс без потери содержимого ОЗУ;
     
  • «flashid» — выполняется строго по спецификации, но никогда ничего нужного не показывает. Результат выводится в окно лога;
     
  • «flashcrc» — имеет 2 параметра: первый — начальный адрес (в адресном пространстве чипа), второй — размер области для подсчета контрольной суммы. Предположительно, команда не работает (не проверялась). Результат выводится в окно лога;
     
  • «flasherase» — без параметров, чип в окно лога отвечает либо «OK», либо «Failed»;
     
  • «run», «runcode» — один параметр, стартовый адрес;
     
  • «appstest», «appstestparam» — это очень интересные команды, они предназначены для режима «User» (реализуются производителем конечного продукта). Например, с их помощью можно внутрисхемно перезаписать EEPROM, если знать как. Команда «appstestparam» используется только в случае, если требуется много параметров для команды «appstest». Для команды «appstestparam» используется 2 параметра: первый — «ParamIndex», второй — «ParamValue». После этого (отдельной строкой) подается команда «appstest» с одним обязательным параметром «ParamIndex», однако параметров у “appstest” может быть 2 или 3 — тогда сначала автоматически подается «appstestparam», где второй параметр (строки от «appstest») используется в качестве «ParamValue», «ParamIndex»=1. Если имеется еще параметр, то подается «appstestparam», где третий параметр используется в качестве «ParamValue», «ParamIndex»=2. После этого автоматически подается команда «appstest» с параметром «ParamIndex» (первый параметр после самой команды);
     
  • «loaddriver» — устаревшая команда, использующая один параметр — имя файла с расширением «.dev». Работает аналогично команде ramwrite для hex. Файл «.dev» содержит несколько блоков с заголовком, в котором есть адрес загрузки в чип и размер последующих бинарных данных (самодельный аналог hex-файла). Сама загрузка в чип происходит командой ramwrite для бинарного режима;
     
  • «i2cread» — не реализовано и не работает (нигде);
     
  • «i2cwrite» — то же (не поддерживается чипами);
     
  • «nvramread» — устаревшая команда, имеет 3 параметра: первый равен нулю (начальный адрес для чтения всегда ноль), второй — сколько читать в байтах, третий — имя файла, куда записать. Фактически, команда аналогична кнопке «Read» в режиме Genesis EEPROM;
     
  • «nvramwrite» — устаревшая команда, имеет 2 параметра: первый — имя файла с данными для записи (только бинарный формат), второй всегда равен нулю (начальный адрес для записи), размер записи определяется размером файла. Фактически, команда аналогична кнопке «Write» в режиме Genesis EEPROM;
     
  • «flashread» — имеет 3 параметра: первый — адрес в адресном пространстве чипа, с которого начнется чтение (нужно знать карту памяти чипа, куда что отображается). Второй параметр — сколько нужно прочитать. Третий — имя файла, куда будет записываться прочитанное, если задано расширение “hex” — бинарные данные будут соответственно конвертированы;
     
  • «filecrc» — имеет 1, 2 или 3 параметра: первый — имя файла для обработки, второй (если есть) — смещение в файле, с которого начинать, третий (если есть) — сколько обсчитывать (по умолчанию — до конца файла);
     
  • «flashwrite», «fastflashwrite» — имеют 1 или 2 параметра: первый — имя файла для записи, второй (необязательный) — адрес в адресном пространстве чипа, с которого начнется запись. Если второго параметра нет, то используется адрес из hex-файла, либо предустановленный по умолчанию, в любом случае адрес старта показывается в логе. Если второй параметр установлен — то он перекрывает полученный из hex-файла адрес. Файл записывается целиком, но не весь сразу, а порциями, установленными заранее командой «setbuffer».

Таким образом, программатор Postal полностью поддерживает пакетные файлы от GProbe («batch» в терминологии Genesis). Лишние строки в файле (если оригинальный batch) можно закрыть знаком комментария «//».

Зачем же писать пакетные файлы, если можно просто нажать кнопку в программе (программатор Postal имеется в виду)? Дело в том, что выбираемый программой встроенный алгоритм может не подойти к конкретному чипу, тогда допустимо написать маленький пакетный файл и использовать его вместе с кнопками (либо автономно). Например, подключение в ISP проходит успешно, но чтение происходит не с того адреса (предустановленный не подходит). Тогда отдельно для чтения можно запустить файл, состоящий всего из одной строки. Можно также комбинировать разные режимы, например, в режиме Genesis FLASH (при нажатии кнопки «Set ISP») код  (драйвер) загружается в чип, а в режиме Genesis EEPROM — нет, то есть можно загрузить свой, написав текстовой файл и подав необходимый файл с кодом. На всякий случай уточним, что программатор Postal хранит загружаемый код для чипов Genesis в теле программы, в случае использования пакетного файла для загрузки кода в ОЗУ нужно иметь внешний файл («драйвер»).

Для упрощения можно считать, что программатор Postal (программа) для чипов Genesis выполняет некий пакетный файл внутри себя (отличие — автоматические действия с обработкой ошибок). В общем случае последовательность действий такая — сначала чип Genesis переводится в отладочный режим (команда «debugon»), затем в ОЗУ загружается код для работы с flash (иначе команда «flashwrite» не работает), после этого происходит работа с внешней памятью flash. В процессе также подаются команды для установки регистров, если необходимо для конкретного чипа.

Пример пакетного файла Genesis:

###########//adjusting delay may make batch
file work!!!
debugon
SetBuffer 0x2000 0x800
delay 2000
Reset 0
//!!!Enable following delay if batch
file failed at above position
//delay 500
// Move the stack to the end of
RAM area to make room for ISP
driver
RAMWrite reset_stack_V11.hex
Run 0x500
delay 100
// SPI flash driver
RAMWrite isptemp_spi_V14.hex
Run 0x500
delay 100
//!!!Enable both setDelay before and
after flashErase if batch file failed
//SetDelay has the same capability
which set short and long delay
timeout in gProbe connection
configuration dialog
//syntax: setDelay shortTimeout
LongTimeout
SetDelay 1000 9000
FlashErase
SetDelay 1000 3000
// Change this line to point to a file
in a different location, if needed
fastFlashWrite D:Mendel
mendel17.hex
// to reset the monitor after
programming the flash using DDC2BI
ONLY:
// Un-comment the following three
lines (PLEASE — FOR DDC2BI PORT
SELECTED ONLY)
//0x8000=1
//0x8003=0
//0x8027=1

Информация по структуре и командам пакетных файлов Genesis может быть полезна при нестандартной ситуации, а также для энтузиастов и особенно при ремонте большого количества однотипных аппаратов на базе Genesis, требующих перепрограммирования микросхемы flash. Если же сложностей не возникло, то физическое подключение программатора и работа с файлами происходят стандартно, так же, как описано в предыдущих статьях (например, в [3]).

За всеми будущими улучшениями программы можно наблюдать на техническом форуме МОНИТОР [2].

В следующих номерах Р&С будут рассмотрены другие возможности и режимы работы программатора Postal3 и версии для параллельного порта (LPT) .

Интернет-источники:

  1. st.com
  2. monitor.net.ru/forum
  3. Валерия Ершова. Postal programmer — «умный» программатор. Прошивка ТВ процессоров фирмы MStar и восстановление ПО на практических примерах. — Ремонт & Сервис, № 12, 2014.
Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя