ユーザ用ツール

サイト用ツール


サイドバー

Top

検索タグ

変更履歴

メニュー


hardware:sd_memory_card

SD メモリーカード

Secure Digital は、正式には SD と略され、ポータブルデバイスで使用するために SD Association (SDA) によって開発された独自の不揮発性メモリカードフォーマットである。

SD メモリーカード (エスディーメモリーカード、SD Memory Card) は、フラッシュメモリーに属するメモリーカードである。SD カードとも呼ばれる。デジタルカメラ、携帯電話などの携帯機器やテレビなどの家電機器まで幅広く利用されている。
SDメモリーカード - Wikipedia
SD card - Wikipedia より

規格速度

サイズ
SD 24 mm x 32 mm x 2.1mmToshiba SD-M04G 20070817.jpg
miniSD 20mm x 21.5mm x 1.4mmMiniSD_memory_card.jpg
microSD 11mm × 15mm × 1mmSamsung Evo Plus 128GB

SDメモリカードの違い|キオクシア株式会社
File:Toshiba SD-M04G 20070817.jpg - Wikimedia Commons より
File:MiniSD memory card.jpg - Wikimedia Commons より

SD メモリーカードの属性情報

LinuxLinux カーネルを用いたオペレーティングシステム Kernel では /sys/block のエントリで確認できるが、SPI 接続されているカードスロットでなければならないようだ。
linux - Can I read SD card serial number connected with USB card reader/writer as mounted sda? - Stack Overflow
USB 大容量ストレージデバイス (USB Mass Storage Device) として Kernel が認識 (sda など) している SD カードリーダーでは、SD メモリーカードの属性情報にアクセスできない。

以下は Raspberry Pi Zero WH での SD メモリーカードの属性情報を読み出す Python コードである。

read_sd_attr.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
 
APPLICATION_NAME = 'SD and MMC Nlock Device Attributes Reader'
APPLICATION_VERSION = 0.01
SEPARATOR_LENGTH = 40
SYS_DEVICE = '/sys/block/mmcblk0/device'
 
# https://mjmwired.net/kernel/Documentation/mmc/mmc-dev-attrs.txt
SD_MMC_ATTRS = [
  'cid',                        # Card Identification Register
  'csd',                        # Card Specific Data Register
  'scr',                        # SD Card Configuration Register (SD only)
  'date',                       # Manufacturing Date (from CID Register)
  'fwrev',                      # Firmware/Product Revision (from CID Register) (SD and MMCv1 only)
  'hwrev',                      # Hardware/Product Revision (from CID Register) (SD and MMCv1 only)
  'manfid',                     # Manufacturer ID (from CID Register)
  'name',                       # Product Name (from CID Register)
  'oemid',                      # OEM/Application ID (from CID Register)
  'prv',                        # Product Revision (from CID Register) (SD and MMCv4 only)
  'serial',                     # Product Serial Number (from CID Register)
  'erase_size',                 # Erase group size
  'preferred_erase_size',       # Preferred erase size
  'raw_rpmb_size_mult',         # RPMB partition size
  'rel_sectors',                # Reliable write sector count
  'ocr',                        # Operation Conditions Register
  'dsr',                        # Driver Stage Register
  'cmdq_en',                    # Command Queue enabled: 1 => enabled, 0 => not enabled
]
 
def cat(filename):
    with open(filename) as fp:
        result = fp.read()
    return result.replace('\n', '\\n')
 
def main():
    print('\n' + '=' * 5 +
      f' {APPLICATION_NAME} Ver {APPLICATION_VERSION} ' +
      '=' * 5)
    print(f'device: {SYS_DEVICE}')
    print('-' * SEPARATOR_LENGTH)
    for index, attr in enumerate(SD_MMC_ATTRS):
        path = os.path.join(SYS_DEVICE, attr)
        if os.path.isfile(path):
            if attr == 'oemid':
                hex_string = cat(path)
                ascii_string = bytes.fromhex(hex_string.replace('\\n', '')[2:]).decode('ASCII')
                print(f'{attr}: {hex_string} (\'{ascii_string}\')')
            else:
                print(f'{attr}: {cat(path)}')
        else:
            print(f'{attr}: None')
    print('-' * SEPARATOR_LENGTH)
 
if __name__ == '__main__':
    main()
$ chmod 755 read_sd_attr.py
$ ./read_sd_attr.py
===== SD and MMC Nlock Device Attributes Reader Ver 0.01 =====
device: /sys/block/mmcblk0/device
----------------------------------------
cid: 2750485344313238606cacbe1a01491f\n
csd: 400e00325b590003a13f7f800a40000f\n
scr: 0205808301000000\n
date: 09/2020\n
fwrev: 0x0\n
hwrev: 0x6\n
manfid: 0x000027\n
name: SD128\n
oemid: 0x5048\n ('PH')
prv: None
serial: 0x6cacbe1a\n
erase_size: 512\n
preferred_erase_size: 4194304\n
raw_rpmb_size_mult: None
rel_sectors: None
ocr: 0x00200000\n
dsr: 0x404\n
cmdq_en: None
----------------------------------------

Linux Kernel Documentation :: mmc : mmc-dev-attrs.txt
Reading Internal SD Card Information CID, Serial number, PSN, date, manufacturer ID - Camera Memory Speed Comparison & Performance tests for SD and CF cards
android - How to read the SD Card ID number? - Stack Overflow
https://nax9800.blog.fc2.com/blog-entry-158.html ← 警告: このサイト内の **http://codegist.net/** に飛ばないで下さい!ブラウザーがフェイクアラートに感染します😱 その為、意図的にリンクしていません。内容を見るだけであれば問題は発生しません。
万が一感染しちゃったらこれを参考に駆除すれば特に問題はありません🤤 → このページの codegist.net に飛ばないでくださいね🧟 なんか呪われています😅💦

ベンチマーク

SAMSUNG EVO Plus 128GB MicroSDXC UHS-I U3
SAMSUNG EVO Plus 128GB MicroSDXC UHS-I U3 001

Format: exFAT
SAMSUNG EVO Plus 128GB MicroSDXC UHS-I U3 exFAT

Format: FAT32
SAMSUNG EVO Plus 128GB MicroSDXC UHS-I U3 FAT32

Format: NTFS
SAMSUNG EVO Plus 128GB MicroSDXC UHS-I U3 NTFS

Format: ext4 Ext2Fsd 0.69
SAMSUNG EVO Plus 128GB MicroSDXC UHS-I U3 ext4 Ext2Fsd 0.69

$ cd C:\Tools\Ext2Fsd\Setup
$ ./mke2fs -t ext4 d:
mke2fs 1.42.13 (17-May-2015)
 
Press ENTER to format d:
 
Creating filesystem with 31260160 4k blocks and 7815168 inodes
Filesystem UUID: b5089389-3cbd-4e3e-a423-187df44f9db6
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872
 
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

ADATA 8GB MicroSDHC Class10 UHS-I U1
ADATA 8GB MicroSDHC Class10 UHS-I U1 001
ADATA 8GB MicroSDHC Class10 UHS-I U1 002

TOSHIBA EXCERIA 32GB MicroSDHC Class3 UHS-I U3
TOSHIBA EXCERIA 32GB MicroSDHC Class3 UHS-I U3 001
TOSHIBA EXCERIA 32GB MicroSDHC Class3 UHS-I U3 002

Transcend 16GB MicroSDHC Class10
Transcend 16GB MicroSDHC Class10 001
Transcend 16GB MicroSDHC Class10 002

SanDisk 2GB MicroSD
SanDisk 2GB MicroSD 002

SD カードリーダー

参考文献

hardware/sd_memory_card.txt · 最終更新: 2021/04/29 03:51 by ともやん