【问题标题】:How do I control an sd card reader using spidev如何使用 spidev 控制 sd 读卡器
【发布时间】:2014-08-26 13:37:44
【问题描述】:

我有一台三星 RF711 Core i7 笔记本电脑,运行 Debian Wheezy 并集成了 USB 多闪存阅读器,但这个问题可能适用于任何在 USB 端口上带有 sd 读卡器的系统。 这是 lsusb 所说的

总线 004 设备 004:ID 058f:6366 Alcor Micro Corp. 多闪存读取器

我想使用旧的 sd 卡并在其上焊接一些电线,以便当我将其插入 sd 卡端口时,它可以通过 SPI 与 PIC 通信。

我知道 SD 卡的电压是 3.3v,并且需要一个电压电平转换器来连接 5v SPI 设备。

我编译了一个自定义内核来生成 spidev 内核模块,现在怎么办? 我知道这与udev规则有关,usb_modeswitch?但我只见树木不见森林。

理想的解决方案是一个程序,我们称之为 sdcard-spi。 当程序启动时,它会翻转驱动程序并在 /dev 中创建一个 spidev 设备。 当它退出时,它会恢复插槽功能,以便能够再次读取 SD 卡。 它可能是一个守护进程 - 启动它会转换插槽,停止它会将插槽转换回 sd 读卡器。

这似乎是 spidev 的编写者可以轻松完成的事情,因为 sd 卡最初是在 SPI 模式下探测的。

为了清楚起见,我想以 SPI 模式打开 sd 读卡器,所以没有检测到卡,我可以使用 spidev 设备节点进行 SPI 通信,例如 /dev/spidev.0。

【问题讨论】:

    标签: linux usb udev


    【解决方案1】:

    您无法通过编写 linux 驱动程序来做到这一点。

    您必须重写读卡器的固件。读卡器内部有一个同步串行接口,但读卡器与Linux计算机的接口不是通用串行接口,而是USB大容量存储设备。

    【讨论】:

    • 呃,不。在您将 sd 卡插入插槽之前,没有大容量存储设备,此时 udev 规则会生效并为 sd 卡上的分区创建设备节点。
    • @PhilipAshmore:实际上,它报告为大容量存储设备配置文件,但状态为 media-not-present。如果设备在没有卡的情况下不进行枚举,并不是说会有任何区别。您仍然无法发送任意 SPI 传输,只能发送由读卡器固件解码的 USB 大容量存储命令。
    • Pic USB 设备 (microchip.com/pagehandler/en-us/technology/usb/home.html) 可以将 spi 与 sd 卡“对话”,因此我可以只使用其中一个(我在途中有 3 个 PIC18F14K50-I/P 样本)。 linux 内核将设备 ID 与内核模块匹配,因此不同的 udev 规则会阻止将设备与 usb_storage 匹配,将其指定为 spidev 模块可以使用的设备。
    • 要考虑的另一个方面是设备树 (devicetree.org/Main_Page),但我不知道如何继续。
    • 我想我希望 sd 读卡器有点像 PIC,但是是的,即使那样,如果它没有设置为允许 SPI 到它的引脚,那么它是不可能的。我希望协议协商和协议切换是由内核模块完成的。 lsusb 将我的设备报告为“Alcor Micro Corp. Multi Flash Reader”,但该设备仅在我的插槽中有 sd 卡时才存在,因此需要添加和删除它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2013-10-25
    • 2018-03-26
    相关资源
    最近更新 更多