Главная Форум Статьи Файлы F.A.Q.


Последние активные темы форума

 
3G Modem Manager & Alcatel (2) 04.03.24 15:04 euvgagsdf
Huawei E3131 (11) 28.01.24 09:28 haidarsho_olimov
RE: Восстановление модемов с помощью Z_Flasher-Reanimator_modem v-05 «NEW_RAW_RELEASE». ч2 (149) 12.07.23 16:19 Pavel82
ZTE mf 190 (1052) 26.03.22 07:30 sergey67
   
Модемы Alcatel (178) 14.01.22 15:45 Konst
ZTE MF112 (617) 27.11.21 20:54 gaivor74
пробуем разобраться с j-link и модемами (134) 18.06.21 14:38 slav
Лаборатория по реанимации (207) 29.05.21 07:58 turon
 

Профиль

   
Логин: Пароль: Забыли пароль?Регистрация


Некоторые хитрости от BOBA.
Форум > Работа с JTAG > Некоторые хитрости от BOBA.

Страницы:
Автор Сообщение
 Energizer
администратор
глухая деревня
сообщений: 1204
#51 Дата 27 июл 2011 17:09
всетаки есть решение с отлучением от жадности буржуя который сделал Noice
noice.debugger.9.3.generic.keygen-tsrh
я им видимо первый раз не правильно пользовался :-)
нужно запустить кейген и нажать кнопку сгенерить а затем указать путь -для хапе вот такой
C:\Program Files\NoICE\bin у меня сначала не получилось что то видимо прое// потерял .. потом
скачал всетаки 9.3 отхачил его кейгеном, а потом по верху накатил 9.4 и Noice заработал :-))
 Energizer
администратор
глухая деревня
сообщений: 1204
#52 Дата 28 июл 2011 10:22
ну что ж продолжу чуть отчет о приручении HJtag
на сегодня уверенно можно сказать что получается грузить драйвер самопальный
компиленый ADS 1.2
с адреса 0x01000000 - он там размещается без вопросов и работает устойчиво
причем 10 из 10 подключений не глупит при этом используется схема Виглер без
мелкосхем и транзисторов т.е пин в пин только резисторы стоят.. nSTRST не задействован... что имеем - правильное распознование id nand это пока все
никак не могу разобраться с заполнением массива на хосте .. читаю бубнилки.. и учусь помаленьку.. драйвер пока только тестовый с обрезанными функциями для простоты и чтоб не попортить таблицу ..
и что особенно порадовало так это возможность работать через PCI to LPT // удивительно что Hjtag с родным флешером договорились смотреть на не стандартный порт да еще и в режиме EEP УУраа ;-) а может и не ура... проверить надо еще многое..
этого не мог сделать openocd .. наконец выключил старый комп как только окончательно пойму что он не нужен отправлю его адресату :-))
для меня это уже успех так что хвастаюсь :-)))

Отредактировано: Energizer 28 июл 2011 10:47
 B0BA
Хабаровск
сообщений: 68
#53 Дата 29 июл 2011 08:32
Вспомнил что происходило при попытке шить через драйвер, в общем драйвер нормально загружался (естественно, ведь загрузка шла по jtag а процессор находясь в дебаге позволял делать с собой всё что угодно) выход из дебага и передача управления драйверу проходили нормально, драйвер мог спокойно висеть в бесконечном цикле, без всяких обнулений вочдога, но всякая попытка записи в память приводила процессор в неконтролируемое состояние, скорее всего из-за нарушение привелегий происходило исключение а указатель на таблица IDT (если горворить терминами i386 с АRМ архитектурой я к сожелению не знаком) был неверен что и приводило процессор в состояние выйти из которого можно было только через аппаратный сброс. По адресу 0xC000000
начинается любопытный загрузчик зашитый в ROM на кристалле процессора (типа BIOS), наверное именно он инициализирует таблицу дескрипторов и каталог страниц обеспечивая защиту (опять терминиами i386) скорее всего ,чтобы драйвер работал надо заставить код выполнятся с CPL=0,либо разрешить с доступ к памяти с более высоких CPL как это сделать для ARM я не знаю.
Вы написали что удалось полчить ID флешки, скажите, перед этим вы слали в командный регистр команду 5h, либо просто считали по смещению 320h? Уточняю потому что ID записан уже после входа в дебаг, но
если вам удалось произвести запись в регистр, это сильно меняет дело,

Отредактировано: B0BA 29 июл 2011 08:46
 Energizer
администратор
глухая деревня
сообщений: 1204
#54 Дата 29 июл 2011 11:58
я подсмотрел как это делает кумат сняв логи его работы... хоть и кривой :-)
и сочинил чуть похожее..мне тоже было интересно даст или проц возможность писать в эти регистры.. но видимо дал :-)
причем если я правильно помню то для того чтоб все шло кошерно я хитрил
после захода в дебаг (смотрел Ноисе) жмякал на гоухалт проц в это время убегал с нулевого в сторону и сам останавливался .. видимо проводил в это время в том числе иниц. памяти (догадка) после чего флешер Hjtag нормально читал в том числе и буфер нанд.. но в виду того что я не смог пока разобраться с работой вывода на хост массива несколько только байт.. но ID можно было забирать как угодно хоть кусочком , хоть полностью 32 бита..

#include "Types.h"


///////////////NAND FLASH INFORMATION/////////////
//# Flash type: NAND FLASH HYNIX_HYCOSEHOMF3P Chip ID: 0x00AD/0x0036 (32M x 16 Bit )
//# Flash type: NAND FLASH SAMSUNG_K9F1208 Chip ID: 0x00EC/0x0036 (32M x 16 Bit )

#define NAND_PAGE_SIZE 512 //PAGE SIZE (BYTES)
#define NAND_BLOCK_SIZE (16*1024) //BLOCK SIZE (BYTES)
#define NAND_BLOCK_NUM 4096 //BLOCK NUMBER
#define NAND_BLOCK_PAGE_NUM 32 //BLOCK PAGE NUMBER

/////////////MCU REGISTERS////////////
//# ARM926e-js Qualcomm MSM6246 with NAND Controller Chip ID: 0x401200E1

#define NFDATA 0x60000000
#define NFCMD 0x60000304
#define NFSTAT 0x60000308
#define NFADDR 0x60000300
#define NFIDDATA 0x60000320
#define NFCONF 0x60000330

#define WATCHDOG 0x8000530C

#define NAND_CMD_SWRESET 0
#define NAND_CMD_PAGE_READ 1
#define NAND_CMD_FLAG_READ 2
#define NAND_CMD_PAGE_WRITE 3
#define NAND_CMD_BLOCK_ERASE 4
#define NAND_CMD_ID_FETCH 5
#define NAND_CMD_STATUS_CHECK 6
#define NAND_CMD_RESET 7


++++++++++++++++


/*=========
NOTE:
This file implements all the operations for MSM6246+ GNUSMAS_K9F1208 or XUIKS_HYCOSEHOMF3P.
To use on other hardware platforms, please modify accordingly.
===========*/


#include "Types.h"
#include "Comm.h"
#include "Flash.h"

/*=======
FUNCTION: wdog()

DESCRIPTION:
Used to reset WD

ARGUMENTS PASSED:
None

RETURN VALUE:

None
=========*/
void wdog (void)
{
//Reset wdog

*SysAddr32(WATCHDOG) = 0x01;

}

/*=========
FUNCTION: nand_wait()

DESCRIPTION:
Used to check if device is busy or ready for new command. Return only when the device is ready.

ARGUMENTS PASSED:
None

RETURN VALUE:
None
===========*/
void nand_wait(void)
{
int i;

wdog();

for (i=0; i<1000000 ; i++);

}

/*==========
FUNCTION: nand_init()

DESCRIPTION:
Used to do some initialization. User can put any initialization inside this function.

ARGUMENTS PASSED:
None

RETURN VALUE:
None
===========*/
void nand_init(void)
{
//Reset
*SysAddr32(NFCMD) = NAND_CMD_SWRESET;

nand_wait();

//Config
*SysAddr32(NFCONF) = 0x00;

nand_wait(); //здесь планировал поставить обработку 60000308

}


/*===========
FUNCTION: nand_read_id()

DESCRIPTION:
Used to read the flash ID.

ARGUMENTS PASSED:
None

RETURN VALUE:
U32 id - Read flash ID.
===========*/
U32 nand_read_id(void)
{

//Read ID

nand_init();

*SysAddr32(NFCMD) = NAND_CMD_ID_FETCH;

nand_wait();

*SysAddr32(NFCMD) = NAND_CMD_STATUS_CHECK;

nand_wait();

return *SysAddr32(NFIDDATA) & 0x0000FFFF; //Вот здесь не уверен такая была строчка или нет.
}

единственное что не так - у меня слетел совсем ADS сейчас и настройки его совсем.. я не вел учет начальных записей и за это поплатился бардаком в исходнике... все смешалось и в последствии не смог нормально скомпелить не одного драйвера со вчерашнего дня... остался только выхлоп в бинарнике :-(

кумат делает вот так
читаем id
304=5
304=6
читает id=320

читаем страничку:
300 = адрес (в следующем цикле +200)
304 = 1
308 читает 1 h
читает буфер 512
304 = 6
308 = считывает 4 h

вот здесь я не совсем понимаю почему он сначала читает а потом щелкает
и спрашивает готовности?? почему не на оборот или это общая практика??
но кумат читает правильно только буфер..странички он почемуто не смог переключить.. или может там просто и есть циклическая фигня как в буфере..
udachnyyid.rar  
Отредактировано: SerGGGik 29 июл 2011 20:03
 Energizer
администратор
глухая деревня
сообщений: 1204
#55 Дата 29 июл 2011 20:41
Да и конечно я знаю про косяки в конфигах блоков и страниц .. просто не правил по тому как не был уверен в разрядности с которой будет работать драйвер..
я ставил задачу научиться на первых порах читать правильным методом ID, разумеется хотелось читать буфер и его передавать.. вот это у меня и не получалось в полной мере.. только несколько байт.. я не смог разобраться с передачей массива хосту..
приложу пожалуй картинку... на ней видно успехи :-)
 
Отредактировано: Energizer 29 июл 2011 22:56



 Energizer
администратор
глухая деревня
сообщений: 1204
#56 Дата 30 июл 2011 20:58
сегодня переустановил ADS, расплата за лазание по варезникам.. нахватал всяких троянов и вирусников ..теперь стал нормально компелить исходники которые грузятся в RAM и работают... однако , не могу никак правильно передавать инфу из буфера .. хрень какая то в выходном файле получается.. наверное где то туплю я ведь я не программер по образованию и по работе я с этим искусством не перекликаюсь ниразу...
ВОВА может HJtag поможете победить ?? я всю голову сломал над циклом чтения массива буфера... видимо что то не понимаю... мне бы хоть одним глазком взглянуть на ваши изыскания в этом направлении... и по правде сказать у меня даже сейчас нет полной уверенности что контроллер разрешает писать в командный регистр. а не просто игнорирует попытку записи... может надо отдохнуть от Шкодерства и подождать пока Вы сольете своё решение в паблик но тогда я буду вынужден забить на эту тему вообще.. а жаль она увлекательная ;-)
.. а то что то все в холостую ;-) пыжить приходится.
 B0BA
Хабаровск
сообщений: 68
#57 Дата 01 авг 2011 06:10
Тем временем я тоже столкнулся с непредвиденными трудностями - если побрубать через jtag исправный модем, то флэш ни в какую не хочет видется, предположительно это связано с тем, что остановка процессора происходит в момент когда он выполняет задачу и работает с её каталогом страниц поэтому по 0x60000000 находится уже другая область физического адресного пространства, в случае битой прошивки процессор останавливается после того как бутлоадер обнаруживает ошибку CRC, а так как многозадачнось еще не инициализирована, то мы попадаем в ring0, а адресное пространство представляется нам таким-же как для бутлоадера. сейчас буду думать как обойти эту досадную неприятнось, хотелось бы чтоб программа нормально работала с исправным модемом, а то не хочется намеренно портить прошивку в целях тестирования. прошивальшика - хочу снять дамп по JTAG с исправного модема. на wasm.ru кажется была статья о переходе в ring0 из пользовательского режима на ARM,накрайняк попробую найти обходной путь, пока пришли в голову идей о переходе в дебаг в момент подачи питания на модем, пока бутлоадер еще не успеет загрузить прошивку, ну или может переход в boot mode с помощью QMAT или QPST поможет...Есть и хорошие новости - написал GUI для прошивальщика :)

по поводу драйверов под hjtag и чтения из буфера, похоже у вас та-же проблема что и у меня, так что мои нарабртки вам не помогут...ID у меня тоже считывался, но на этом всё и заканчивалось

Отредактировано: B0BA 01 авг 2011 06:11
 Energizer
администратор
глухая деревня
сообщений: 1204
#58 Дата 01 авг 2011 10:16
у меня есть успехи.. не большие но есть :-)
во первых проверил возможность чтения\записи в регистры -- все в порядке -работает 100% и правильно реагирует.
более мене разобрался с передачей буфера хосту... мои проблумы были связаны с тем что по глупости слишком часто и без толку(думал перестраховаться) использовал слишком долгие пустые циклы в функ. нанд вайд.. это срубало таймер ожидания у Hjtag .. теперь буфер передается почти нормально... почему то к началу добавляется хрень длиной 4h вот с этим не могу разобраться..
так же никак не получается нормально записывать в регистр адресс начала странички из той каши которая лезет из Hjtag - если указать в прямую на этапе компиляции- без вопросов .
Короче у меня проблемы с головой - не умею нормально кодидь.. двух строк не в состоянии правильно написать :-(
так что на моем пути есть только проблема не умения писать нормально код... Квалком согласился работать через внутренний загрузчик под Hjtag // причем довольно стабильно :-)
так что по прежнему мечтаю увидеть Ваши наработки в Hjtag // торжественно клянусь не сливать в паблик если у меня получится раньше Вас победить :-))))
чувствую что у меня победа рядом !!! Квалком не особо артачится и позволяет пользовательской программе командовать собой :-).

на счет идей как свалить в дебаг- попробуйте использовать не только TRST но и SRST причем желательно в разнобой-- таким методом валят камни в дебаг в openocd/ можно конечно попробывать Кумат -если у Вас есть сиггер в закромах но иначе только через openocd по GDB // причем Кумат подлечен с неровными краями- это я точно выяснил :-) он нормально может читать только "открытые пространства" , а нанд он читает только буффер но не может правильно переключить страницу.. при попытке записи вообще вылетает в космос :-) иначе давно бы уже все восстановил :-) конфиг для кумата Вы вед дали почти готовый..
на счет GUI это очень хорошо :-))))
 B0BA
Хабаровск
сообщений: 68
#59 Дата 01 авг 2011 12:22
а смысл смотреть на эти исходники ? по hjtag вы уже достигли больше меня, нет мне показать их не жалко просто искать лень - разверну образ винта на котором делалась работа, может что вытащу. я так понял что у вас есть qmat, где не вырезаны функции работы с jtag и у вас получилось снять дамп с убитого модема?
по поводу свала в дебаг, пока нашёл простое решение - через qmat вхожу в диагностик, на первых парах пойдёт. сегодня попробую снять дамп с исправного модема. кстати, а вы не забыли про вочдог, ведь при исполнении кода на АРМ надо обязательно его пинать

Отредактировано: B0BA 01 авг 2011 12:33
 Energizer
администратор
глухая деревня
сообщений: 1204
#60 Дата 01 авг 2011 15:37
смысл посмотреть на Ваш исходник только в том, чтоб увидеть как нужно трансформировать адрес , да и вообще понять что я делаю не так, как делают люди которые умеют :-)
у меня есть кумат который вскрыт с неровными краями но самого сиггера у меня нет по этому конектился через прокси в качестве которого настраивал openocd ... я уже писал что Кумат может только читать "открытые участки памяти.. с блоками и страницами у него не получается( или у меня в конфигах гдето косяк был) по этому снять дамп с мертвячины не вышло - зато посмотреть последовательности по каким регистрам бродил кумат при попытках читать нанд или Ram получилось.. пользы от кумата больше не извлечь, из за кривого хака он не может писать в нанд..
на счет вочтога не забыл, я его тереблю.. может и не очень часто но проц не валится :-) я его каждый раз как только задержку перед регистрами ..

void wdog (void)
{
//Reset wdog

*SysAddr32(WATCHDOG) = 0x01;

}


void nand_wait(void)
{
int i;

wdog();

for (i=0; i<1000000 ; i++); вот от этой строчки хочу отказаться в пользу циклической проверки состояния.. из за большого количества задержек по 100 мс Hjtag валился в тайм аут и я не мог понять почему не вижу буфера..

}

мой конфиг кумата был таким :


*JTAGDEVICES.XML*


<device name="MSM6246 (for tested)">
<flashmode>2</flashmode>
<id>0120</id>
<NAND_FLASH_BUFFER>60000000</NAND_FLASH_BUFFER>
<NAND_FLASH_ADDR>60000300</NAND_FLASH_ADDR>
<NAND_FLASH_CMD>60000304</NAND_FLASH_CMD>
<NAND_EXEC_CMD>60000304</NAND_EXEC_CMD>
<NAND_FLASH_STATUS>60000308</NAND_FLASH_STATUS>
<NAND_FLASH_ID_DATA>60000320</NAND_FLASH_ID_DATA>
<NAND_FLASH_CFG>60000330</NAND_FLASH_CFG>
<NAND_CMD_RESET>0</NAND_CMD_RESET>
<NAND_CMD_PAGE_READ>1</NAND_CMD_PAGE_READ>
<NAND_CMD_FLAG_READ>2</NAND_CMD_FLAG_READ>
<NAND_CMD_PRG_PAGE>3</NAND_CMD_PRG_PAGE>
<NAND_CMD_ERASE_BLOCK>4</NAND_CMD_ERASE_BLOCK>
<NAND_CMD_FETCH_ID>5</NAND_CMD_FETCH_ID>
<NAND_CMD_STATUS>6</NAND_CMD_STATUS>
<NAND_CMD_RESET_MEMORY>7</NAND_CMD_RESET_MEMORY>

</device>


<revision>
<revid name="MSM6246">0120</revid>
</revision>
<flash>
<flid name="Hynix HYC0SEH0MF3P" id=" AD36">

</flid>
<flid name="Samsung K9F1208Q0A" id="EC36">

</flid>
</flash>
<ranges>
<rid name="Bootloader" start="0" end="2C0000"></rid>
<rid name="NAND Init MSM6xxx(old)" start="60000000" end="60000000"></rid>
</ranges>
</QMAT>


да и кстати может для ВАам гуи пригодится вот это:

Семейство ARM9E Версия архитектуры ARMv5TEJ
Ядро ARM926EJ-S
Функции Thumb, Jazelle DBX, Enhanced DSP instructions

# ZTE Modem MF100
#Qualcomm MSM6246 ARM926EJ-S with NAND Controller Chip ID: 0x401200E1
# Flash type: NAND FLASH HYNIX_HYCOSEHOMF3P Chip ID: 0x00AD/0x0036 (32M x 16 Bit )
# Flash type: NAND FLASH SAMSUNG_K9F1208 Chip ID: 0x00EC/0x0036 (32M x 16 Bit )
Страницы:
Перейти на другой форум:
Сайт управляется SiNG cms © 2010-2015