Насколько я понимаю принцип работы различных утилит такой:
1) просканировать все USB порты на наличие подключенных устройств
2) определить контроллер (послать определённую команду)
3) исходя из точного названия контроллера определить память (послать команду "считать FID")
- тут у утилиты должна быть база данных, в которой можно найти, то, что соответствует этому FID.
например у ALCORMP секция выглядит так:
Brand=Hynix
FlashName=HY27UV08BG5M
FID=0xAD,0xD5,0x55,0xA5,0x00,0x00
FlashType=MLC
Size=4096
MaxBank=1
CE=2
PlaneNo=2
DieBlockNo=8192
PageNo=128
SectorNo=4
16Bit=0
MarkType=11
ECCMode=0
CMD=81
У SMI так:
@ AD D5 55 A5 86 80 02 83 0F 0F // Hynix HY27UV08BG5M G0212
Напрашивается вопрос: Если ALCOR может все определить по БД , то как SMI может определить MLC/SLC/TLC, и все остальное? Видимо как-то по-другому.
3.1) ? попытаться определить размер (кол-во чипов, кол-во CE, размер каждого чипа)
4) выбирает файлы прошивки или спрашивает, что пользователь хочет залить.
5) выбирает алгоритм поиска BB (LLF)
6) прошивает/форматирует
_________________
Как вычислить размер по количеству блоков? Наверное как-то так:
(Size=4096MB)/(DieBlockNo=8192)/(CE=2)=0,25MB - размер одного блока
0,25MB*65536шт = 16384 MB = 16GB
Могу и ошибаться )
__________________
Насчет того, что она определяетса как 16ГБ - это из-за того , что для распознавания памяти утилиты используют только первые 4 группы FID (AD D5 55 A5), а они могут быть одинаковые у нескольких похожих планок.