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 드라이버와 관련이 있어야 한다는 것입니다.