Чтение внутренних регистров SD-карт

Раздел посвященный обсуждение hardware составляющей устройств, и их аппаратной части.
Аватара пользователя
bellic
Сообщения: 1044
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Чтение внутренних регистров SD-карт

Сообщение bellic » 10 ноя 2017, 11:57

В SD-карте есть программно доступные регистры, в которых храниться параметры карты и её настройки. Можно прочитать регистры и узнать какую-нибудь полезную информацию. Регистров около 10-и, в спецификации вы можете узнать о каждом из них.
Спецификацию можно скачать на официальном сайте "SD Association"

(На сайте, в левой колонки перейдите в раздел Downloads -> Simplifed Specifications, соглашаетесь и жмете «I Accept» и качаете "Physical Layer Simplified Specification"). В результате вы скачаете pdf-документ — спецификацию на SD-карты, в ней все подробным образом расписано - какие бывают карты и как с ними работать.)
Кроме того, на этом сайте в разделе "Downloads" имеется утилита "SD Memory Card Formatter" от Ассоциации для правильного форматирования карт.

Вот небольшое пояснение к ней от самой Ассоциации:
"SD Memory Card Formatter" формирует карты памяти SD/SDHC/SDXC), в соответствии со спецификацией SD File System, созданной SD Association (SDA).
Настоятельно рекомендуется использовать "SD Memory Card Formatter" для форматирования карт SD/SDHC/SDXC, а не использовать инструменты форматирования, поставляемые с отдельными операционными системами. В общем, инструменты форматирования, поставляемые с операционными системами, могут форматировать различные носители, включая карты SD/SDHC/SDXC, но не могут быть оптимизированы для карт SD/SDHC/SDXC, и это может привести к снижению производительности.
Наиболее интересные регистры:

—Регистр CID (Card identification data) - содержит данные, по которым можно идентифицировать карту памяти (серийный номер, ID производителя, дату изготовления и т.д.)
—Регистр CSD (Card-specific data) - содержит всевозможную информацию о карте памяти (от размера сектора карты памяти до потребления в режиме чтения/записи).
—Регистр OCR (Operation Conditions Register) - содержит напряжения питания карты памяти, тип питания карты памяти, статус процесса инициализации карты.

Структура CID регистра следующая:
cid.jpg
Расшифровать данные регистра можно на сайте: Secure Digital Card CID Decoder

Внутренняя информация SD-карты

Информация о SD-карте закодирована в его внутренних регистрах карт. Одним из них является регистр идентификатора карты (CID), 16-байтовый код, который содержит информацию, которая однозначно идентифицирует SD-карту, включая серийный номер карты (PSN), идентификационный номер производителя (MID) и дату изготовления (MDT). Регистр CID устанавливается, когда карта изготовлена ​​и не может быть изменена после ее установки. (Согласно спецификации SD-карты информация должна быть написана только один раз, однако если карта не соответствует спецификации, эта информация может быть изменена!)

Как прочитать CID с SD-карты

Один из способов прочитать CID - использовать ноутбук с гнездом для SD-карт. Считыватели карт в ноутбуках обычно подключаются непосредственно через шину PCI (или IDE-шину). Это не будет работать через устройство чтения карт USB, потому что команда для извлечения информации о карте перехватывается и не понимается считывателями карт. Не все компьютеры со встроенными слотами для карт будут работать, некоторые внутренние считыватели карт подключаются через шину USB.

Предполагая, что у вас есть подходящее оборудование, есть несколько способов, которые вы можете использовать для получения информации о карте. С Linux чтение внутренней SD-карты является простым. Вставьте карту и посмотрите в /sys/block/mmcblk0/device/ (это местоположение может меняться в зависимости от вашей платформы, оно может быть mmcblk1 или в другом месте). В этом месте вы увидите несколько доступных атрибутов, которые включают регистры CID и CSD и информацию внутри него.

Для просмотра CID, выполняем команду из терминала (вызывается Ctrl + Alt + T):

Код: Выделить всё

cat /sys/block/mmcblk0/device/cid (точное местоположение может отличаться)
Так же может быть полезна следующая команда, отображающая подробный список файлов в директории с именами, начинающимися на "mmc":

Код: Выделить всё

ls -l /sys/block |grep mmc
Какая информация находится в CID?

В CID сохраняется следующая информация:
1.jpg
Для получения дополнительной информации см. SD Association Simplified Specifications.

А теперь - информация с форума клуба "Клуб Suzuki Vitara":


Необходимые инструменты и условия для чтения регистров SD-карты:
1) наличие SD-карты;
2) ноутбук со встроенным кардридером(USB-кардридер для этой цели не подходит) +
3) загрузочная флешка с линукс-дистрибутивом для чтения CID SD-карты;
4) Android-девайс - телефон/планшет с картридером;
5) минимальные навыки пользователя Android/Linux.

Подробности:
1) Для чтения CID оригинальной навигационной SD-карты потребуется ноутбук со встроенным кардридером и загрузочная флешка с Линукс дистрибутивом.
Я использовал ASUS X301A в связке с Linux Mint 18 "Sarah" - Cinnamon (32-bit).
Этот же дистрибутив Линукса в связке с SONY VAIO VGN-TZ3RMN/N не видел SD-карты.
Не волнуйтесь, операционную систему на ноутбуке переустанавливать не придется. Достаточно создать загрузочную флешку (DVD диск) с Linux Mint и загрузить с нее лаптоп.
Далее, вставляем SD-карту во встроенный кардридер ноута, видим появившееся уведомление о новом девайсе:
Screenshot-1.jpg
Screenshot-1.jpg (58.69 КБ) 18451 просмотр
Осталось прочитать CID-карты. Есть 2 способа:
1) На рабочем столе кликаем Computer, в открывшемся окне жмем sys/block/mmcblk0/device/cid
Screenshot-2.jpg
Screenshot-2.jpg (77.79 КБ) 18451 просмотр
2) или вызываем терминал (Ctrl + Alt + T) и в нем вводим команду:

Код: Выделить всё

cat /sys/block/mmcblk0/device/cid
Появившиеся обоими способами цифры/буквы конспектируем удобным способом (или просто копируем файл /sys/block/mmcblk0/device/cid в удобное место для дальнейшего чтения/копирования)
Небольшое дополнение. Если на вашем ноуте нет других SD карт, то всунутая оригинальная навигационная SD карта будет определятся линуксом как mmcblk0 и все вышеприведенные команды верны.
P.S. На скринах CID абсолютно "левой" SD-карты Samsung 2GB

Способ чтения внутренних регистров с помощью Android-устройств - Будет рассмотрен позже и добавлен в этот пост!!!

Кстати - для профессионалов по железу будет полезно прочитать Микроконтроллер – работаем с SD картой без файловой системы.
Там рассматриваются режимы работы с SD-карточкой, в том числе с использованием ATmega328P (или Arduino UNO)!!! :good:

Пост так же будет подвержен информационной обработке - посему за Повторы прошу пока не пинать!...:oops:

P.S. При написании данного опуса использовалась информация по ссылкам:
Навигация на SD карточке для GL+
http://new-vitara.ru/forum/viewtopic.php?p=15531#p15531
Микроконтроллер – работаем с SD картой без файловой системы
http://www.cameramemoryspeed.com/sd-mem ... l-numbers/
SD and MMC Block Device Attributes
https://everipedia.org/wiki/Secure_Digital/

Аватара пользователя
bellic
Сообщения: 1044
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Еще один загрузочный Linux-дистрибутив

Сообщение bellic » 12 ноя 2017, 10:53

Хочу чуток добавить по поводу загрузочного дистрибутива...
Вот нашел в Интернете мнение чела "mr.shmit":
mr.shmit писал(а):Linux без проблем устанавливается на флешку как на обычный жесткий диск и работает (Проверено на Linux Mint 14 мной лично), но нужно учитывать, что это быстро убьет флешку. Из за того, что у флешек существует ограниченное количество циклов перезаписи и операционные системы используют журналируемые файловые системы обычно. Windows использует NTFS, Linux использует ext3 или ext4 чаще всего. Вообщем, это достаточно быстро выматывает ограниченный лимит перезаписей и не стоит так убивать флешки. Однако есть например дистрибутив MagOS, который создан чтобы запускаться с флешки и не требует никакой дополнительной установки. Он портативный такой. Просто кидаешь три папки дистрибутива обычно на флешку и через командную строку прописываешь туда загрузчик (все в инструкциях указано у них). Там используется загрузчик Grub4dos и дистрибутив работает на файловой системе fat32. Она не журналируемая, всё нормально. Это самый лучший вариант использовать ОС на флешке.
Посему привожу ссылку на "MagOS Linux официальный сайт"

Аватара пользователя
bellic
Сообщения: 1044
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Чтение внутренних регистров SD-карт

Сообщение bellic » 30 ноя 2017, 10:43

Провел опыты по чтению информации CID на трех ноутбуках - на двух из под USB-загрузочного Linux Mint, на последнем уже была установлена Ubuntu.
По стечению обстоятельств - все Три ноутбука фирмы "Dell"
Результат - Отрицательный! :cry:
На всех ноутах по пути /sys/block/ отсутствовал каталог типа mmcblk0 (или mmcblk1):
777.jpg
Поиск файлика CID в каталогах /sys/block/sda/device/, /sys/block/sdb/device/ и /sys/block/sr0/device/ тоже ничего не дал... :(
Вывод:
- Возможно кард-ридеры ноутов не поддерживают чтение внутренних регистров;
- Или я что то делал не так и не там искал?! (Может нужно было все это делать из под Root-a ???)

Остался еще один не испробованный доступный мне ноутбук, но это чуть позже...
Если не получится, то видимо буду заказывать у братьев-китайцев вот такую штуку:
adapter.jpg
...и пытаться считать CID с помощью Android-девайса!

Кстати - а вот и первая попавшаяся бесплатная программа для этого - SD Tools
SDTool.jpg
На скриншоте видна инфа по моей MicroSD-карточке в смартфоне... :oops:

Код: Выделить всё

834E434E43617264102041003100F683

Аватара пользователя
bellic
Сообщения: 1044
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Чтение внутренних регистров SD-карт

Сообщение bellic » 30 ноя 2017, 20:42

Нашел еще одно руководство по чтению регистров...

1.7 После загрузки Ubuntu запускаем Terminal (как это сделать здесь https://youtu.be/tbWXsSaAb2M?t=93)
1.8 Выполняем команду в терминале (получаем права администратора): 1.9 Вставляем любую SD карту и выполняем команду в результате мы должны увидеть табличку (точками и звездами обозначены значения, которые могут у вас отличаться):
ubuntu.jpg
Если в табличке есть пункт mmcblk0 (цифра в конце может отличаться) тогда ваш кардридер подходит. [Надеюсь это необходимое и достаточное условие :) Также можно проверить кардридер через Windows диспетчер устройств, посортувавшы устройства с
подключением в меню вид.]

1.10 Выполняем команду (https://youtu.be/tbWXsSaAb2M?t=289)

Код: Выделить всё

find /sys -name cid -print
если все хорошо с кардридером то мы получим:
ubuntu2.jpg
P.S. если я что то пропустил - можно почитать тут:
https://www.qashqai-club.ru/forum/appli ... p?id=29254
или
http://www.qashqairussia.ru/forum/showthread.php?t=1755

Аватара пользователя
bellic
Сообщения: 1044
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Чтение внутренних регистров SD-карт

Сообщение bellic » 02 дек 2017, 10:11

Надежда на ноутбук подруги разбилась о скалы! - Он тоже оказался "Dell"... :cry:
linux mint.jpg
На скриншоте не видно..
Сначало в терминале выполнил команду: Затем: Всунул SD-карточку...
И еще раз выполнил: Ничего похожего на mmcblk0 я так и не увидел!.. :cry:

Аватара пользователя
NaviGuru
Сообщения: 450
Зарегистрирован: 10 мар 2017, 17:36
Откуда: Tomsk
Контактная информация:

Чтение внутренних регистров SD-карт

Сообщение NaviGuru » 22 мар 2018, 04:01

сегодня принесли новый ACER экстенса 2510 снести 10ку и поставить 7ку. ради интереса попробовал на нем считать СИД. работает
есть один прикол. микро сдшка сид которой раньше считывал на планшете, почему то отличается от считанного на этом ноуте. выглядит так
824a544e4361726402396010e100d479 так на планшете
824a544e4361726402396010e100d401 так на ноуте

Аватара пользователя
bellic
Сообщения: 1044
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Чтение внутренних регистров SD-карт

Сообщение bellic » 22 мар 2018, 16:02

NaviGuru писал(а):
22 мар 2018, 04:01
микро сдшка сид которой раньше считывал на планшете, почему то отличается от считанного на этом ноуте. выглядит так
824a544e4361726402396010e100d479 так на планшете
824a544e4361726402396010e100d401 так на ноуте
Там в конце контрольная сумма вроде должна быть! :?

Аватара пользователя
bellic
Сообщения: 1044
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Чтение внутренних регистров SD-карт

Сообщение bellic » 09 апр 2018, 16:12

Глянул оба CID-а в декодере Secure Digital Card CID Decoder...

all_cid.jpg
Так и есть - оба CID-а одинаковые, только КС отличаются!
Программы то разные - видимо они считают их по разным алгоритмам!?... :oops:

Аватара пользователя
bellic
Сообщения: 1044
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Чтение внутренних регистров SD-карт

Сообщение bellic » 15 май 2018, 14:04

На конец то пришла посылка из Китая с кабелем-переходником "MicroSD(папа)---SD(мама)":
IMG_20180515_160402.jpg
Чють позже считаю CID своей карточки... :P

Аватара пользователя
bellic
Сообщения: 1044
Зарегистрирован: 11 мар 2017, 07:47
Откуда: Rostov-on-Don
Контактная информация:

Чтение внутренних регистров SD-карт

Сообщение bellic » 18 май 2018, 09:59

NaviGuru писал(а):
22 мар 2018, 04:01
микро сдшка сид которой раньше считывал на планшете, почему то отличается от считанного на этом ноуте. выглядит так
824a544e4361726402396010e100d479 так на планшете
824a544e4361726402396010e100d401 так на ноуте
Сваял маленькую утилитку "SD Card CID Decoder", являющейся аналогом странички Secure Digital Card CID Decoder и еще озадачился Этой разницей в Контрольных суммах... :?
В общем пока выложу сюда две ссылки, что бы не забыть их...
- CRC7 implementation, CRC-Generation Algorithm in C - есть малеха инфы;

- Calculating CRC7 for SD MMC memory cards - очень полезная информация!!!
Имеется даже Утилита для подсчета CRC7 для 15-разрядной строчки CID-a, а т.ж исходники на СИ, которые я добросовестно утянул, дабы они не "испарились"... :cool:

- архив вышеуказанной утилиты с исходниками:
SD_MMC_CRC7.zip
(521.77 КБ) 414 скачиваний
Кстати, забыл сказать, что утилита для строки "824a544e4361726402396010e100d4" выдает CRC7 все жe "79"!... :geek:

crc7.jpg
crc7.jpg (12.62 КБ) 18405 просмотров

P.S. я правильно перевожу фразу "CRC7 Checksum + always 1 in LSB" на русский как "Контрольная сумма CRC7 + всегда 1 в LSB"?
(LSB - а это не Младшая Половинка Байта??? - Нашел вот такую расшифровку: "least significant bits" - "младший значащий бит")
Глянул спецификацию, а там написано, что самый младший бит НЕ ИСПОЛЬЗУЕТСЯ и всегда равен 1 !!!

Ответить

Вернуться в «Аппаратная часть (hardware)»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей