Wszystkie pliki są w załączonym archiwum. Pod tymi linkami są aktualne wersje WebUI oraz Firmware: http://www.lteforum.at/mobilfunk/firmware-versionen-hi-non-hilink-e3372h-inkl-mod.2691 http://www.lteforum.at/mobilfunk/web-ui-versionen-e3372-hi-link-mods.2483 Należy pobrać obydwa pliki i rozpakować do jednego katalogu. 1. Zainstalować sterowniki z katalogu " Install Driver" według kolejności a) czasami trzeba też zainstalować sterowniki z katalogu " HUAWEI_DataCard_Driver_5.05.01.00" (instalacja na pewno nie zaszkodzi) 2. Uruchomić modem w trybie recovery według opisu z PDF (Tryb recovery) 3. Wgrać WebUI z katalogu " WEBUI Update_WEBUI_17.100.13.01.03_HILINK_Mod1.0" 4. Uruchomić wgrywanie firmware z katalogu " FW E3372h-153_Update_22.315.01.00.00_M_AT_05" a) tutaj u mnie wywalało kod błędu 13 5. Z katalogu " exit_download" uruchomić exit_download z parametrem COM12 gdzie 12 to numer portu dla "HUAWEI Mobile Connect - 3G PC UI Interface (COM12)" 6. Modem powinien w tym momencie przejść w tryb wgrania oprogramowania i w menadżerze urządzeń będzie widoczny wpis: a) FC - Application Interface (COM11) b) FC - PC UI Interface (COM10) Oczywiście numery portów COM mogą być całkiem inne 6. Uruchamiamy Huawei_Flasher_v2.exe z katalogu "Huawei_Flasher_v2_E3372h-607_21.110.99.02.00". W uruchomionym okienku wykryje modem i wypisze w okienku "FC - Application Interface (COM11)" a) w COM PORT(s) należy wybrać z listy lub wpisać ręcznie com port dla "FC - PC UI Interface (COM10)" b) klikamy READ INFO AT (powinny wyświetlić się informacje o modemie) c) klikamy SWITCH TO DM d) uruchamiamy plik go_hdlc.exe e) w programie Huawei_Flasher_v2 plikamy FLASH i wybieramy plik "E3372h-607_21.110.99.02.00.hmf" (teraz zacznie się wgranie firmware przejściowego) Po zakończeniu wyjmujemy modem z USB i wkładamy z powrotem. 7. Wchodzimy do katalogu " Sw_mode_E3372_new", edytujemy plik "sw_debug_mode.cmd" i wpisujemy w nim prawidłowy adres IP naszego modemu, za[pisujemy i uruchamiamy. 8. Uruchamiamy wgrywanie WebUI z katalogu " WEBUI Update_WEBUI_17.100.13.01.03_HILINK_Mod1.0" 9. Uruchamiamy wgrywanie Firmware z katalogu " FW E3372h-153_Update_22.315.01.00.00_M_AT_05" Po tych zabiegach modem wrócił do życia.
// Загрузчик usbloader.bin через аварийный порт для модемов на платформе Balong V7R2.
//
//
#include & lt; stdio.h & gt;
#include & lt; string.h & gt;
#include & lt; stdlib.h & gt;
//#include & lt; termios.h & gt;
//#include & lt; unistd.h & gt;
#include & lt; sys/types.h & gt;
#include & lt; sys/stat.h & gt;
#include & lt; fcntl.h & gt;
//#include & lt; arpa/inet.h & gt;
#ifndef WIN32
#include & lt; termios.h & gt;
#include & lt; unistd.h & gt;
#include & lt; arpa/inet.h & gt;
#else
#include & lt; windows.h & gt;
#include " wingetopt.h "
#include " printf.h "
#endif
#ifndef WIN32
int siofd;
struct termios sioparm;
#else
static HANDLE hSerial;
#endif
FILE* ldr;
//*************************************************
//* HEX-дамп области памяти *
//*************************************************
void dump(unsigned char buffer[],int len) {
int i,j;
unsigned char ch;
printf( " \n " );
for (i=0;i & lt; len;i+=16) {
printf( " %04x: " ,i);
for (j=0;j & lt; 16;j++){
if ((i+j) & lt; len) printf( " %02x " ,buffer[i+j] & 0xff);
else printf( " " );}
printf( " * " );
for (j=0;j & lt; 16;j++) {
if ((i+j) & lt; len) {
// преобразование байта для символьного отображения
ch=buffer[i+j];
if ((ch & lt; 0x20)||((ch & gt; 0x7e) & & (ch & lt; 0xc0))) putchar('.');
else putchar(ch);
}
// заполнение пробелами для неполных строк
else printf( " " );
}
printf( " *\n " );
}
}
//*************************************************
//* Рассчет контрольной суммы командного пакета
//*************************************************
void csum(unsigned char* buf, int len) {
unsigned int i,c,csum=0;
unsigned int cconst[]={0,0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF};
for (i=0;i & lt; (len-2);i++) {
c=(buf[i] & 0xff);
csum=((csum & lt; & lt; 4) & 0xffff)^cconst[(c & gt; & gt; 4)^(csum & gt; & gt; 12)];
csum=((csum & lt; & lt; 4) & 0xffff)^cconst[(c & 0xf)^(csum & gt; & gt; 12)];
}
buf[len-2]=(csum & gt; & gt; 8) & 0xff;
buf[len-1]=csum & 0xff;
}
//*************************************************
//* Отсылка командного пакета модему
//*************************************************
int sendcmd(unsigned char* cmdbuf, int len) {
unsigned char replybuf[1024];
unsigned int replylen;
#ifndef WIN32
csum(cmdbuf,len);
write(siofd,cmdbuf,len); // отсылка команды
tcdrain(siofd);
replylen=read(siofd,replybuf,1024);
#else
DWORD bytes_written = 0;
DWORD t;
csum(cmdbuf, len);
WriteFile(hSerial, cmdbuf, len, & bytes_written, NULL);
FlushFileBuffers(hSerial);
t = GetTickCount();
do {
ReadFile(hSerial, replybuf, 1024, (LPDWORD) & replylen, NULL);
} while (replylen == 0 & & GetTickCount() - t & lt; 1000);
#endif
if ((replylen == 0) || (replybuf[0] == 0xaa)) return 1;
return 0;
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void main(int argc, char* argv[]) {
#ifndef WIN32
struct termios sioparm;
#else
char device[20] = " \\\\.\\COM " ;
DCB dcbSerialParams = {0};
COMMTIMEOUTS CommTimeouts;
#endif
//char* lptr;
unsigned int i,res,opt,datasize,pktcount,adr;
int nblk; // число блоков для загрузки
int bl; // текущий блок
unsigned char cmdhead[14]={0xfe,0, 0xff};
unsigned char cmddata[1040]={0xda,0,0};
unsigned char cmdeod[5]={0xed,0,0,0,0};
struct {
int lmode; // режим загрузки: 1 - прямой старт, 2 - через перезапуск A-core
int size; // размер блока
int adr; // адрес загрузки блока в память
int offset; // смещение до блока от начала файла
} blk[10];
#ifndef WIN32
unsigned char devname[50]= " /dev/ttyUSB0 " ;
#else
char devname[50]= " " ;
#endif
while ((opt = getopt(argc, argv, " hp:sa: " )) != -1) {
switch (opt) {
case 'h':
printf( " \n Утилита предназначена для аварийной USB-загрузки модемов E3372S\n\n\
%s [ключи] & lt; имя файла для загрузки & gt; \n\n\
Допустимы следующие ключи:\n\n\
-p & lt; tty & gt; - последовательный порт для общения с загрузчиком (по умолчанию /dev/ttyUSB0\n\
\n " ,argv[0]);
return;
case 'p':
strcpy(devname,optarg);
break;
}
}
if (optind & gt; =argc) {
printf( " \n - Не указано имя файла для загрузки\n " );
return;
}
#ifdef WIN32
if (*devname == '\0')
{
printf( " \n - Последовательный порт не задан\n " );
return;
}
#endif
#ifndef WIN32
// Настройка SIO
siofd = open(devname, O_RDWR | O_NOCTTY |O_SYNC);
if (siofd == -1) {
printf( " \n - Последовательный порт %s не открывается\n " , argv[1]);
return;
}
bzero( & sioparm, sizeof(sioparm));
sioparm.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
sioparm.c_iflag = 0; // INPCK;
sioparm.c_oflag = 0;
sioparm.c_lflag = 0;
sioparm.c_cc[VTIME]=1; // таймаут
sioparm.c_cc[VMIN]=1; // 1 байт минимального ответа
tcsetattr(siofd, TCSANOW, & sioparm);
tcflush(siofd,TCIOFLUSH); // очистка выходного буфера
#else
strcat(device, /*(char*)*/devname);
hSerial = CreateFileA(device, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (hSerial == INVALID_HANDLE_VALUE)
{
printf( " \n - Последовательный порт COM%s не открывается\n " , devname);
return;
}
ZeroMemory( & dcbSerialParams, sizeof(dcbSerialParams));
dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
dcbSerialParams.BaudRate = CBR_115200;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
dcbSerialParams.fBinary = TRUE;
dcbSerialParams.fDtrControl = DTR_CONTROL_ENABLE;
dcbSerialParams.fRtsControl = RTS_CONTROL_ENABLE;
if (!SetCommState(hSerial, & dcbSerialParams))
{
printf( " \n - Ошибка при инициализации COM-порта\n " , devname);
CloseHandle(hSerial);
return;
}
CommTimeouts.ReadIntervalTimeout = MAXDWORD;
CommTimeouts.ReadTotalTimeoutConstant = 0;
CommTimeouts.ReadTotalTimeoutMultiplier = 0;
CommTimeouts.WriteTotalTimeoutConstant = 0;
CommTimeouts.WriteTotalTimeoutMultiplier = 0;
if (!SetCommTimeouts(hSerial, & CommTimeouts))
{
printf( " \n - Ошибка при инициализации COM-порта\n " , devname);
CloseHandle(hSerial);
return;
}
#endif
ldr=fopen(argv[optind], " rb " );
if (ldr == 0) {
printf( " \n Ошибка открытия %s " ,argv[optind]);
return;
}
// Прверяем сигнатуру usloader
fread( & i,1,4,ldr);
if (i != 0x20000) {
printf( " \n Файл %s не является загрузчиком usbloader\n " ,argv[optind]);
return;
}
fseek(ldr,36,SEEK_SET); // начало описателей блоков для загрузки
// Разбираем заголовок
for(nblk=0;nblk & lt; 10;nblk++) {
fread( & blk[nblk].lmode,1,4,ldr);
fread( & blk[nblk].size,1,4,ldr);
fread( & blk[nblk].adr,1,4,ldr);
fread( & blk[nblk].offset,1,4,ldr);
if (blk[nblk].lmode == 0) break;
}
printf( " \n Найдено %i блоков для загрузки " ,nblk);
// главный цикл загрузки - загружаем все блоки, найденные в заголовке
for(bl=0;bl & lt; nblk;bl++) {
printf( " \n Загрузка блока %i, адрес=%08x, размер=%i\n " ,bl,blk[bl].adr,blk[bl].size);
fseek(ldr,blk[bl].offset,SEEK_SET);
// фрмируем пакет начала блока
*((unsigned int*) & cmdhead[4])=htonl(blk[bl].size);
*((unsigned int*) & cmdhead[8])=htonl(blk[bl].adr);
cmdhead[3]=blk[bl].lmode;
// отправляем пакет начала блока
res=sendcmd(cmdhead,14);
if (!res) {
printf( " \nМодем отверг пакет заголовка\nОбраз пакета: " );
dump(cmdhead,14);
return;
}
// Цикл поблочной загрузки данных
datasize=1024;
pktcount=1;
for(adr=0;adr & lt; blk[bl].size;adr+=1024) {
if ((adr+1024) & gt; =blk[bl].size) datasize=blk[bl].size-adr;
#ifndef WIN32
fprintf(stderr, " \r Адрес: %08x, пакет# %i размер: %i " ,blk[bl].adr+adr,pktcount,datasize);
#else
printf( " \r Адрес: %08x, пакет# %i размер: %i " ,blk[bl].adr+adr,pktcount,datasize);
#endif
// читаем порцию данных
if (datasize != fread(cmddata+3,1,datasize,ldr)) {
printf( " \n Неожиданный конец файла\n " );
return;
}
// готовим пакет данных
cmddata[1]=pktcount;
cmddata[2]=(~pktcount) & 0xff;
pktcount++;
if (!sendcmd(cmddata,datasize+5)) {
printf( " \nМодем отверг пакет данных\nОбраз пакета: " );
dump(cmddata,datasize+5);
return;
}
}
// Фрмируем пакет конца данных
cmdeod[1]=pktcount;
cmdeod[2]=(~pktcount) & 0xff;
if (!sendcmd(cmdeod,5)) {
printf( " \nМодем отверг пакет конца данных\nОбраз пакета: " );
dump(cmdeod,5);
}
}
printf( " \n Загрузка окончена\n " );
}
1. Zainstalowaæ sterowniki z katalogu " [0] Install Driver " wed³ug kolejnoci [1,2,3]
a) czasami trzeba te¿ zainstalowaæ sterowniki z katalogu " [6] HUAWEI_DataCard_Driver_5.05.01.00 " (instalacja na pewno nie zaszkodzi)
2. Uruchomiæ modem w trybie recovery wed³ug opisu z PDF (Tryb recovery)
3. Wgraæ WebUI z katalogu " [3] WEBUI Update_WEBUI_17.100.13.01.03_HILINK_Mod1.0 "
4. Uruchomiæ wgrywanie firmware z katalogu " [4] FW E3372h-153_Update_22.315.01.00.00_M_AT_05 "
a) tutaj u mnie wywala³o kod b³êdu 13
5. Z katalogu " [5] exit_download " uruchomiæ exit_download z parametrem COM12 gdzie 12 to numer portu dla " HUAWEI Mobile Connect - 3G PC UI Interface (COM12) "
6. Modem powinien w tym momencie przejæ w tryb wgrania oprogramowania i w menad¿erze urz¹dzeñ bêdzie widoczny wpis:
a) FC - Application Interface (COM11)
b) FC - PC UI Interface (COM10)
Oczywicie numery portów COM mog¹ byæ ca³kiem inne
6. Uruchamiamy Huawei_Flasher_v2.exe z katalogu " [1]Huawei_Flasher_v2_E3372h-607_21.110.99.02.00 " .
W uruchomionym okienku wykryje modem i wypisze w okienku " FC - Application Interface (COM11) "
a) w COM PORT(s) nale¿y wybraæ z listy lub wpisaæ rêcznie com port dla " FC - PC UI Interface (COM10) "
b) klikamy READ INFO AT (powinny wywietliæ siê informacje o modemie)
c) klikamy SWITCH TO DM
d) uruchamiamy plik go_hdlc.exe
e) w programie Huawei_Flasher_v2 plikamy FLASH i wybieramy plik " E3372h-607_21.110.99.02.00.hmf " (teraz zacznie siê wgranie firmware przejciowego)
Po zakoñczeniu wyjmujemy modem z USB i wk³adamy z powrotem.
7. Wchodzimy do katalogu " [2] Sw_mode_E3372_new " , edytujemy plik " sw_debug_mode.cmd " i wpisujemy w nim prawid³owy adres IP naszego modemu, za[pisujemy i uruchamiamy.
8. Uruchamiamy wgrywanie WebUI z katalogu " [3] WEBUI Update_WEBUI_17.100.13.01.03_HILINK_Mod1.0 "
9. Uruchamiamy wgrywanie Firmware z katalogu " [4] FW E3372h-153_Update_22.315.01.00.00_M_AT_05 "
Po tych zabiegach modem wróci³ do ¿ycia.
Witam.
Ostatnio dostałem do „zabaw” modem 3372h-153, z którym nie miałem wcześniej do czynienia. Plan był prosty – dodad polski język i umożliwid korzystanie tylko z LTE,
czego oryginalny soft nie umożliwiał. Po wielu próbach z różnymi softami i różnymi „przepisami” na odblokowanie modemu dotarłem do tego softu:
E3372h-153_Update_22.200.15.00.00_00
PRZESTRZEGAM przed tym badziewiem! Po wgraniu tego oprogramowania nie można wgrad żadnego innego, nie można zmienid WebUI, tracimy komunikację na COM’ach,
tracimy tym samym telnet!
Po godzinach odpytywania wujka Google dotarłem do rosyjskiego forum i takiego oto wpisu(tłumaczenie z translatora):
„Jak się okazało, firmware 22.200.15.00.00 po prostu nie może zmienid.
Musimy zrobid poprawkę przy użyciu kernel_22.200.09.00.00.bin.
Lub " igłą " . Jeśli nie ma kodu w rękach OEM, tylko " igła " , odnosząc ujawnił firmware 22.200.15.00.00 po prostu nie może zmienid.
Musimy zrobid poprawkę przy użyciu kernel_22.200.09.00.00.bin.
Lub " igłą " . Jeśli nie ma kodu w rękach OEM, tylko " Igła " .”
Przy braku komunikacji z modemem wprowadzenie poprawki kernela odpada, więc zostanie wspominana „igła”…
Igła – wprowadzenie modemu w tryb serwisowy/awaryjny dzięki któremu możemy odratowad uwalony modem. Sprowadza się do zwarcia jednego pinu z masą i
podłączenia pod USB.
No dobra! Ale jak się dostad do środka, jeżeli modem jest klejony kropelką i rozłożenie obudowy=połamana obudowa? Po porównaniu konstrukcji obudowy i
umiejscowieniem pinu na płycie, stwierdziłem, że można wypalid lutownicą małą dziurkę w obudowie i ją podskrobad nożem. Efekt poniżej:
Ok. Teraz potrzebujemy jakiś w miarę sztywny drut, jeden koniec nawijamy na masę, czyli USB, drugi będziemy zwierad do naszego pinu:
Jesteśmy prawie gotowi. Procedurę ratunkową przeprowadziłem pod Windows XP SP-3. Windows 8.1 64bit nie rozpoznawał modemu. Przydatna jeszcze będzie
latarka/lampka jeżeli mamy za mało światła i przedłużacz USB - łatwiej podpiąd do przedłużacza niż bezpośrednio do portu w kompie, ale to już kwestie indywidualne.
Zwieramy pin z masą, podpinamy pod USB i rozwieramy. Na liście urządzeo pojawia się nasz modem:
Jak widad - mój modem podpiął się pod COM5.
Rozpakowujemy archiwum z linka poniżej, dla wygody na dysk c:, d: lub inny kopiujemy pliki " balong_usbdload.exe. " oraz " usblsafe.bin " , uruchamiamy konsolę(menu start-- & gt; uruchom--- & gt; cmd), przechodzimy na dysk wybrany przez nas dysk i wpisujemy polecenie:
balong_usbdload -p5 usblsafe.bin
gdzie p5 to port COM5, dla COM4 będzie to p4, dla COM3 p3 itd.
Enter i... czekamy aż zakooczy się mielenie i pojawi się znak zachęty:
Ok. Mielenie się zakooczyło, dioda modemu szybko miga na biało. Jako pierwsze wgrywamy WebUI:
Update_WEBUI_17.100.06.00.03_V7R2_CPIO_Mod1.3
Gdy wgrywanie dobiegnie kooca, zamykamy kreatora, nie wypinamy modemu i uruchamiamy wgrywanie firmware:
E3372h-153_Update_22.180.05.00.00_M_ADB_TLN_01
Czekamy, czekamy i tadam! Modem żyje!