ПредысторияПациент АКИП В7-78/1 поступил с клиническими симптомами повреждения аналоговых узлов:
1) бессистемное возникновение ошибки 614 при сокращённом самотестировании в момент включения питания;
2) ошибки 604 и 622, возникающие при полном самотестировании из активного режима 4-х проводного измерения сопротивления.
Функции измерения и управления сохранены.
В анамнезе: следы ремонта в виде замены электролитического конденсатора в источнике питания, постановка гарантийной пломбы неизвестной организацией.
Первичный осмотр Наличие следов износа и небольших повреждений на резиновых бамперах и ручке. На защитной плёнке дисплея маркером нарисован синий крест, намекающий на тщетность усилий ремонтников.
Мультиметр откликается на команду *IDN? строкой «Prist,V7-78/1,TW00005768,03.02-01-04». Дата сборки прибора – сентябрь 2009 г., дата первой и последней калибровки – январь 2010 г. Версия ПО и число проведённых калибровок указывают на то, что прибор после выпуска не обслуживался.
Анализ ошибок самотестированияКод 614: DC 1000V zero failed This test configures to the 1000V dc range with no input applied. A 20ms ADC measurement is performed and the result is checked against a limit of 0V ± 5 mV.
Предметом допускового контроля по коду 614 является ток утечки в цепи высокопотенциального входа мультиметра при измерении постоянного напряжения. Критерием отказа служит абсолютная величина силы тока утечки, составляющая 500 пА и более. Проведённая с помощью контрольного мультиметра В7-78/1 (выпуск ноябрь 2013 г., ПО 03.20-01-04) имитация возникновения утечки подтвердила пороговое значение критерия.
При условии работоспособности прибора в режиме измерения напряжения наиболее вероятными причинами отказа с кодом 614 являются:
1) повышенные утечки затвора одного или обоих MOSFET ключей Q203, Q204, коммутирующих общий вывод высоковольтного входного делителя напряжения (см. рис.);
2) утечки по печатной плате, вызванные повышенной влажностью или несоответствующими условиями хранения прибора.
Причина №1 надёжно диагностируется переключением мультиметра в режим измерения напряжения постоянного тока и сопоставлением показаний в 2-х конфигурациях: а) с отключенными соединительными кабелями и установленным входным сопротивлением 10 МОм; б) с подключенным ко входам HI-LO резистором с номиналом 10 МОм и установленным входным сопротивлением >10 ГОм. Различие показаний в 10 и более раз указывает на неисправность ключей Q203, Q204.
Результаты проведённого испытания показали, что показания мультиметра находятся в пределах одного порядка. После суточной наработки при температуре воздуха 29–30°С и относительной влажности 18–20% входной ток составил 50–55 пА в конфигурации (а) и 75–80 пА в конфигурации (б). При дальнейшей наработке ток стабилизировался вокруг указанных значений. Это даёт основание считать, что отказ с кодом 614 в действительности является сбоем, вызванным несоответствующими условиями хранения прибора. После наработки ошибка 614 в ходе самотестирования более не возникала.
Код 604: A/D noisy test failed This test configures to the 10V dc range with the internal 0V. A 20ms ADC measurement is performed and the result is checked against a limit of 0V ± 20uV
Критерием отказа по коду 604 является выход поля рассеяния выборки измеренных значений АЦП с короткозамкнутым входом за допустимый диапазон, который в относительных величинах составляет 0±2 ppm от предела измерения. Типовое значение поля рассеяния исправного прибора при времени интегрирования 1 PLC составляет приблизительно ±0,5 ppm. Для его измерения вход буфера АЦП отключается селектором каналов U502 от источников сигнала и замыкается на аналоговую общую шину AGND (см. рис.). Отсутствие напряжения на входе АЦП позволяет исключить из рассмотрения ИОН.
Смещение центра группирования и выход размаха серии последовательных измерений за критические значения являются признаками, указывающими на одну из неисправностей, в т.ч.:
а) импульсные или периодические помехи по цепи питания АЦП;
б) выход из строя буфера АЦП в виде ОУ U901 и U903;
в) выход из строя FET ключей формирования разрядных токов и сброса интегратора;
г) выход из строя ОУ интегратора, предусилителя или компаратора.
Неисправности (б)–(г) критичны для выполнения всех функций измерения аналоговых величин и сопровождаются множественными отказами при самотестировании, чего не наблюдается в текущей ситуации. Таким образом, рабочей гипотезой, требующей дальнейшей проверки, остаётся пункт (а).
Код 622: DC 10V reference failed This test configures to the 10V dc range with 5V input applied. A 20ms ADC measurement is performed and the result is checked against a limit of 4.55V ± 0.15mV.
Критерием отказа по коду 622 является выход за границы допуска результатов измерения при подключении к АЦП контрольного источника. В качестве последнего используется стабилизатор напряжения U2202 типа LP3964EMP-ADJ с уставкой +4,55 В, который при работе прибора задействован для питания обмоток реле в момент переключения. Выбор контрольного источника в совокупности с широким полем допуска на результаты измерения определяют цель контроля – подтверждение наличия выходного напряжения ИОН VRE310J с номинальным значением 10 В.
Отказ по коду 622 может быть вызван следующими причинами:
а) импульсные или периодические помехи по цепи питания ИОН;
б) импульсные или периодические помехи по цепи источника питания реле +4,55 В;
в) неисправность микросхемы ИОН.
Измерение напряжения ИОН контрольным вольтметром позволило исключить пункт (в) из дальнейшего рассмотрения.
Вышеприведенный анализ показывает, что наиболее вероятная локализация неисправности, вызывающей отказы с кодами 604 и 622, ограничена источником питания аналоговых узлов мультиметра. Источник питания включает в себя вышеуказанный стабилизатор +4,55 В для питания реле, а так же стабилизаторы основных каналов +/–18 В, из которых в свою очередь формируются +/–15 В для узла True-RMS-преобразователя.
Проверка выходных напряжений и пульсаций стабилизаторов, а так же ёмкости и ESR конденсаторов в фильтрах и обвязке не выявила никаких неисправностей. Выходное напряжение канала +4,55 В составило 4,57 В (на контрольном мультиметре – соответственно 4,54 В), что с большим запасом входит в допускаемые пределы. Таким образом, начальная гипотеза подтверждения не нашла.
Далее, чтобы получить интегральную оценку технического состояния узлов прибора было принято решение провести серию типовых испытаний, результаты которых сравнить с контрольным мультиметром.
Типовые испытанияИзменение показаний в ходе прогрева прибора при измерении напряжения меры 10 В. Контрольный мультиметр показывает несколько меньшую амплитуду дрейфа, однако как показали собственные исследования мер напряжения Thaler, для них характерен существенный разброс температурного коэффициента напряжения, что вполне объясняет обнаруженное различие в скорости выхода прибора на рабочий режим.
НЧ шум при измерении меры напряжения 10 В на базе LTZ1000. Различия между приборами несущественны.
Временная нестабильность при измерении сопротивления меры 10 кОм с контрольным мультиметром не сравнивалась. Однако полученный размах показаний в 2-3 ppm при времени интегрирования 10 PLC вопросов не вызывают.
Нелинейность показаний прибора при измерении напряжения переменного тока 10 В и 1 В в диапазоне частот от 3 Гц до 1 МГц. В качестве контрольного прибора использован 8,5-разрядный эталонный мультиметр Solartron 7081. К результатам вопросов нет. Полученные абсолютные значения (на рис. не показаны) не выходят за пределы допускаемой погрешности В7-78/1.
Интегральная нелинейность измерения на базовом пределе 10 В оценивалась по методу наименьших квадратов. В качестве источника калиброванных напряжений использовался калибратор DC-Cal Mini. Однако, поскольку собственная нелинейность калибратора составляет величину до 1 ppm, выходное напряжение в контрольных точках измерялось с помощью мультиметра Solartron 7081 и уже далее результаты передавались в расчётную методику. Нелинейность испытываемого В7-78/1 оказалась существенно меньше таковой для контрольного В7-78/1.
Интегральная нелинейность измерения на пределе 1000 В оценивалась по аналогии с предыдущим испытанием. Нелинейность испытываемого В7-78/1 оказалась так же существенно меньше таковой для контрольного В7-78/1, что говорит об исчезающее малой погрешности от саморазогрева входного высоковольтного делителя и несущественных входных токах утечки.
В заключении проводились испытания на температурный дрейф показаний при измерении сопротивления на пределах от 100 Ом до 1 МОм. Диаграммы наглядно демонстрируют отсутствие аномалий в температурных коэффициентах сравниваемых мультиметров.
В целом типовые испытания так же не позволили обнаружить ни единого признака, указывающего на причину возникновения отказов с кодами 604 и 622. Однако есть ряд обстоятельств, которые показались подозрительными. Во-первых, отказы происходят только в том случае, когда текущим режимом прибора является 4-х проводное измерение сопротивления. На остальных режимах отказов в ходе самотестирования не обнаруживается. Во-вторых, сходная ситуация описывается в файле истории изменений ПО мультиметра Keithley 2100, который, как и АКИП В7-78/1, так же является OEM версией модели M3500A компании PICOTEST:
Resolved issues:
Symptom: When the user enters self-test from the front panel, the instrument generates Error +604.
Resolution: The error is no longer generated when the 2100 performs a self-test.
Symptom: When the user selects the FREQ function, the Model 2100 would generate Error +603.
Resolution: The error is no longer generated when the 2100 performs a self-test.
Получается, что отказы могут быть ложно положительными по причине ошибок в ПО мультиметра. Таким образом можно ожидать, что обновление ПО решит выявленную проблему, как это произошло в случае с Keithley 2100.
Обновление ПО мультиметраВсего в мультиметре имеется три микроконтроллера, ПО которых доступно для обновления. Основным является расположенный в «заземлённом» блоке управления (Main Control Circuit) 16-разрядный DSP TMS320VC5047 (далее DSP). В его адресном пространстве так же расположены:
а) SRAM CY7C1021CV33 64Kx16 для хранения текущих данных и буфера результатов измерений;
б) флэш память MX29LV400TTC-70 512KB для хранения кода управляющей программы мультиметра, калибровочных констант, настроек по-умолчанию и др.
в) периферийный USB-контроллер с параллельной шиной PDIUSBD12;
г) контроллеры плат расширения, в том числе GPIB NAT9914 и RS232.
ПО загружает в память DSP bootloader из флэш памяти. DSP осуществляет контроль всех функций прибора, интерпретацию команд приборного интерфейса, обмен данными с вспомогательными микроконтроллерами и пр.
К вспомогательным микроконтроллерам относятся 16-разрядный MSP430F1232 (далее MSP430), находящийся в изолированном аналоговом блоке и решающий низкоуровневые задачи аналого-цифрового преобразования, управления ключами, реле и пр., а так же 8-разрядный MC68HC908GR4CFA (далее MC68), обслуживающий кнопочную лицевую панель, ВЛИ индикатор и 4-проводной двунаправленный интерфейс к основному микроконтроллеру.
Номера версий ПО всех микроконтроллеров можно узнать после синтаксического анализа строки, возвращаемой прибором по команде интерфейса *IDN?: «Prist,V7-78/1,TW00005768,03.02-01-04». Строка представляет собой четыре лексемы, изолированные запятыми: «Prist» – наименование компании-производителя, «V7-78/1» – транслитерированное наименование модели прибора, «TW00005768» заводской серийный номер прибора, «03.02-01-04» – соответственно версии ПО DSP (03.02), MC68 (01) и MSP430 (04).
Наиболее критичным является ПО DSP. Для получения обновлённой версии ПО было составлено письмо в АО «ПриСТ», после чего специалист сервисного центра оперативно прислал в ответном E-mail комплект файлов для прошивки. Запущена утилита для загрузки ПО в прибор и… и ничего. Утилита-загрузчик выдала сообщение о невозможности обновления ПО и завершила работу.
Детективное расследованиеКомплект файлов для прошивки состоял из Readme.pdf с краткой инструкцией, утилиты-загрузчика DmmUpdateV2.2-Prist.exe и 2-х файлов: Prist_5407_03.36.pak и 1232_004.bin – соответственно для обновления ПО DSP и MSP430. Версия ПО MSP430 в приборе не отличалась от текущей версии ПО в обновлении, поэтому в дальнейшем, ни MSP430, ни MC68 я не касался.
Пытаясь понять причину отказа при обновлении ПО я перво-наперво отбросил гипотезу системной несовместимости. Отказ стабильно воспроизводился как в 32-разрядной Windows 8, так и в 64-разрядной Windows 10 с разными версиями NI VISA Runtime библиотек.
Далее, приняв во внимание то, что приборы для АКИП производит тайваньская компания PICOTEST по OEM контракту, я собрал и проанализировал все доступные и недоступные (для простых пользователей) версии ПО для 3-й аппаратной ревизии мультиметра [1]. Поскольку PICOTEST M3500A абсолютно идентичен в аппаратном плане АКИП В7-78/1, для обновления ПО последнего можно использовать прошивки M3500A. Кстати, последняя опубликованная на официальном сайте прошивка имеет версию 03.35-01-04, т.о. PICOTEST заботится об OEM партнёрах даже лучше, чем о своих пользователях
К моему удивлению штатная прошивка 03.02 успешно обновилась до 03.04, а затем и до 03.06, 03.07 и так до 03.10. Однако попытка обновить до следующей версии 03.12 или любой другой вплоть до 03.35 стабильно заканчивалась даже не начавшись, при чём с одной лишь уже до боли знакомой фразой «Firmware Update Not Possible (DSP)». Т.о. версии с 03.02 до 03.10 чем-то принципиально отличались от всех последующих.
Таких отличий я обнаружил два:
1) поменялся программный код утилиты-загрузчика DmmUpdate, версия которой увеличилась с 2.09 до 2.2.
2) возрос размер pak-файла, в котором хранится ПО для загрузки в прибор.
К слову, pak-файл – это не архив, а простейший контейнер, в котором после общего заголовка с именами образов и их абсолютными смещениями размещаются сами бинарные образы ПО со своими индивидуальными заголовками. Сравнение версий показало, что в pak-файлах версий 03.02…03.10 содержится один бинарный образ соответствующей версии ПО, в то время, как во всех в pak-файлах более новых версий содержится 2 образа: текущей версии и версии 03.02. Как показали дальнейшие эксперименты, версия 03.02 загружается в прибор вместе с основной и ей передаётся выполнение bootloader-ом в случае сбоя при запуске основного ПО (например, после неудачного обновления). В этом случае при включении мультиметра на дисплее высветится флаг ошибки ERR, в журнал ошибок запишется «Firmware Version Error», а мультиметр продолжит работать под управлением ПО версии 03.02.
Попытки дизассемблирования образов не привели к успеху: код в основном бессмысленный и разбит мусорными вставками. Бинарные образы ПО не содержат никаких человекочитаемых строковых констант, т.о. как минимум зашифрованы или обфусцированы. Признаки сжатия даже с помощью RLE отсутствуют. Заголовки образов зашифрованы с помощью однобайтового XOR, однако попытки подобрать брутфорсом ключ для остального тела образа оказались безуспешны.
Далее вооружившись USB сниффером и отладчиком я выяснил, на какие недокументированные команды интерфейса откликается мультиметр при изменении данных во флэш и обновлении прошивки. Первой задачей занимается специальная программа-конфигуратор PT-SET, которая упомянута только в утекшем в Сеть сервисном руководстве и официально не распространяется [3, 4].
Программа PT-SET позволяет считать из мультиметра блок данных, отвечающих за настройки по-умолчанию, изменить эти настройки и снова записать их во флэш память мультиметра. Чтение настроек осуществляется по недокументированной команде SYSTEM:INIT:READ?, которая возвращает блок данных из 688 байт и вновь устанавливает локальный режим работы. Данные – в основном битовые флаги и численные величины, но есть и одна текстовая строка, с помощью которой прибор откликается на *IDN? в режиме совместимости. Отмечу, что строка состоит из двухбайтовых символов и хранится в незашифрованном виде.
После того, как пользователь даёт команду за запись изменённых настроек во флэш память прибора, программа выполняет ещё две недокументированные команды: SYSTEM:INIT:SAVE и SYSTEM:UPDATE. Первая из них никак внешне не проявляется. Вторая – переводит прибор в режим обновления данных во флэш памяти. При этом гаснет дисплей, блокируется клавиатура, USB устройство отключается с кодом «USB surprise removal» и подключается заново. После этого программа блоками передаёт заранее подготовленный и сохранённый в файл PT_SET.bin некий двоичный образ, размером 88586 байт. Образ создаётся на лету встроенным в программу линкером из тех самых 688 байт собственно настроек и какого-то постоянного фрагмента кода примерно в пару кибибайт. Как выполняется линковка, по каким адресам находятся блоки и что это за код – при желании можно уточнить с помощью реверса самой первой версии утилиты PT-SET [4]. Однако это выходило за рамки решаемой задачи.
Обновлении прошивки осуществляется уже упомянутым загрузчиком ПО DmmUpdate. Применительно к старой версии DmmUpdate 2.09 алгоритм работы в общих чертах следующий:
1) Проверяется USB VID:PID 164E:0DAD.
2) Читается серийный номер прибора командой CAL:SEC:SERIAL? и отображается в окне программы.
3) Командой L0 отменяется режим совместимости, при котором оригинальная строка идентификации заменяется на строку пользователя.
4) Запрашивается строка идентификации по команде *IDN?
5) Выполняется синтаксический разбор строки и сверяются номера текущей версии ПО и версии ПО в файле с обновлением. Если загружаемая прошивка новее текущей, обновление разрешается.
6) Прибору передаётся уже знакомая нам недокументированная команда SYSTEM:UPDATE, после чего USB устройство переподключается, гаснет дисплей и блокируется клавиатура, а программа поблочно передаёт образ(ы) ПО из выбранного pak-файла. При этом каждый образ передаются один к одному, без расшифровки.
Алгоритм работы новой версии DmmUpdate 2.2 остался тем же, за исключением введения одной дополнительной проверки. После синтаксического разбора строки-отклика на команду *IDN? сверяются не только номера версий ПО, но и наименование модели прибора. Строка-образец для сравнения с наименованием модели хранится в зашифрованном виде в самом начале заголовка бинарного образа ПО в pak-файле. Если строки не совпадают, обновление ПО запрещается.
На скринах приведены уже расшифрованные эталонные строки из прошивок PICOTEST и АКИП:
Почему не загружались прошивки PICOTEST стало понятно. Однако почему не получилось загрузить самую новую версию 03.36, полученную в сервисном центре АО «ПриСТ», ведь она рассчитана именно на мультиметр АКИП? Причина банальна, и я о ней уже писал 7 лет назад – трудности русификации. Кто-то не слишком сообразительный решил на ходу изменить строку идентификации, чтобы она была визуально неотличима от правильного написания модели прибора. Т.о. часть мультиметров, что поновее, отзывается строкой «B7-78/1» (первый символ – английская B), в то время, как другая часть отзывается строкой «V7-78/1».
На скрине отладчика как раз запечатлён момент сравнения 2-х строк, отличающихся всего одним символом. Именно это различие и приводило к невозможности обновления прошивки.
Однако, просматривая код загрузчика я обнаружил интересную лазейку, которую оставили разработчики. Если в программе установлен некий однобайтовый флаг, то часть проверок просто игнорируется! А именно, пропускаются проверки на наименование модели прибора и версии ПО. Т.е. при определённых условиях в прибор можно загружать ПО другого OEM заказчика или ПО головного производителя, т.е. PICOTEST. Кроме того, появляется возможность отката ПО на более старую версию.
Очевидно, что такой режим (я назвал его технологическим) нужен преимущественно для целей ремонта или отладки. Однако я готов был рискнуть
Флаг технологического режима выставляется в программе только в одном случае: когда первый символ номера версии DSP в составе строки идентификации является не цифрой, а английской заглавной буквой T.
Каков механизм такой подмены номера версии – выяснить не удалось. Возможно, что в приборе есть какое-то сочетание кнопок или секретное меню, но брутфорсом найти их я не смог. Тем не менее, модификация всего 4-х байт в программе-загрузчике позволила сэкономить время и обойтись без секретных чит-кодов разработчиков. Пропатченная версия DmmUpdate лежит в моём архиве [1]. Используйте её на свой страх и риск. За последствия я не отвечаю.
Итак, ПО обновлено до версии 03.36. Запущено полное самотестирование и… отказов с кодами 604 и 622 как не бывало. Т.о. изначально проблема заключалась в области программного, а не аппаратного обеспечения. И если бы не досадная (если не сказать хуже) ошибка производителя, связанная с изменением всего одного символа в названии прибора, можно было бы сохранить кучу времени и потратить его для чего-то более конструктивного.
Видео экспресс-проверки функционирования:
https://youtu.be/cv-yex7lknsДля удобства к мультиметру подключены сразу 2 калибратора DC-Cal Mini (ко входам на лицевой панели и на задней стенке).
На десертНайденные мной уязвимости и баги ПО В7-78/1:
1. Если не используя функцию «ЗАПИСЬ» сразу нажать кнопку «ВЫЗОВ» (данных из памяти на дисплей), прибор мгновенно уходит в перезагрузку/зависает/выводит на экран мусор (нужное подчеркнуть).
2. Если вызвать функцию управления сканером (кнопка «СКАН») при отсутствии платы последнего в мультиметре, и после появления надписи «NO SCAN CARD¬˩» нажать кнопку «ВВОД», то на экран выведется мусор, а дальнейшие нажатия на кнопки курсора и «ВВОД» могут привести к полному зависанию прибора.
3. Включение прибора с нажатой кнопкой «МЕНЮ» переводит его в состояние, когда на дисплее мельтешат и текущие показания, и строка меню настроек.
4. Даже обновление ПО двух мультиметров до одной и той же версии не гарантирует их полную функциональную идентичность. К примеру, В7-78/1 как до, так и после ремонта отказывается корректно отрабатывать недокументированные сервисные команды SYSTEM:INIT:READ? и SYSTEM:INIT:SAVE, которые необходимы для работы программы-конфигуратора мультиметра PT-SET.
Литература и программное обеспечение1. Мой архив прошивок PICOTEST:https://drive.google.com/file/d/1cRBK1y ... sp=sharing2. USBTMC terminal «Messinstrumente»:https://drive.google.com/file/d/1KovbaT ... sp=sharing3. Актуальная утилита настройки мультиметра PT-Set v1.4:https://drive.google.com/file/d/1NNMeq8 ... sp=sharing4. Устаревшая утилита настройки мультиметра PT-Set v1.0:https://drive.google.com/file/d/1jb3jjz ... sp=sharing5. Официальный сайт PICOTEST:http://www.picotest.com.tw/h/Data?key=7 ... 5877&set=8 – последняя прошивка (03.35), руководство пользователя (1.08), софт.
6. «Дырявый» сайт американского представительства PICOTEST:https://www.picotest.com/downloads/M3500/ – прошивки (<=03.10), сервисное руководство (2011 г., без схем), руководство пользователя (1.06), программа-конфигуратор PT-SET (v1.4), исходники и др.
7. Старый архив ПО PICOTEST:http://www.linktime.com.tw/dl3500.htm – старые прошивки (1.0, 03.02, 03.03), USB драйверы, старая программа-конфигуратор PT-SET (v1.0), исходники и др.