Есть 3 одинаковые платы(из серводрайвера) - 2 рабочие полностью, в третьей отсутствует мсх памяти NOR, и не стартует, естественно. В 2 рабочих платах стоит параллельная NOR flash - Spansion S29AL016J70TFI02. Дампы с обеих слил с помощью XGecu T48, дампы одинаковые байт в байт. Купил точно такие же новые Spansion S29AL016J70TFI02, залил дамп, верификация ок. Но ни одна плата не стартует с прошитыми новыми флешками. Любая из трёх плат стартует и работает нормально только с любой из двух флешек, которые установили на заводе. Это навело на мысль, что в новую флешку прошито не все, что должно быть прошито. Изучив даташиты S29AL016J, ее аналогов и предшественников, понял, что в них есть дополнительный OTP-сектор 256 байт, называется "Hidden ROM", "Secured Silicon Sector" или "hi_rom.otp"(в XGecu). Он однократно программируемый(OTP). Судя по всему, в этот сектор записан загрузчик для DSP-контроллера ADSP-21992, и без него он не стартует. Однако в программаторе XGecu нет функционала для доступа к hi_rom.otp для данной nor-флеш. Изучая дальше, выяснил, что предшественник NOR S29AL016J это S29GL016A, и для него есть функционал чтения hi_rom.otp в XGecu. Однако вычитывает он везде FF все 256 байт (якобы пустой сектор), и неясно-читает он его или же думает, что читает. Из новой пустой флешки так же читается все байты FF в этом секторе.
То есть, получается, что 2 одинаковые мсх, которые одинаково читаются программатором по всем секторам, в итоге при установке в систему на плату и при общении с ADSP-21992 (и 2 шт Lattice) только одна из них выдает дополнительный массив памяти, к которому не удается получить доступ посредством программатора. Читая даташиты и описание этого Secured Silicon Sector, до конца непонятна логика его работы. Везде написано, что его можно заблокировать после записи, но блокируется не от чтения, а только от записи, модификации, стирания. А прочитать его якобы можно всегда, только нужна правильная последовательность команд для доступа к нему.
Вопросы...: -Как получить полный доступ к этой NOR флеш? ...через JTAG и ADSP-21992 должен же быть доступ, ведь этот ADSP как-то читает этот сектор в начале выполнения кода программы.
-Можно ли каким-то скриптом поправить алгоритм работы программатора XGecu, задав ему перед чтением 3 цикловую последовательность команд из даташита (AAA AA, 555 55, AAA 88) для "Enter secured silicon sector". Ведь после этой последовательсти чтение происходит обычным образом (256 байт начиная с адреса 0), судя по даташиту на NOR.
PS. ...заказан официальный JTAG-эмулятор Analog Devices "ADZS-ICE-1000" для работы с ADSP-21992 через JTAG и ПО "VisualDSP", придет через неделю. Буду пробовать прочитать hidden ROM средствами DSP-контроллера.
Можно попытаться выэкспортировать старый алгоритм в виде файла ULI через подменю Select IC_ add ic by user. Потом поковыряться в бинарнике ULI. Вроде на гибхабе в проектах самописного софта для XGecu было описание формата файла ULI и тулза для пересчета КС после модификации. Но был ли расшифрован случай доступа к hi_rom и как оно описано в ULI- без понятия. Вряд ли там загорузчик находится- скорее проверка серийного номера и чексум. Слишком мало места на загорузчик да и кто даст ADSP команду переключить EPROM на hi_rom режим? Можно попытаься поймать логическим анализатором момент доступа к hi_rom и попытаться похакать основную программу. ps.Иногда надо все таки читать инструкцию
Код:
Only T56 can support reading and writing OTP data.
khach, благодарю за участие и помощь! По поводу Т56 и otp видел изначально в разделе о nand. С учётом того, что на Т48 мануала нет, а есть только на Т56/tl866ii, и T48 новее T56, и новый мануал касаемо т48 сделать не соизволили разработчики, сделал вывод, что в мануале имеется в виду отсутствие поддержки otp у tl866ii, но не у т48. Т48 не упоминается в мануале совсем, хотя мануал из посл.версии офиц.приложения. Плюс наличие otp вкладки у s29gl016a и других микросхем доубедило. Спасибо за новые направления по решению данной задачи! Завтра-послезавтра придет jtag, начну общаться с dsp... Посмотрим на доступный функционал. Нигде описаний никаких. Только на microsin нашел описание работы с dsp blackfinn и jtag... Хоть что-то.
Мне программировать OTP пока не требовалось, а вот посмотреть что там находится - было бы желательно. Вот думаю- можно ли оформить алгоритм считывания OTP вообще как отдельную микросхему с обьемом в 100h байт но с нестандартным алгоритмом считывания? У меня только tl866ii в наличии и пока расширяться до T56 не планирую, тем более что он уже снять с производства и новый T76 небюджетный совсем для такой небольшой задачи.
khach, нашел человека и 2 его видео, в одном из них как раз про добавление микросхемы в один из программаторов. Во втором о защищённых секторах и снятии защиты. Микросхема отличается одним символом, otp нет, в остальном тоже самое. У него, судя по всему, полный набор программаторов. Написал ему... https://rutube.ru/video/400e083910b5db2 ... 600e5e3f3/
Можно попытаься поймать логическим анализатором момент доступа к hi_rom и попытаться похакать основную программу.[/code]
Логического анализатора на данный момент нет. Осциллографом не вариант. Если только триггером ловить 88hex (10001000bin) при включении на шине данных. Но это только для определения самого факта обращения к otp. Решил заказать лог.анализатор
JTAG пришел, результата не принес. Дело в том, что данный контроллер ADSP-21992 поддерживается только в версии VisualDSP++ 3.5, но эта версия старая, не поддерживает данный эмулятор ADZS-ICE-1000. Новая версия VisualDSP++ 5.1.2 поддерживает эмулятор, но не поддерживает контроллер, и добавить нельзя. И даже если бы старая версия 3.5 поддерживала эмулятор, то в ней нельзя было бы слить дамп, поскольку в утилите Flash Programmer отсутствует функционал чтения, только запись есть. Вот такая засада)
Нашел человека с ChipProg 48, который поддерживает SecSi Hi-Rom, считали, сектор пустой, везде FF. Значит, дело не в этом секторе. Зато теперь ясно, что в XGecu T48 может работать с этим скрытым OTP-сектором флешки s29al016j (и аналогов с id 2249h, которых много) (чтение, однократная запись), нужно выбрать в программе s29al016M90tfi02, будет вкладка hi_rom.otp. Проверили и сравнили с ChipProg 48. Вывод такой-в скрытом секторе нет ни загрузчика, ни серийного номера, ничего.
Заказал аналоги флешки: -MX29LV160DBTI-70G -s29al016D70tfi02 (без secsi) Буду пробовать записать в них дамп. Может, с ними заработает.
Добавлено after 7 minutes 1 second: PS Добавлю принцип работы с этим сектором. Изначально в новой флешке этот сектор 256 байт пустой, все байты FF, т.е. все биты равны 1. Если вы прошили в какой-то бит 0, то вернуть его в 1 нельзя, однократно программируемый. Если же вы прошили 1, т.е. по сути ничего не прошили в этот бит(ячейку), оставили его без изменений, то позже вы можете прошить в него 0.
TL866ii Plus тоже поддерживает этот сектор, посмотрел в демо-режиме. Так что, можете попробовать, выбрав S29AL016M90TFI02(Bottom boot), ...TFI01(Top boot)
В демо режиме я это видел, а вот в реале хотел снять протокл обращения хотя бы на чтение к OTP сектору, чтобы по мотивам написать потом свою тулзу на запись ( подменив заголовки команд ) и облом. Возможно это от версии фирмвари зависит. PS в последней версии проги 13.04 для TL866 этот вариант в демке убрали, только для Т56 открывается закладка Hi-ROM, хотя если выбрать в демке Т56, выбрать микросхему, закрыть демку и конфиг запомнит выбор, а потом открыть демку для TL866 то hi-rom сохранится. Но будет ли это работать с реальным железом- без понятия. Снять бы протокол записи-чтения на Т56 по USB у кого есть возможность. PS2. Искал инфу по hi-rom тут https://gitlab.com/DavidGriffith/minipro/ но ничего пока не нашел.
Я уже нашел кое какую инфу в репо minipro. Там все сложно- Т56 грузит профивку FPGA на каждый алгоритм. Для наших S29AL016 вроде алгоритм номер 12 используется protocol_id="0x12"
Расшифровка полей фич тоже в коде есть. Но если это повторять на TL866 то алгоритм фирмвари просто не отработает, т.к там нет реализации чтения- записи OTP сектора. Можно к этому сектору добраться наврено дрыгоножеством (bit-bang) режимом который используется для теста логики ТТЛ. Но через адаптер TSOP48 как это делать и возможно ли это- я примеров не нашел. Интефейс обмена TL866 более-менее описан в файле tl866iiplus.md в корне репо, а остальные фичи можно найти в коде. Есть еще проект для работы с железом программатора на низком уровне https://gitlab.com/snhenson/mprom дрыгоножеством с записью алгоритма программирования в XML ps. Есть еще проект https://github.com/JohnDMcMaster/open-tl866 где есть исходники переписанной фирмвари, но имеет ли смысл копать в этом направлении- без понятия.
khach, но ведь в al016d нет отп сектора(по факту из даташита). В 16j, 16m есть по факту. Но, касаемо программатора xgecu, только в алгоритме s29al016m он функционален, как я писал выше. При выборе s29al016j вкладка hi_rom.otp не появляется.
Это для top boot, судя по id. Адреса secsi для s29al016j(m) будут у верхней границы памяти 1FFF00h–1FFFFFh(x8). Название МСХ заканчивается на 01, r1. Для bottom boot id будет равен 0x10004922, и адрес secsi начинается с нуля: 000000h–0000FFh(x8). А название микросхемы для bottom boot будет заканчиваться на 02, r2.
Я цитировал название протокола с репозитория опенсоурсной линуховой оболочки программатора. Судя по исходникам там вообще поддежка OTP не реализована, что не отменяет того, что фирмварь программатора остается официальной и следовательно OTP поддерживается железом того же T56. Мне пока бы разобраться как работать c микросхемой через TQFP48 адаптер, если уж смотреть в сторону самодельной фирмвари для OTP на базе 866A или 866II. Потому что я пока не разобрался, можно ли как то выслать набор команд на микросхему флеша для разблокировки доступа к ОТР через стандартный протокол 866II. Например дрыгоножеством, или модифицируя команду стирания сектора иил флеша целиком.
Дело было вот в чем... Дампы двух рабочих плат отличались на 1 бит. Изначально видел это. Решив, что это было сделано случайно кем-то до меня(копали, паяли, прошивали плату уже многие люди на тот момент), я не придал этому значения, ведь обе платы работали, и раз нет ошибок, то данный бит не влияет на работоспособность-не участвует в программе или используется в каких-то особых условиях, режимах. Поэтому решил использовать первый попавшийся дамп, от первой платы. В первой плате этот дамп работал. А вот в остальных платах, как оказалось, не работает! А вот дамп от второй платы с отличающимся битом позволил третьей плате заработать. В итоге я залил этот дамп во все платы, и все они работают. Плюс, поменял все флешки, причем две из них взял без SecSi сектора: S29AL016D70tfi02 и MX29LV160DBTI. А третью просто новую той же модели(с SecSi-сектором).
Вывод такой. SecSi тут не используется, никакой защиты нет. Проблема решена, но вообще не ясно почему все именно так. Все 3 платы идентичны, в том числе по принту на них, выполняют одну и ту же функцию, только с разной конфигурацией из EEPROM. Где зарыта собака-выяснить, видимо, не удастся.
Сильно зарылся в решение этой задачи, изучил кучу даташитов на другие мсх с SecSi, и даже завел обсуждение с поддержкой Infineon, который правопреемник Spansion, и они даже отвечают и пытаются помочь. Это было интересно-воевать с данной платой, атаковать ее с разных сторон. Еще до момента создания данной темы восстанавливал эту плату по железу, было одно незаметное КЗ между ножками одной из ПЛИСин, нашел прозвонкой, увидеть нереально было. Это уже последствия чьих-то безуспешных попыток ремонта (бездумная пропайка всего и вся).
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения