SD 卡无法安装在 Broadcom BCM57765/57785 (Macbook pro) 读卡器中

SD 卡无法安装在 Broadcom BCM57765/57785 (Macbook pro) 读卡器中

我有一张微型 SD 卡,SanDisk Ultra 16 GB,超高速,格式化为 FAT,位于一个 SD 适配器中,还有一台运行 Ubuntu 20.10 的 Macbook pro 8,1。

  • SD 卡无法在内部 SD 卡读卡器中工作:它在“磁盘”中显示为未知的 16 GB。

  • 同一张 SD 卡可以通过 USB 外置读卡器工作。

  • 在使用 Mac OS 重新启动后,它也可以在同一台 Mac 的同一个内部读卡器中使用。

由于卡和读卡器可以工作,我怀疑 Ubuntu 错过了一些东西。

重新格式化(再次为 FAT)后,该卡似乎可以工作(在磁盘中显示为 16 GB FAT),但当尝试通过从桌面拖放将文件复制到该卡时,光标箭头变成手形,Ubuntu 冻结。我可以通过重新启动来恢复,但此后 SD 卡在磁盘中显示为:16 GB 未知。

我尝试了另一张 SDXC 128 GB ExFAT 卡,结果相同(也许除了重新格式化,我没有尝试,因为卡上有有用的数据)。

有什么建议可以让 Ubuntu 的内部 SD 卡读卡器正常运作吗?

更新

(在 mook765 的评论之后。)

当 SD 卡插入 Macbook pro 内部 SD 卡读卡器时,它几乎从未安装,在磁盘中显示为未知。 dmesg输出:

[29944.127784] mmc0: new ultra high speed SDR104 SDHC card at address e624
[29944.129766] mmcblk0: mmc0:e624 SC16G 14.8 GiB 
[29954.151831] mmc0: Timeout waiting for hardware interrupt.
[29954.151847] mmc0: sdhci: ============ SDHCI REGISTER DUMP ===========
[29954.151927] mmc0: sdhci: Sys addr:  0x000010c8 | Version:  0x00001502
[29954.151940] mmc0: sdhci: Blk size:  0x00007200 | Blk cnt:  0x00000000
[29954.151976] mmc0: sdhci: Argument:  0x00000000 | Trn mode: 0x0000003b
[29954.151981] mmc0: sdhci: Present:   0x1fff0000 | Host ctl: 0x0000001f
[29954.151987] mmc0: sdhci: Power:     0x0000000f | Blk gap:  0x00000000
[29954.151992] mmc0: sdhci: Wake-up:   0x00000000 | Clock:    0x00000007
[29954.151998] mmc0: sdhci: Timeout:   0x0000000a | Int stat: 0x00000000
[29954.152004] mmc0: sdhci: Int enab:  0x03ff008b | Sig enab: 0x03ff008b
[29954.152009] mmc0: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000000
[29954.152014] mmc0: sdhci: Caps:      0x176ec8b0 | Caps_1:   0x03002177
[29954.152019] mmc0: sdhci: Cmd:       0x0000123a | Max curr: 0x00000000
[29954.152023] mmc0: sdhci: Resp[0]:   0x00000900 | Resp[1]:  0x00000900
[29954.152028] mmc0: sdhci: Resp[2]:   0x00000900 | Resp[3]:  0x00000900
[29954.152031] mmc0: sdhci: Host ctl2: 0x0000804b
[29954.152037] mmc0: sdhci: ADMA Err:  0x00000001 | ADMA Ptr: 0x000000045bfcd204
[29954.152039] mmc0: sdhci: ============================================
[29954.152111] mmc0: Unexpected interrupt 0x04000000.
[29954.152112] mmc0: sdhci: ============ SDHCI REGISTER DUMP ===========
[29954.152118] mmc0: sdhci: Sys addr:  0x00000000 | Version:  0x00001502
[29954.152123] mmc0: sdhci: Blk size:  0x00007200 | Blk cnt:  0x00000000
[29954.152129] mmc0: sdhci: Argument:  0x00000000 | Trn mode: 0x00000033
[29954.152135] mmc0: sdhci: Present:   0x1fff0001 | Host ctl: 0x0000001f
[29954.152141] mmc0: sdhci: Power:     0x0000000f | Blk gap:  0x00000000
[29954.152146] mmc0: sdhci: Wake-up:   0x00000000 | Clock:    0x00000007
[29954.152151] mmc0: sdhci: Timeout:   0x0000000a | Int stat: 0x00000000
[29954.152156] mmc0: sdhci: Int enab:  0x03ff008b | Sig enab: 0x03ff008b
[29954.152161] mmc0: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000000
[29954.152167] mmc0: sdhci: Caps:      0x176ec8b0 | Caps_1:   0x03002177
[29954.152172] mmc0: sdhci: Cmd:       0x00000c1a | Max curr: 0x00000000
[29954.152177] mmc0: sdhci: Resp[0]:   0x00000900 | Resp[1]:  0x00000900
[29954.152182] mmc0: sdhci: Resp[2]:   0x00000900 | Resp[3]:  0x00000900
[29954.152185] mmc0: sdhci: Host ctl2: 0x0000800b
[29954.152192] mmc0: sdhci: ADMA Err:  0x00000001 | ADMA Ptr: 0x000000045bfcd204
[29954.152193] mmc0: sdhci: ============================================
[29960.352164] mmc0: card e624 removed

dmesgmount成功时输出:

[  104.086813] mmc0: Skipping voltage switch
[  105.010489] mmc0: new high speed SDHC card at address e624
[  105.011082] mmcblk0: mmc0:e624 SC16G 14.8 GiB 
[  139.106588]  mmcblk0:

注意相关性:

  • 超高速 -> 失败,
  • 高速->成功。

手动挂载尝试:

% sudo mount -v -t vfat /dev/mmcblk0 /mnt             
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/mmcblk0, missing codepage or helper program, or other error.

尽管如此,Disks 基准测试还是有效的。平均读取速度为 50 MB/s(受内置 USB 2 限制),平均写入速度为 1 MB/s(这是 Apple 硬件的糟糕性能)。

磁盘格式化经常失败,原因如下:

Error formatting volume Error after formatting with type vfat: Timed-out waiting for object (udisk-error-quark 0)

手动格式化可能会起作用:

% sudo mkfs.vfat -v -F 32 -n LUMIX -I /dev/mmcblk0
mkfs.fat 4.1 (2017-01-24)
attribute "partition" not found
/dev/mmcblk0 has 4 heads and 16 sectors per track,
hidden sectors 0x0000;
logical sector size is 512,
using 0xf8 media descriptor, with 31116288 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 16 sectors per cluster.
FAT size is 15184 sectors, and provides 1942868 clusters.
There are 32 reserved sectors.
Volume ID is 01436e04, volume label LUMIX      .

SD 卡曾经自动挂载过。我至少连续失败了 30 次。重新格式化后通常会成功。

一旦卡已安装并保持插入状态,重新安装总会成功。

内部 SD 卡读卡器可能有缺陷。由于相同的硬件与 Mac OS 完美兼容,我猜想 Apple 已经找到了一种解决方法,而 Ubuntu 却忽略了它。

内部 SD 卡读卡器的属性:

% sudo lspci -s 02:00.1 -v    
02:00.1 SD Host controller: Broadcom Inc. and subsidiaries BCM57765/57785 SDXC/MMC Card Reader (rev 10) (prog-if 01)
    Subsystem: Broadcom Inc. and subsidiaries BCM57765/57785 SDXC/MMC Card Reader
    Flags: bus master, fast devsel, latency 0, IRQ 17
    Memory at a0420000 (64-bit, prefetchable) [size=64K]
    Capabilities: [48] Power Management version 3
    Capabilities: [58] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [ac] Express Endpoint, MSI 00
    Capabilities: [100] Advanced Error Reporting
    Capabilities: [150] Power Budgeting <?>
    Capabilities: [160] Virtual Channel
    Kernel driver in use: sdhci-pci
    Kernel modules: sdhci_pci

% /sbin/modinfo sdhci-pci
filename:       /lib/modules/5.8.0-31-generic/kernel/drivers/mmc/host/sdhci-pci.
ko
license:        GPL
description:    Secure Digital Host Controller Interface PCI driver
author:         Pierre Ossman <[email protected]>

% uname -a
Linux mac2011-linux 5.8.0-31-generic #33-Ubuntu SMP Mon Nov 23 18:44:54 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

几个星期前,也就是 11 月 23 日之前,我遇到了其他 SD 卡问题,但我没有注意到当前的问题,所以我敢打赌,sdhci 在上次内核修订中受到了影响。

答案1

内部读卡器确实存在缺陷:它并不总是识别超高速,但这个缺陷有一个积极的副作用:允许以高速安装。

SD 卡可以始终以高速安装,而不是超高速安装,如下所示:

% sudo rmmod sdhci_pci sdhci
% sudo modprobe sdhci debug_quirks2=4
% sudo modprobe sdhci_pci

(此改变不是永久性的。)

磁盘基准测试结果:

  • 读取:24 MB/s,
  • 写入:9 MB/s。

读取速度不如超高速,但幸运的是写入速度快得多!读取速度为 50 MB/s,写入速度为 10 MB/s 就很棒了。

Debian 上的类似报告

建议的解决方案

debug_quirks2=0x4该问题可以通过传递给 sdhci 内核模块来解决。

Linux 内核的一个已知 bug

答案2

Add the following to /etc/modprobe.d/sdhci.conf:

  options sdhci debug_quirks2=4

Re-generate initrd:

 sudo update-initramfs -u -k all

Reboot or reload sdhci module:

 sudo rmmod sdhci-pci sdhci
 sudo modprobe sdhci

相关内容