Решение проблем с микрокодом на гелиевых Seagate Mobula

Всё чаще стали поступать на восстановление данных неисправные гелиевые жёсткие диски Seagate Exos X16 семейства Mobula, типовым представителем которого является модель ST12000NM001G.

Одной из отличительных особенностей данной линейки является наличие двух микросхем ПЗУ в которых разделён единый код рэйдоподобным способом: для образа ПЗУ размер части равен половине дампа, а затем идёт stripe по 256 байт. Чипы IS25WP016 в корпусе USON-8 совместимы по параметрам чтения с STM25P16, для чтения микросхем в нашей лаборатории используются различные специализированные адаптеры, от простой панельки под распайку:

до универсальной каретки:

или кабеля с подпружиненным игольчатым разъёмом для чтения чипов без демонтажа (в тех случаях когда это возможно).

Чаще всего сбой микрокода у этих дисков (неграмотные граждане говорят, что «у гелиевого Seagate слетела прошивка») выражается в том, что диск при старте раскручивает шпиндельный двигатель, рекалибруется и не давая готовности на SATA интерфейс выдаёт в диагностический терминал сообщение:


Boot0x0100MAA035KSN03
Trans
Rst0x0100MAA035KSN03
(P)SATAReset

NVCScramSavedHBSize:020A
LD:
PP:
TW:
WCD:
GC:
NVCFormatCorrupt:0331000B

Ответ на запрос заводской конфигурации в диагностический порт выглядит так:


Prod Desc: MobulaBP.CMR.mDRAM.SATA.Combo.Def5xxe.OCZ.MynaPlus2.1.Cust.KB12
Package Version: MMAEA12B0.SDN1.AA035K.SN03
Serial #: ********
Changelist: 01717748
Model #: ST12000NM001G-2MV103
ID: 101
Servo FW Rev: B753
Heads: F
PCBA SN: 0000C032L36X
Default factory config: SD&D
Active config: SD&D

В «первой» ПЗУ лежит основной код, без адаптивов RAP (по этой границе и идёт разрез) и «айкапчи» блока (сигнатура XNvC). Ручное применение к образу ПЗУ патча на разблокировку работы через диагностический порт приводит к сообщению об ошибке кода, но тем не менее разблокировка доступа к техно-режиму работает успешно.


SEA3 Boot ROM 2.0 (08/01/2016)
Copyright Seagate 2016

Flash boot code Digital Signature Verification failure!

Flash boot code checksum failure!

Для решения проблемы требуется очистить блок кода ПЗУ описывающий незавершённые транзакции, и проще всего сделать это, вставив нужную часть, считанную с исправного аналогичного диска, в ROM пациента, т.к. на базовую КС логи транзакций не влияют, а простое «зануление», типа прописать паттерном FFh, тут не поможет. После внесения нужных правок диск «приходит в чувство» и можно читать с него данные штатно.


SEA3 Boot ROM 2.0 (08/01/2016)
Copyright Seagate 2016

Flash boot code Digital Signature Verification failure!

Flash boot code chec
Boot0x0100MAA035KSN03
Trans
Tech Unlock Handshake:
Rst0x0100MAA035KSN03
(P)SATAReset

NVCScramSavedHBSize:020A
LD:MD_Alloc:000000F0HB_Alloc:0000DiscRestoreMD_Saved:000000F0HB_Saved:00000000MD_CRC:562E
PP:MD_Alloc:0000F000HB_Alloc:0000DiscRestore
PVTSize:000D9E24   CompSize:00001B64   DeCompSize:000D9E24MD_Saved:00001B64HB_Saved:00000000MD_CRC:6B6D
TW:MD_Alloc:00000400HB_Alloc:002EDiscRestoreMD_Saved:00000160HB_Saved:00000000MD_CRC:0000
WCD:MD_Alloc:00040000HB_Alloc:1293DiscRestoreMD_Saved:00000020HB_Saved:00000000MD_CRC:56D4
GC:MD_Alloc:00005000HB_Alloc:0000DiscRestoreMD_Saved:00004348HB_Saved:00000000MD_CRC:E3FF
DSP0004
2Sync:0 4