![Linux 上的 SD 读卡器:底层 SPI 或 SD 协议](https://linux22.com/image/19788/Linux%20%E4%B8%8A%E7%9A%84%20SD%20%E8%AF%BB%E5%8D%A1%E5%99%A8%EF%BC%9A%E5%BA%95%E5%B1%82%20SPI%20%E6%88%96%20SD%20%E5%8D%8F%E8%AE%AE.png)
我有一台带有 SD 读卡器的笔记本电脑,我想知道 GNU/Linux 驱动程序是否使用 SPI 协议或专有 SD 协议(一位或四位)。我问这个问题是因为我正在测试我正在使用的基于 SPI 的 SD 读卡器设备,当我检查笔记本上的读取速度时,它以 6MB/s 的速度读取卡...另一件事,我想查看驱动程序来源,您知道在哪里可以找到它们吗?
提前致谢!
答案1
在不查看内核源代码的情况下,这将取决于特定的 SD 芯片及其内核驱动程序。您应该查看数据表和内核源代码。例如,在我的笔记本电脑上:
$ lspci | grep SD
15:00.2 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 21)
据推测,该芯片在硬件中实现了 SD 状态机,以及一些芯片到主机的接口(PCI,在我的例子中)。芯片到卡连接的细节可能由芯片抽象出来,但选择可能会受到主机的影响。除非存在已知的错误,否则内核可能会采用最快的可用方法。
更新:检查内核源代码。如果卡支持 4 位传输,它们会自动启用。您可以在drivers/mmc/core/mmc.c
, function中看到这一点mmc_init_card()
。对于 Linux 2.6.38,第 489 行似乎激活高速传输,第 535 行似乎激活 4 位宽传输。不要让“mmc”让您感到困惑。该目录包含处理 SD(包括 SDIO)卡以及 MMC 的驱动程序。