SD/MMC/SDIO 概念区分概要

本文介绍了SD(Secure Digital)及SDIO(Secure Digital I/O)技术,详细阐述了这两种技术的区别及其应用。SD是一种广泛使用的闪存卡标准,而SDIO则允许通过SD插槽连接外围设备,支持如Wi-Fi、GPS等外设。文中还对比了SD与MMC(Multimedia Card)的不同之处,并介绍了SD/SDIO的传输模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SD(Secure Digital)与 MMC(Multimedia Card)


SD 是一种 flash memory card 的标准,也就是一般常见的 SD记忆卡,而 MMC 则是较早的一种记忆卡标准,目前已经被 SD 标准所取代。在维基百科上有相当详细的 SD/MMC规格说明:[http://zh.wikipedia.org/wiki/Secure_Digital]。


SDIO(Secure Digital I/O)


SDIO 是目前我们比较关心的技术,SDIO 故名思义,就是 SD的 I/O 接口(interface)的意思,不过这样解释可能还有点抽像。更具体的说明,SD本来是记忆卡的标准,但是现在也可以把 SD 拿来插上一些外围接口使用,这样的技术便是 SDIO。


所以 SDIO 本身是一种相当单纯的技术,透过 SD 的 I/O接脚来连接外部外围,并且透过 SD 上的 I/O 数据接位与这些外围传输数据,而且 SD协会会员也推出很完整的 SDIO stack 驱动程序,使得 SDIO 外围(我们称为 SDIO卡)的开发与应用变得相当热门。


现在已经有非常多的手机或是手持装置都支持 SDIO 的功能(SD 标准原本就是针对 mobile device 而制定),而且许多 SDIO 外围也都被开发出来,让手机外接外围更加容易,并且开发上更有弹性(不需要内建外围)。目前常见的 SDIO外围(SDIO 卡)有:



  • Wi-Fi card(无线网络卡)
  • CMOS sensor card(照相模块)
  • GPS card
  • GSM/GPRS modem card
  • Bluetooth card
  • Radio/TV card(很好玩)

SDIO 的应用将是未来嵌入式系统最重要的接口技术之一,并且也会取代目前 GPIO式的 SPI 接口。


SD/SDIO 的传输模式


SD 传输模式有以下 3 种:



  • SPI mode(required)
  • 1-bit mode
  • 4-bit mode

SDIO 同样也支持以上 3 种传输模式。依据 SD 标准,所有的 SD(记忆卡)与 SDIO(外围)都必须支持 SPI mode,因此 SPI mode是「required」。此外,早期的 MMC 卡(使用 SPI 传输)也能接到 SD插糟(SD slot),并且使用 SPI mode 或 1-bit mode 来读取。


SD 的 MMC Mode


SD 也能读取 MMC 内存,虽然 MMC 标准上提到,MMC 内存不见得要支持 SPI mode(但是一定要支持 1-bit mode),但是市面上能看到的 MMC卡其实都有支持 SPI mode。因此,我们可以把 SD 设定成 SPI mode 的传输方式来读取 MMC 记忆卡。


SD 的 MMC Mode 就是用来读取 MMC 卡的一种传输模式。不过,SD 的 MMC Mode 虽然也是使用 SPI mode,但其物理特性仍是有差异的:



  • MMC 的 SPI mode 最大传输速率为 20 Mbit/s;
  • SD 的 SPI mode 最大传输速率为 25 Mbit/s。

为避免混淆,有时也用 SPI/MMC mode 与 SPI/SD mode 的写法来做清楚区别。

void mmc_rescan(struct work_struct *work) 2214 { 2215 struct mmc_host *host = 2216 container_of(work, struct mmc_host, detect.work); 2217 int i; 2218 2219 if (host->rescan_disable) 2220 return; 2221 2222 /* If there is a non-removable card registered, only scan once */ 2223 if (!mmc_card_is_removable(host) && host->rescan_entered) 2224 return; 2225 host->rescan_entered = 1; 2226 2227 if (host->trigger_card_event && host->ops->card_event) { 2228 mmc_claim_host(host); 2229 host->ops->card_event(host); 2230 mmc_release_host(host); 2231 host->trigger_card_event = false; 2232 } 2233 2234 /* Verify a registered card to be functional, else remove it. */ 2235 if (host->bus_ops) 2236 host->bus_ops->detect(host); 2237 2238 host->detect_change = 0; 2239 2240 /* if there still is a card present, stop here */ 2241 if (host->bus_ops != NULL) 2242 goto out; 2243 2244 mmc_claim_host(host); 2245 if (mmc_card_is_removable(host) && host->ops->get_cd && 2246 host->ops->get_cd(host) == 0) { 2247 mmc_power_off(host); 2248 mmc_release_host(host); 2249 goto out; 2250 } 2251 2252 /* If an SD express card is present, then leave it as is. */ 2253 if (mmc_card_sd_express(host)) { 2254 mmc_release_host(host); 2255 goto out; 2256 } 2257 2258 for (i = 0; i < ARRAY_SIZE(freqs); i++) { 2259 unsigned int freq = freqs[i]; 2260 if (freq > host->f_max) { 2261 if (i + 1 < ARRAY_SIZE(freqs)) 2262 continue; 2263 freq = host->f_max; 2264 } 2265 if (!mmc_rescan_try_freq(host, max(freq, host->f_min))) 2266 break; 2267 if (freqs[i] <= host->f_min) 2268 break; 2269 } 2270 2271 /* A non-removable card should have been detected by now. */ 2272 if (!mmc_card_is_removable(host) && !host->bus_ops) 2273 pr_info("%s: Failed to initialize a non-removable card", 2274 mmc_hostname(host)); 2275 2276 /* 2277 * Ignore the command timeout errors observed during 2278 * the card init as those are excepted. 2279 */ 2280 host->err_stats[MMC_ERR_CMD_TIMEOUT] = 0; 2281 mmc_release_host(host); 2282 2283 out: 2284 if (host->caps & MMC_CAP_NEEDS_POLL) 2285 mmc_schedule_delayed_work(&host->detect, HZ); 2286 }
最新发布
07-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值