SD 카드 리더 - UHS-I를 강제하는 방법은 무엇입니까?

SD 카드 리더 - UHS-I를 강제하는 방법은 무엇입니까?

JMicron 카드 리더기가 장착된 HP EliteBook 8460p가 있습니다.

rolf@deb:/sys$ sudo lshw |grep JMicron -B 3 -A 8 
       *-firewire       
            description: FireWire (IEEE 1394)
            product: IEEE 1394 Host Controller
            vendor: JMicron Technology Corp.
            physical id: 0
            bus info: pci@0000:23:00.0
            version: 30
            width: 32 bits
            clock: 33MHz
            capabilities: pm pciexpress msi ohci bus_master cap_list
            configuration: driver=firewire_ohci latency=0
            resources: irq:18 memory:d4600000-d46007ff memory:d4605000-d46050ff
       *-generic:0
            description: System peripheral
            product: SD/MMC Host Controller
            vendor: JMicron Technology Corp.
            physical id: 0.1
            bus info: pci@0000:23:00.1
            version: 30
            width: 32 bits
            clock: 33MHz
            capabilities: pm pciexpress msi bus_master cap_list rom
            configuration: driver=sdhci-pci latency=0
            resources: irq:18 memory:d4604000-d46040ff memory:d4608000-d460ffff
       *-generic:1 UNCLAIMED
            description: SD Host controller
            product: Standard SD Host Controller
            vendor: JMicron Technology Corp.
            physical id: 0.2
            bus info: pci@0000:23:00.2
            version: 30
            width: 32 bits
            clock: 33MHz
            capabilities: pm pciexpress msi cap_list
            configuration: latency=0
            resources: memory:d4603000-d46030ff

rolf@deb:/sys$ uname -a && lsb_release -a
Linux deb 4.15.0-2-amd64 #1 SMP Debian 4.15.11-1 (2018-03-20) x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux testing (buster)
Release:    testing
Codename:   buster

읽기 속도는 약 10MB/s입니다. Windows 10에서는 속도가 지속적으로 80MB/s입니다.

다음 발췌문이 dmesg관련될 수 있습니다.

[    1.988810] sdhci: Secure Digital Host Controller Interface driver
[    1.988811] sdhci: Copyright(c) Pierre Ossman
[    1.989507] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.989530] sdhci-pci 0000:23:00.1: SDHCI controller found [197b:2392] (rev 30)
[    1.989647] mmc0 bounce up to 128 segments into one, max segment size 65536 bytes
[    1.990042] ehci-pci: EHCI PCI platform driver
[    1.990144] mmc0: SDHCI controller on PCI [0000:23:00.1] using DMA
[    1.990174] sdhci-pci 0000:23:00.2: SDHCI controller found [197b:2391] (rev 30)
[    1.994928] SCSI subsystem initialized
[    1.996413] sdhci-pci 0000:23:00.2: Refusing to bind to secondary interface.
[    1.999440] libata version 3.00 loaded.
[    2.002040] AVX version of gcm_enc/dec engaged.
[    2.002041] AES CTR mode by8 optimization enabled
[    2.004339] xhci_hcd 0000:25:00.0: xHCI Host Controller
[    2.004347] xhci_hcd 0000:25:00.0: new USB bus registered, assigned bus number 1
[    2.004556] xhci_hcd 0000:25:00.0: hcc params 0x014042cb hci version 0x96 quirks 0x00000004


[    2.264222] mmc0: new SDXC card at address 59b4
[    2.267942] mmcblk0: mmc0:59b4 SDU1  59.1 GiB 
[    2.269284]  mmcblk0: p1

출력에 선언되지 않은 "SD Host Controller"가 표시됩니다 lshw. 관련이 있나요?

나는 살펴보았다/sys/kernel/debug/mmc0/ios

clock:      25000000 Hz
actual clock:   25000000 Hz
vdd:        21 (3.3 ~ 3.4 V)
bus mode:   2 (push-pull)
chip select:    0 (don't care)
power mode: 2 (on)
bus width:  2 (4 bits)
timing spec:    0 (legacy)
signal voltage: 0 (3.30 V)
driver type:    0 (driver type B)

내 카드 리더가 가장 느린 모드로 설정되어 있는 것 같습니다.

더 빠른 모드에는 낮은 전압 신호(1.8V)가 있으며 인터넷의 다른 곳에서 "타이머 사양"에 "SD 고속"이라고 표시된 것을 본 적이 있습니다.

그렇다면 이런 일이 발생하는 이유는 무엇이며, SD 카드 리더기를 더 빠른 모드로 강제 전환하려면 어떻게 해야 합니까?

답변1

이것은 답변의 일부일 뿐입니다.

클럭 속도를 두 배로 늘려 성능을 약 19MB/s로 향상시켰습니다.

아래에서는 "sd high-speed"와 같은 더 흥미로운 값으로 설정할 수 있을 것 같지만 timing spec지금까지는 운이 없었습니다.

rolf@deb:~$ sudo cat /sys/kernel/debug/mmc0/ios
[sudo] password for rolf: 
clock:      25000000 Hz
actual clock:   25000000 Hz
vdd:        21 (3.3 ~ 3.4 V)
bus mode:   2 (push-pull)
chip select:    0 (don't care)
power mode: 2 (on)
bus width:  2 (4 bits)
timing spec:    0 (legacy)
signal voltage: 0 (3.30 V)
driver type:    0 (driver type B)
rolf@deb:~$ sudo cat /sys/kernel/debug/mmc0/clock
25000000
rolf@deb:~$ sudo dd if=/dev/mmcblk0 of=/dev/null bs=512
^C73953+0 records in
73952+0 records out
37863424 bytes (38 MB, 36 MiB) copied, 3.55635 s, 10.6 MB/s

rolf@deb:~$ echo 50000000 | sudo tee /sys/kernel/debug/mmc0/clock
50000000
rolf@deb:~$ sudo cat /sys/kernel/debug/mmc0/ios
clock:      50000000 Hz
actual clock:   50000000 Hz
vdd:        21 (3.3 ~ 3.4 V)
bus mode:   2 (push-pull)
chip select:    0 (don't care)
power mode: 2 (on)
bus width:  2 (4 bits)
timing spec:    0 (legacy)
signal voltage: 0 (3.30 V)
driver type:    0 (driver type B)
rolf@deb:~$ sudo dd if=/dev/mmcblk0 of=/dev/null bs=512
^C225761+0 records in
225760+0 records out
115589120 bytes (96 MB, 92 MiB) copied, 4.94934 s, 19.4 MB/s

내 카드는 클래스 10 UHS-I 등급입니다.

컨트롤러는 25Mhz, 3.3V 신호, 12.5MB/초인 가장 느리고 가장 오래된(따라서 가장 호환되는) SD 속도 모드로 설정된 것으로 보입니다.

수동으로 주파수를 50Mhz로 늘려 "고속" 모드(25MB/초, 사양 1.10)로 설정했습니다.

Windows에서는 UHS-I, SDR104 모드(104MB/초)로 실행됩니다. SDR104 모드의 주파수는 208MHz이고 신호 전압은 1.8V입니다.

주파수를 더 높이는 데 필요한 버스 모드나 전압을 수동으로 설정하는 방법을 찾지 못했습니다.

답변2

아치 리눅스를 탑재한 Lenovo L380의 mmc 슬롯에 400GB Class 10 UHS-I microSD(SDSQUAR-400G-GN6MA)도 있는데, 주파수 208MHz, 신호 전압 1.8V를 보여줍니다. 쓰기 속도는 괜찮습니다. exfat 파일 시스템을 사용하면 초기 테스트에서 f3write의 경우 37MB/s, f3read의 경우 72MB/s가 나타났습니다. 카드는 luks/lvm 아래의 ext4이기 때문입니다. 이 문제가 발생했습니다. (로컬) 백업 중에 rsync가 몇 분 동안 계속 중단됩니다! 현재 여기에 제안된 데이터 스키마를 변경하려고 합니다.https://stackoverflow.com/a/21766889, 로깅을 비활성화하고 noatime을 사용하여 설치합니다. USB3 포트를 통해 HD 또는 SSD에 백업할 때 rsync가 중단되지 않습니다. 그래서 내 생각에는 rsync 중단이 mmc 드라이버와 관련이 있어야 한다는 것입니다.

관련 정보