SD reader - como forçar o UHS-I?

0

Eu tenho um HP EliteBook 8460p, equipado com leitor de cartões JMicron:

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

As taxas de leitura são de cerca de 10 MB / s. No Windows 10, recebo 80 MB / s.

Esses extratos de dmesg podem ser relevantes:

[    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

Ele diz que o UNCLAIMED para "SD Host controller", em lshw output, estaria relacionado?

Eu dei uma olhada em /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)

Meu leitor de cartão parece estar configurado no modo mais lento.

Os modos mais rápidos têm sinalização de baixa voltagem (1,8V), e eu tenho visto a "especificação do temporizador" exibindo "sd de alta velocidade" em outros lugares na internet.

Então, por que isso aconteceria e como posso forçar meu leitor SD a entrar em um modo mais rápido?

    
por Rolf 13.04.2018 / 16:42

1 resposta

2

Esta é apenas uma resposta parcial.

Consegui melhorar o desempenho para cerca de 19MB / s ao duplicar o relógio. Eu não sei o quanto mais posso empurrar isso. Eu nem tenho certeza do relógio que estou dobrando no momento. Eu acabei de encontrar /sys/kernel/debug/mmc e estava mexendo com isso.

Também vi mencionar que o valor timing spec abaixo está definido para valores mais interessantes, como "sd high-speed", então tentarei analisar isso.

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

Atualização:

Meu cartão é classificado como Classe 10 UHS-I.

Parece que o controlador está sendo ajustado para o modo de velocidade SD mais lento, mais antigo (portanto, mais compatível), que é de 25Mhz, sinal de 3,3V, 12,5MB / seg.

Ao bater manualmente a freqüência para 50Mhz, eu teria colocado no modo "High Speed" (25MB / seg, spec 1.10).

No Windows, ele estaria rodando em modo UHS-I, SDR104 - 104MB / seg. O modo SDR104 tem uma frequência de 208MHz e tensão de sinal de 1,8V.

Ainda não encontrei uma maneira de definir manualmente o modo de barramento ou a voltagem, que é necessária para aumentar ainda mais a frequência sem o risco de danificar o hardware.

    
por 18.04.2018 / 17:43