实现SDIO接口SPI设备

人,

我总是看到有关如何使用SPI接口来操作SD存储卡的参考资料。 这不是我想要的。 我需要做的恰恰相反。

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

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

这样我仍然有两个挑战:

  1. 在我的微控制器中正确实现一个通用的SDIO设备。
  2. 在主机中实施/configuration正确的驱动程序,以便能够与我的设备进行交互。

实现SDIO设备似乎是遵循规范的问题 。 但是,主机端驱动程序,我希望我能用Linux中的用户空间驱动程序使用一些已经存在的内核驱动程序SDIO来完成。

这是我来求助的一点。 任何人都可以请指点任何样本,文件或任何资源,可以帮助我在我的任务?

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

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

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

但是,首先考虑为什么这样做。 SDIO和SPI只是串行协议,USB也是; 难道你不想制造一个SPI到USB的桥接器吗? USB在主机端更方便用户,而且更为标准/更普遍。 如果你确实想要一个SPI到USB的桥接器,结果证明它已经存在, SPI快捷方式 (可能是其他的选择,这只是第一个想到的)

编辑或者,如果主机支持I2C(很多),则可以在微处理器上对I2C进行位操作。 实际上,通过主机支持的每一个串行协议,看看你是否可以轻易地从微端支持它(有点微不足道,因为micro可能没有内置协议的从属模式)。 RS232(带电平移位器),I2C和SPI可能是首选。 我想,SDIO是最后的选择。

SDIO是非常严格的。 除非你的微控制器有一个被设计成一个设备而不是主机的SDIO模块,否则我不认为这是可能的。 我知道一些实现SDIO设备的专用通信控制器,但是我还没有遇到过任何通用的微控制器。

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

对于SDIO规范的透视图,您链接的是一个简化规范,不包括总线的信号和时序。 完整的规格要大很多倍。

正如我所说的Alex,可能有更好的替代方案来满足你的需要。 如果您的SDIO主机支持SPI模式,大多数微控制器都有SPI外设,可以作为从机而不是主机,所以这可能是没有外设的途径。 如果你的数据速率足够低,一个简单的UART就足够了(你可以在短距离内合理地达到1 Mbit)。