Нетобзор - форум про интернет

Пожалуйста, войдите или зарегистрируйтесь.


Расширенный поиск  

Автор Тема: qtools-набор инструментов для работы с flash модемов на чипсете qualcomm  (Прочитано 216661 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Energizer

  • Гость

надо аккуратно причесать весь код - заменить прямые обращения к регистрам контроллера на интерфейсные подпрограммы, специфичные для каждого чипсета.
очень будет хорошо ;-)

Осталсь разобраться, как этот контроллер работает и как его правильно программировать.
ну так я тебе расскажу :-) и покажу исходники рабочего кода флешера -вечерком в почту могу забросить. кстати сам тоже начинал именно с 6280 - на его примере и строил предположения о правильных командах споткнулся на одной засаде  - почему не знаю но нужно нулить один из регистров
перед работой с буфером на запись вроде..  давно в код этого флешера не глядел..
Записан

forth32

  • Гость

Ну, судя по всему, там все просто. Особенности у чипсета такие:
- секторный буфер лежит в адресном пространстве ДО регистров.
- адресный регистр всего 1, используется в нем всего 16 бит, что ограничивает объем флешки до 128М
- нет EXEC-регистра. Команда начинает выполняться сразу после записи кода в CMD-регистр.
- нет регистра CFG0, поскольку ВСН чип не поддерживает. Вместо него есть регистр COMMON_CFG, и формат у него совсем другой.
- нет регистра ECC_CFG,

Завтра попробую отправить в конроллер команду чтения сектора и посмотрю, что получится. А так, по идее, адаптироваться к этому чипсету особой сложности не представляет...
Записан

Energizer

  • Гость

Ну, судя по всему, там все просто.

действительно не сложно если знать куда смотреть ;-) в целом все правильно..
- адресный регистр всего 1, используется в нем всего 16 бит, что ограничивает объем флешки до 128М

немного не так - 256метров  не вопрос - не считал но возможно и 512 поместится - еще возможно существуют 2х банковые флеши  -их не встречал  в прицепе к этим камням. но в списке поддерживаемых по моему их видел..

Скрытый текст
вот основные регистры которые нас интересуют
#define CNTRBASE    0x60000000
#define ADDR         (CNTRBASE+0x300)
#define CMD         (CNTRBASE+0x304)
#define CFG1         (CNTRBASE+0x328)
#define CFG2         (CNTRBASE+0x330)

таблица команд полностью совпадает с контроллерами ранних семейств и конечно с MSM6280 тоже
под рукой не обнаружил - в доке есть..

вот фрагмент кода стирания блока.
void nand_blockerase(unsigned int block) {
           DWORD addr;         
           memory_poke(CMD,0,1);
           nand_wait();
          addr=block*page_size*pages_per_block;
           memory_poke(ADDR,addr,1);
           memory_poke(CFG2,0,1);
           memory_poke(CMD,4,1);
           Sleep(300);  // не помню почему так долго.. может чтобы в глазах не рябило :)
           printf("X");
}

чтение  по принципу --> софтовый сброс контроллера -ожидание ини -> конфиг CFG1 в зависимости от организации флешки -> нулим регистр CFG2 -> засылаем адрес -> засылаем команду ->ожидаем перемещения данных в буфер->читаем нулевой сектор (если секторов четыре-читаем еще три раза с ожиданием перемещения) 
запись почти аналогично == софт сброс-> ожидание -> конфиг флешки -> конфиг 2 в ноль все разряды ->данные в буфер- >команда записи (если секторов четыре-то повторить еще три раза не меняя адреса ,не конфигуря еще раз регистры и конечно не сбрасывая) 

вот такие конфиги у меня получились рабочими -
                            if (nand_cpsty==64)   {  memory_poke(CFG1,0x20b,1); }
                            if (nand_cpsty==128)  {  memory_poke(CFG1,0x253,1); }
                            if (nand_cpsty==256)  {  memory_poke(CFG1,0x2E1,1); }

но эти конфиги самых распространенных флешек
последний бит управляет движком ECC -традиция ;-)
Скрытый текст
            if (nid==0xAD36||nid==0xAD76||nid==0xEC36||nid==0x9836||nid==0xEC76||nid==0x9876) { // сюда добавлять id новые  64 метра
                 printf("==    Type NAND  recognized  !! == capacity 64 Mb - 16 bit  \n");
                 printf("==    PageSize: 0x200, Page-per-Block: 0x20 ,Blocks-per-Device: 0x1000\n");                                           
                 pages_per_block=0x20;  //  свойственно для флеша с размером 64M
                 page_size=0x200;  //
                 blocks_per_device=0x1000;
                 nand_cpsty=64;
                 y=0; 
                  }
            if (nid==0xAD78||nid==0xAD79||nid==0xEC78||nid==0xEC79||nid==0x9878||nid==0x9879) { // сюда добавлять id новые  64 метра
                 printf("==    Type NAND  recognized  !! == capacity 128 Mb - 16 bit  \n");
                 printf("==    PageSize: 0x200, Page-per-Block: 0x20 ,Blocks-per-Device: 0x2000\n");
                 pages_per_block=0x20;  //  свойственно для флеша с размером 128M но с маленькими страницами
                 page_size=0x200;  //
                 blocks_per_device=0x2000;
                 nand_cpsty=64;
                 y=0;
                  }                 
            if (nid==0xADB1||nid==0xADA1||nid==0xECB1||nid==0xECA1||nid==0x98B1||nid==0x98A1) { // сюда добавлять id новые  128 метров
                 printf("==    Type NAND  recognized  !!  == capacity 128 Mb - 16 bit \n");
                 printf("==    PageSize: 0x800, Page-per-Block: 0x40 ,Blocks-per-Device: 0x400\n");                                           
                 pages_per_block=0x40;  //  свойственно для флеша с размером 128M
                 page_size=0x800;
                 blocks_per_device=0x400;
                 nand_cpsty=128;
                 y=0;   
                  } 
            if (nid==0xADAA||nid==0xECAA||nid==0x98AA||nid==0xC8AA||nid==0xC8BA||nid==0xADBA||nid==0xECBA||nid==0x98BA) { // сюда добавлять id новые  256 метров
                 printf("==    Type NAND  recognized  !! == capacity 256 Mb - 16 bit  \n");
                 printf("==    PageSize: 0x800, Page-per-Block: 0x40 ,Blocks-per-Device: 0x800\n");
                 pages_per_block=0x40;  //  свойственно для флеша с размером 256M
                 page_size=0x800;
                 blocks_per_device=0x800;
                 nand_cpsty=256;
                 y=0;
                  }
            if (nid==0xADBC||nid==0xECBC||nid==0x98BC) { // сюда добавлять id новые  512 метров
                 printf("==    Type NAND  recognized  !! == capacity 512 Mb - 16 bit  \n");
                 printf("==    PageSize: 0x800, Page-per-Block: 0x40 ,Blocks-per-Device: 0x1000\n");
                 pages_per_block=0x40;  //  свойственно для флеша с размером 256M
                 page_size=0x800;
                 blocks_per_device=0x1000;
                 nand_cpsty=512;
                 y=0;
                  } 
не факт что 512 работает под этим контроллером - не попадалась но на шину адреса вроде должна ложиться
[свернуть]
нормальных исходников пока на этом компе не обнаружил-только наброски -но точно рабочие..
найду полный нормальный отправлю тебе на почту..
[свернуть]
Записан

flyko

  • Новичок
  • *
  • Благодарность: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 22
  • Город: -
  • Модем: EC5321
  • Провайдер: Интертелеком
  • Тариф: СБ120

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

sand_rey

  • Модератор
  • *
  • Благодарность: +165/-0
  • Оффлайн Оффлайн
  • Сообщений: 575
  • Модем: MiFi8000
  • Провайдер: lifecell
  • Тариф: Гаджет роутер
  • Антенна: Antex ZETA-F mimo

Захотелось поэкспериментировать с роутером Pantech MHS291L - снял дамп с рабочего.размер дампа 0x1000. позатирал на рабочем в фастбуте все разделы
dev:    size   erasesize  name
mtd0: 00e00000 00020000 "boot"
mtd1: 002c0000 00020000 "sbl2"
mtd2: 002a0000 00020000 "rpm"
mtd3: 00a00000 00020000 "efs2"
mtd4: 004a0000 00020000 "dsp1"
mtd5: 03200000 00020000 "dsp2"
mtd6: 00280000 00020000 "phoneinfo"
mtd7: 00580000 00020000 "bootdl"
mtd8: 00100000 00020000 "appslog"
mtd9: 015c0000 00020000 "otadm"
mtd10: 00200000 00020000 "aboot"
mtd11: 00140000 00020000 "mibib"
mtd12: 01500000 00020000 "cache"
mtd13: 00200000 00020000 "misc"
mtd14: 00b00000 00020000 "recovery"
mtd15: 01500000 00020000 "recoveryfs"
mtd16: 01500000 00020000 "fota4fs"
mtd17: 06a00000 00020000 "userdata"
mtd18: 0ca00000 00020000 "oemdata"

модем ушел в PBL.

залил qwdirect-ом дамп
Загрузка файла loaders\ENPRG9x15v2p.bin
 Адрес загрузки: 2a000000
 Размер файла: 75776
 Загружено: 75776
 Запуск загрузчика...ok
 Отсылка hello...ok
 Flash: Micron MT29F4G08ABC, NAND 512MiB 1.8V 8-bit
 Версия протокола: 3
 Максимальный размер пакета: 1024 байта
 Размер сектора: 512 байт
 Размер страницы: 2048 байт (4 секторов)
 Размер OOB: 64 байт
 Общий размер flash = 4096 блоков (512 MB)

 Отсылка hello...ok
 Flash: Micron MT29F4G08ABC, NAND 512MiB 1.8V 8-bit
 Версия протокола: 3
 Максимальный размер пакета: 1024 байта
 Размер сектора: 512 байт
 Размер страницы: 2048 байт (4 секторов)
 Размер OOB: 64 байт
 Общий размер flash = 4096 блоков (512 MB)

 Запись из файла fullraw_291_ok.bin, стартовый блок 000, размер 1000
 Режим записи: сырой образ без рассчета ЕСС
 block: 0fff   page:3f
роутер успешно был восстановлен.

Просто до этого был дамп размером 0xfb0(даже не знаю,почему такой дамп получился,возможно я тогда использовал старые версии qtools)  - после которого роутер загружался только до фастбута,но повторная прошивка апдейтером полностью восстанавливала работу роутера -но теперь это уже и не важно.
В общем,благодаря qtools,а также нахождению "волшебной точки", на данный момент- Pantech 295/291,Huawei EC315(это те,которые у меня были в наличии) софтово полностью восстанавливаемые
« Последнее редактирование: 11 Июня 2015, 23:00:53 от sandrey »
Записан

test

  • Гость

sandrey, теперь тебе еще и в хуавеях серийки поменять - дабы клоноводством не заниматься - и будешь реальный парень, а не "еще один местный "чайнеГ"")))...
Записан

Mr.Alex

  • WhatsApp: 066-2552121
  • Модератор форума
  • *
  • Благодарность: +1457/-0
  • Оффлайн Оффлайн
  • Сообщений: 10739
  • Город: Kharkiv city
  • Модем: вже немає
  • Провайдер: сусіди
  • Тариф: краду в них
  • Антенна: через WiFi
  • Раздаю БАНаны, налетай! Ночной и злой модератор.

теперь тебе еще и в хуавеях серийки поменять
test, так "подтяни" его в этом вопросе, у всех гуру - как это полагается - должны быть достойные "учениГИ". :)

test

  • Гость

так это ж мой любимый учениГ)... после тебя, конечно)))...
Записан

Vanya3g

  • Новичок
  • *
  • Благодарность: +3/-0
  • Оффлайн Оффлайн
  • Сообщений: 86
  • Город: Харьков
  • Модем: Sierra W802
  • Провайдер: Интертелеком
  • Тариф: Супер Безлимит

Ребят, научите и меня! Буду людям помогать! добро и радость приносить в каждый дом. :)
Записан

sand_rey

  • Модератор
  • *
  • Благодарность: +165/-0
  • Оффлайн Оффлайн
  • Сообщений: 575
  • Модем: MiFi8000
  • Провайдер: lifecell
  • Тариф: Гаджет роутер
  • Антенна: Antex ZETA-F mimo

sandrey, теперь тебе еще и в хуавеях серийки поменять - дабы клоноводством не заниматься

так я вот пока даже и не знаю как работать в этом направлении с непассвордными девайсами

test, так "подтяни" его в этом вопросе

было бы неплохо *:)):))

Ребят, научите и меня! Буду людям помогать! добро и радость приносить в каждый дом.

ну так - любой каприз за ваши деньги :)
Записан

Mr.Alex

  • WhatsApp: 066-2552121
  • Модератор форума
  • *
  • Благодарность: +1457/-0
  • Оффлайн Оффлайн
  • Сообщений: 10739
  • Город: Kharkiv city
  • Модем: вже немає
  • Провайдер: сусіди
  • Тариф: краду в них
  • Антенна: через WiFi
  • Раздаю БАНаны, налетай! Ночной и злой модератор.

test, "чайнеГам" твой хелп нужен.. пантеч 190 с красным светодиодом и нулевой реакцией. найдена "волшебная точка": подать питание по юсб и сразу же "коротнуть" на "землю" примерно на полсекунды - "выпадает" в эмердженси.

апдейтером "подхватывается", шьётся, но все бестолку - видимо нужно ифс затереть, а у "чайнеГов" - не получается апдейтером, посему - ви нид хелп.. pl

Сергей (интертелеком)Автор темы

  • Модератор 3G дилер
  • *
  • Благодарность: +425/-0
  • Оффлайн Оффлайн
  • Сообщений: 2516
  • Город: Одеса
  • Модем: разные
  • Провайдер: интертелеком-(представитель)
  • Тариф: дилерский
  • Готов помочь в любое врямя по возможности

у меня с 315м проблема не получяется восстановить :(
Записан
Прошиваю модемы онлайн!
Подключаю к Интертелекому онлайн   CDMA iPhone 4 и iPad 2
На вооружении имеется -    DC-Unlocker.   DFS Evolution.   RIFF Box.   Omnia Repair Tool.   Medusa PRO Box.   Volcano box . Octoplus LG Tool + Samsung Tool.  InfinityBox. RBSoft Mobile Tool. MRT Box.  TL866. BST

test

  • Гость

Mr.Alex, в асю. стиралку EFS для pantech 190 я сделал давным давно.

видел уже несколько ec315-тых, постоянно висящих в эмердженси. и не реагирующих на правильные прошивки ни жтаг-ом, ни любым другим способом.
есть мнение, что проблема связана с SFS процессора и QFUSE, определяющими порядок загрузки устройства. лечение - только замена mdm6600. если есть другие мнения и способы устранения - интересно было бы услышать.
Записан

test

  • Гость

баба з возу - кобыла в курсе дела...
Записан

test

  • Гость

я почти великий гуру))), но где-то ошибка)...
Download mode port #: 19

 Найден блок идентификации загрузчика
 Чипсет: MDM6600
 Файл загрузчика: loaders\ENPRG6695p1.bin
 Адрес загрузки: 20012000
 Размер файла: 156180
 Загружено: 156180
 Запуск загрузчика...ok

Bootloader port #: 20
 Отсылка hello...ok
 Чипсет: MDM6600  (70000000)
 Флеш-память: Elite Semiconductor FM64D1G12A, NAND 128MiB 1,8V 16-bit
 Версия протокола: 3
 Максимальный размер пакета: 1024 байта
 Размер сектора: 512 байт
 Размер страницы: 2048 байт (4 секторов)
 Размер OOB: 64 байт
 Тип ECC: R-S, 4 бит
 Общий размер флеш-памяти = 1024 блоков (128 MB)


* 000 NAND_FLASH_CMD         = 0008000b
* 004 NAND_ADDR0             = 0fc00000
* 008 NAND_ADDR1             = 00000000
* 00c NAND_CHIP_SELECT       = 00000002
* 010 NANDC_EXEC_CMD         = 00000000
* 014 NAND_FLASH_STATUS      = 00003020
* 018 NANDC_BUFFER_STATUS    = ffff0000
* 020 NAND_DEV0_CFG0         = aa5400c0
* 024 NAND_DEV0_CFG1         = 0004745e
* 028 NAND_DEV0_ECC_CFG      = 00000000
* 040 NAND_FLASH_READ_ID     = 5580b1c8
* 044 NAND_FLASH_READ_STATUS = 00000000
* 048 NAND_FLASH_READ_ID2    = 00000000
* 064 FLASH_MACRO1_REG       = 00000000
* 070 FLASH_XFR_STEP1        = 20002180
* 074 FLASH_XFR_STEP2        = 21806198
* 078 FLASH_XFR_STEP3        = 21e0a180
* 07c FLASH_XFR_STEP4        = 61f0e000
* 080 FLASH_XFR_STEP5        = a1e00000
* 084 FLASH_XFR_STEP6        = 21800000
* 088 FLASH_XFR_STEP7        = e000c000
* 0a0 FLASH_DEV_CMD0         = 1080d060
* 0a4 FLASH_DEV_CMD1         = f00f3000
* 0a8 FLASH_DEV_CMD2         = f0ff7090
* 0ac FLASH_DEV_CMD_VLD      = 0000001d
* 0d0 FLASH_DEV_CMD3         = f0ff7090
* 0d4 FLASH_DEV_CMD4         = 00800000
* 0d8 FLASH_DEV_CMD5         = 00f30094
* 0dc FLASH_DEV_CMD6         = 000040e0
* 0e8 NAND_ERASED_CW_DET_CFG = 00000003
* 0ec NAND_ERASED_CW_DET_ST  = 00000033
* 0f0 EBI2_ECC_BUF_CFG       = 000001ff
Bootloader port #: 20

 Запись из файла EC315_~1_conv.bin, стартовый блок 000, размер 400
 Режим записи: сырой образ без расчета ЕСС
 Формат данных: 512+16
 Блок: 0000   Страница: 0d
 Ошибка в процессе обработки команды чтения, требуется 4 байт, получено 0

 Ошибка в процессе обработки команды чтения, требуется 4 байт, получено 0

 Ошибка в процессе обработки команды чтения, требуется 4 байт, получено 0

 Ошибка в процессе обработки команды чтения, требуется 4 байт, получено 0
 Блок: 0000   Страница: 0e

лоадер запустился, флешка увиделась, но пишет только до d страниц.
Записан