Просьба к пользователям. Нужно собрать данные по eMMC

В продолжение темы eMMC Life Time Estimation - #5 от пользователя Aleksandr_Khlebnikov
прошу пользователей прислать скриншот виртуального устройства my_wirenboard/wb-rules/eMMC_Life_Time_Estimation/eMMC_Life_Time_Estimation.js at main · HexProf/my_wirenboard · GitHub
В выводе нет никаких персональных данных. Я собираю соответствие ID микросхем памяти eMMC и ревизии железа контроллера. Для того, чтобы сделать человекопонятное виртуальное устройство, которое будет предупреждать о приближающихся проблемах с флешкой контроллера.
Текущая реализация показывает в “заводских попугаях”. Я же хочу сделать нормальный вывод в понятной форме с алертом при наступлении критического значения.
Присылать или сюда или в телеграм hexprof или на почту me@hexprof.ru Куда удобнее.
Спасибо за Ваш вклад.


1 лайк

Добрый день.
Насколько я понимаю нужны

root@wirenboard-AYK5U4TB:~# cat /sys/block/mmcblk0/device/manfid
0x000032
root@wirenboard-AYK5U4TB:~# cat /sys/block/mmcblk0/device/name
MMC64G

Ну и партия, то есть

8.5.1B/2G 1.2C-2G

А данные из базы для этого не подойдут?
Там про флешку есть например

Name               Field # CID_Slice  
Manufacturer ID    MID   8 [127:120] = 0x32 
Reserved                 6 [119:114] = 0x00 
Device/BGA         CBX   2 [113:112] = 0x1 
OEM/Application ID OID   8 [111:104] = 0x01 
Product name       PNM   48 [103:56] = 0x4d4d43363447 
Product revision   PRV   8   [55:48] = 0x51 
Product serial num PSN   32  [47:16] = 0xdab99be1 
Manufacturing date MDT   8    [15:8] = (0x4b) 4 - 2024 
CRC7 checksum      CRC   7     [7:1] = 0x04 
not used, always 1       1     [0:0] = 0x1 
1 лайк

Да, и их соответствие аппаратной платформе. Но глобально - только они, так как по ним будет делаться выборка результата.

Там нет name, а по нему мне гуглить даташит.

Я просто оформил это как виртуальное устройство для упрощения пользователям. Вирт сделать проще, чем командная строка. Ну не для всех, конечно.

Вот:

NULL NULL NULL
008G70 ХХ 7.3.3E/3 669/1
008GB0 ХХХ 7.3.3E/6 667/1
58A43A ХХХ 7.4.3G/1G1 1D/L-2GS
88A19C ХХХ 7.3.4B/2 679
88A398 ХХХХХХХ 7.3.4L/4 1D/E-1G
AJTD4R Х 8.4.4D/2G 1.2C-2G
AS08FC ХХХХ 7.3A_Test 637
CJTD4R ХХ 7.3.3B/4 648
CS004 ХХХХ 7.3.4E/7 1D/A
DG4008 ХХХХХ 7.3B/1 637
IX2964 ХХХ 7.3B/2GI 633
JS08AC ХХХ 7.3.4K/3 1D/E-1G
MMC64G ХХХХХ 7.3B/2GC 636
Q2J55L ХХХ 7.2.1A 576
SLD64G ХХ 7.3.4B/3 677

Количество я убрал. Это для WB7.

Вот я слепой. Вот же имя в ASCII.
А это что за база? У mmc другой формат вывода

База тестов. Вот тут про это немного.
То есть любое устройство тестируется, результаты тестирования складываются в SQL. Правда данные флешки в blob, но тоже можно посмотреть.

Спасибо! А Manufacturer ID можно в эту же табличку?
Я просто не знаю в пределах одного производителя данные одинаково интерпретируются или нет.

NULL NULL NULL
008G70 7.3.3E/3 669/1 8 [127:120] = 0x11
008GB0 7.3.3E/6 667/1 8 [127:120] = 0x11
58A43A 7.4.3G/1G1 1D/L-2GS 8 [127:120] = 0xd6
88A19C 7.3.4B/2 679 8 [127:120] = 0x88
88A398 7.3.4L/4 1D/E-1G 8 [127:120] = 0xd6
AJTD4R 8.4.4D/2G 1.2C-2G 8 [127:120] = 0x15
AS08FC 7.3A_Test 637 8 [127:120] = 0x52
CJTD4R 7.3.3B/4 648 8 [127:120] = 0x15
CS004 7.3.4E/7 1D/A NULL
DG4008 7.3B/1 637 8 [127:120] = 0x45
IX2964 7.3B/2GI 633 8 [127:120] = 0x70
JS08AC 7.3.4K/3 1D/E-1G 8 [127:120] = 0xf2
MMC64G 7.3B/2GC 636 8 [127:120] = 0x32
Q2J55L 7.2.1A 576 NULL
SLD64G 7.3.4B/3 677 8 [127:120] = 0x88

Поиграл с substring_index для blob, почти выиграл. После “=” он и есть.

1 лайк

Спасибо огромное!

1 лайк

Я так понимаю никакой закономерности от номера партии. Полный random() :slight_smile:
Но это собственно и не важно. Я думал есть взаимосвязь. Нет. Значит только manfid и name достаточно проверять.

Нет, такого чтобы в одной партии были разные emmc - такого нет.

Я немного другое имел ввиду. Номер партии для данной задачи и бесполезен (избыточен). Достаточно производителя и имя. Больше ничего не нужно. И не важно в какой партии.

По итогу выяснилось, что все микросхемы, на которые я нашел даташит, поддерживают стандарт 5.0 и выше, что означает единые значения регистров “старости”. Старые платформы типа 6.х и <7.3 надо смотреть. Просьба остается для них и для тех, у кого Chip пишет Unknown.

Когда значения превысят допустимо разумные (можете поправить в скрипте), соответствующий алерт станет красным.

Кто установил, обновите, пожалуйста.

1 лайк



case 0x00: {s_emmc_eol = "Fine: consumed 100% of the reserved blocks"; break; b_emmc_eol = false;}

Тут д.б. не 100%, как мне кажется )

Кроме этого disableRule не работает: ERROR: [rule error] invalid disableRule call
Следует присвоить переменной идентификатор правила, а потом отключать его по этой переменной:

var emmc2_cron1s = defineRule("emmc2_cron1s", {
  when: cron("@every 1s"),
  then: function () {    
    emmc_start();
    if((dev["emmc2/id#error"] == "") && (dev["emmc2/esta#error"] == "") && (dev["emmc2/estb#error"] == "") && (dev["emmc2/eol#error"] == "")){
      disableRule(emmc2_cron1s);
    }
  },
})

Да, спасибо. Я недоглядел при копипасте.

Точно. В логи посмотрел, а в journalctl нет.
@alex_rvr, спасибо большое. Все поправил.

К сожалению я так и не нашел что же за производитель eMMC с MID=0x32. В моих контроллерах другая память. Так бы разобрал бы уже посмотрел.

Скрипт обновлен на гитхабе. Перескачайте.

Спасибо. Тоже 0x32.
Флешка живая.

Panasonic 00110010

http://www.idhw.com/textual/chip/jedec_spd_man.html