实现SDIO以接口SPI设备

时间:2013-10-09 20:12:08

标签: linux linux-device-driver microcontroller sd-card spi

人,

我一直看到有关如何使用SPI接口操作SD存储卡的参考资料。 这是我想要的。我需要完全相反。

我希望能够在我的“主机”(任何具有SD卡接口的PC)中使用SDIO控制器(通过SD插槽)与我的设备(基本上是微控制器)通信,这些设备只能“说”SPI。

如果我的理解不是太错误,我不能简单地告诉我的SD控制器以原始SPI模式通话,但我可以教我的微控制器表现为可以由我的主机控制的SDIO设备。

这样我还有两个挑战:

  1. 在我的微控制器中正确实现通用SDIO设备。
  2. 在主机中实施/配置正确的驱动程序,以便能够与我的设备进行交互。
  3. 实施SDIO设备似乎是遵循spec的问题。 不过,主机端驱动程序是我希望在Linux中使用一些已经存在的内核空间驱动程序到SDIO的用户空间驱动程序可以实现的。

    这就是我来寻求帮助的重点。 任何人都可以请指出任何可以帮助我完成任务的样本,文件或任何资源吗?

2 个答案:

答案 0 :(得分:1)

在PC端,这就是您所需要的:http://sourceforge.net/projects/sdio-linux/

这可能对参考有用:http://www.varsanofiev.com/inside/WritingLinuxSDIODrivers.htm(虽然,我认为你不会写一个驱动程序)

在微控制器方面,使用“bit-banging”来实现SDIO规范。

但是,首先要考虑为什么这样做。 SDIO和SPI只是串行协议,USB也是如此;你宁愿做一个SPI-to-USB桥? USB在主机端更加用户友好,并且更标准/更常见。如果你确实想要一个SPI-to-USB桥,那么它已经存在,SPI Shortcut(可能是其他选项,这只是第一个想到的选择)

EDIT 或者,如果主机支持I2C(很多都可以),你可以在micro上对I2C进行bit-bang。实际上,通过主机支持的每个串行协议,看看你是否可以从微观方面轻松支持它(通过位冲击,因为微内核可能没有内置该协议的从模式)。 RS232(带电平转换器),I2C和SPI可能是首选。我认为SDIO几乎是最后的选择。

答案 1 :(得分:0)

SDIO的指定非常严格。除非您的微控制器具有设计用作设备而非主机的SDIO模块,否则我认为这不可行。我知道一些实现SDIO设备的专用通信控制器,但我没有遇到任何通用微控制器。

您需要一个相当快的微控制器才能在高达400 kHz的频率下进行SDIO初始化。如果以180 MHz运行STM32F4,则只能在SDIO时钟周期之间进行微控制器周期。如果主机在初始化后将时钟速度调到最大25 MHz,则SDIO时钟之间的时间间隔为7个周期。

有关SDIO规范的观点,您链接的是一个简化的规范,不包括总线的信令和时序。完整的规格要大很多倍。

正如亚历克斯一样,我们可能会有更好的选择。如果您的SDIO主机支持SPI模式,那么大多数微控制器都有SPI外设可以充当从机而不是主机,因此这可能是一个没有外设的途径。如果你的数据速率足够低,一个简单的UART就足够了(你可以在短距离内合理地达到1 Mbit)。