转:https://www.cnblogs.com/hellokitty2/p/10981084.html SDIO接口 一、SDIO简介 SDIO接口是在SD内存卡接口的基础上发展起来的接口,SDIO SDIO1.0标准定义了两种类型的SDIO卡: 1.全速的SDIO卡,传输率可以超过100Mbps; 2.低速的SDIO卡,支援的时脉速率在0至400KHz之间。 组合卡指的是存储器+SDIO,对组合卡来操作需要全速和4BIT的传输模式,这是SDIO1.0标准规定的。 二、SDIO总线 SDIO总线和USB总线类似,SDIO总线也有两端,其中一端是主机(HOST)端,另一端是设备端(DEVICE),采用HOST- DEVICE这样的设计是为了简化DEVICE的设计,所有的通信都是由 在SDIO总线定义中,DAT1信号线复用为中断线。在SDIO的1BIT模式下DAT0用来传输数据,DAT1用作中断线。
大家好,又见面了,我是你们的朋友全栈君 1、sdio接口层解析 SDIO总线 SDIO总线和USB总线类似,SDIO也有两端,其中一端是HOST端,另一端是device端。 *sdio_func[SDIO_MAX_FUNCS]; //SDIO functions (devices) sdio_init_func(host->card, i + 1); — (host->card->sdio_func[i]); //将sdio功能设备挂载到sdio_bus_types总线 附:mmc_card结构体中sdio_func[]赋值为分配的sdio_fun结构体 Sdio设备的驱动由sdio_driver结构体定义,sdio_register_driver函数将该设备驱动挂载到sdio_bus_type总线上。 搜 索if_sdio_interrupt,可知道它是在if_sdio.c文件中if_sdio_probe()函数中 sdio_claim_irq(func, if_sdio_interrupt) ,func
对于SDIO接口的wifi,首先,它是一个sdio的卡的设备,然后具备了wifi的功能,所以,注册的时候还是先以sdio的卡的设备去注册的。 下面先简单回顾一下SDIO的相关知识: 一、SDIO相关基础知识解析 1、SDIO接口 SDIO 故名思义,就是 SD 的 I/O 接口(interface)的意思,不过这样解释可能还有点抽像 二、SDIO接口驱动 前面讲到,SDIO接口的wifi,首先,它是一个sdio的卡的设备,然后具备了wifi的功能,所以SDIO接口的WiFi驱动就是在wifi驱动外面套上了一个SDIO SDIO设备的驱动由sdio_driver结构体定义,sdio_driver其实是driver的封装。 搜索if_sdio_interrupt,可知道它是在if_sdio.c文件中if_sdio_probe()函数中sdio_claim_irq(func, if_sdio_interrupt) ,func
如果一个多媒体卡接到了总线上,则 SDIO_D0、SDIO_D[3:0]或 SDIO_D[7:0]可以用于数据传输。 SDIO_CK=SDIOCLK/(2+CLKDIV),CLKDIV 是分配系数 SDIO适配器时钟(SDIOCLK) 该时钟用于驱动 SDIO 适配器,来自 PLL48CK,一般为 SDIO所有的命令和响应都是在SDIO_CMD引脚上面传输的,命令长度固定为48位,SDIO命令格式如下表所示: 除了命令索引和参数需要我们设置,其他都是由SDIO硬件自动控制。 命令索引(如CMD0,CMD1之类)由SDIO_CMD寄存器设置,命令参数则由SDIO_ARG寄存器设置。 ; //SDHC等其他卡,设置最高48/2=24Mhz SDIO_Clock_Set(clkdiv); //设置时钟频率,SDIO时钟计算公式:SDIO_CK时钟=SDIOCLK/[clkdiv+2
SDIO接口是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备。 参考 SDIO1.0标准定义了两种类型的SDIO卡: 全速的SDIO卡,传输率可以超过100Mbps; 低速的SDIO卡,支援的时脉速率在0至400KHz之间。 组合卡指的是存储器+SDIO,对组合卡来操作需要全速和4BIT的传输模式,这是SDIO1.0标准规定的。 一、SDIO总线 SDIO总线和USB总线类似,SDIO总线也有两端,其中一端是主机(HOST)端,另一端是设备端(DEVICE),采用HOST- DEVICE这样的设计是为了简化DEVICE的设计 即使在开机后,SDIO记忆卡的I/O功能尚未被启动,但是CCCR是可以被存取的,这使得SDIO主机于系统初始化后,可以立即启动SDIO记忆卡的I/O功能。
本文将全面介绍瀚海微的SD NAND及其关键组成部分——SDIO协议的工作原理和驱动方法,展现其在现代电子设备中的巨大潜力。 SDIO协议工作原理SDIO(Secure Digital Input/Output)协议是由SD卡协议演进而来,它不仅兼容SD卡协议,还增加了如CMD52、CMD53等命令,以支持更广泛的设备连接和数据传输 SDIO总线采用HOST-DEVICE设计,简化了DEVICE端的设计,所有通信由HOST端发起,DEVICE端解析并执行命令。 SDIO的指令集包含多种命令,如CMD0用于设备复位,CMD51用于报告OCR寄存器等。 3.配置时钟与GPIO:启用SDIO模块所需的时钟,并配置GPIO引脚为SDIO复用功能。设置SDIO时钟频率、数据总线宽度(1bit或4bit)及工作模式(SD模式或SPI模式)。
简介 1.1 SDIO接口应用场景 SDIO 通过 SD 的 I/O 管脚来连接外部的外围 device 并传输数据。 card Radio/TV card 1.2 SDIO速度 SDIO1.0标准定义了两种类型的SDIO卡: 全速的SDIO卡,传输率可以超过100Mbps 低速的SDIO卡,时钟频率在0至400KHz 硬件接口 2.1 SDIO 总线 SDIO总线 和 USB总线 类似,SDIO也有两端,其中一端是HOST端,另一端是device端。 Linux SDIO WIFI驱动 SDIO 接口的 wifi,首先,它是一个 sdio 卡 设备,然后具备了 wifi 的功能,所以 SDIO 接口的 WiFi 驱动就是在 wifi 驱动外面套上了一个 SDIO 驱动 的外壳 SDIO驱动代码目录:drivers/mmc 下有 mmc卡、sd卡、sdio 卡驱动 驱动分层:主机驱动层(实现SDIO驱动) => 核心层(向上向下接供接口) => 设备驱动层
三、sdio、sd卡的区别: SDIO是在SD卡规范间上增加了对IO设备的支持, 操作命令与sd有些不同有些相同, sd支持的叫sd card, sdio支持的叫sdio卡(如各种wifi, gps, eMMC = NAND flash + 控制器 + 标准封装接口 2、引脚定义 八、SDIO 1、 SDIO简介 SDIO接口是在SD内存卡接口的基础上发展起来的接口, SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备。 SDIO1.0标准定义了两种类型的SDIO卡: 1.全速的SDIO卡,传输率可以超过100Mbps; 2.低速的SDIO卡,支援的时脉速率在0至400KHz之间。 组合卡指的是存储器+SDIO,对组合卡来操作需要全速和4BIT的传输模式,这是SDIO1.0标准规定的。
文章目录 SDIO信号和接口 SDIO命令流程 SDIO寄存器 卡检测 卡识别 卡常用命令 SDIO,全称:Secure Digital Input and Output ,即安全数字输入输出接口 SDIO卡是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备,目前根据SDIO协议的SPEC,SDIO接口支持的设备总类有蓝牙,网卡,电视卡等。 SDIO寄存器 SDIO命令寄存器 SDIO_CMD SDIO电源控制寄存器 SDIO_POWER 该寄存器只有最低2位(PWRCTRL[1:0])有效,其他都是保留位,STM32复位以后, SDIO时钟控制寄存器 SDIO_CLKCR 注意:当SDIO_CK频率过快时,可能导致SD卡通信失败,此时,建议降低SDIO_CK试试。 SDIO状态寄存器 SDIO_STA 另外,SDIO的清除中断寄存器(SDIO_ICR)和中断屏蔽寄存器(SDIO_MASK),这两个寄存器和状态寄存器(SDIO_STA)每个位的定义都相同,只是功能各有不同
stm32内核自带了SDIO适配器,下面上框图(手册自带): 根据框图我们可以看到SDIO适配器的时钟与PCLK2和SDIOCLK有关,SDIO适配器的控制与SDIO_CK和SDIO_CMD有关 这里我们可以调用SDIO_SendCommand()这个库函数,用来通过SDIO总线的SDIO_CMD以SDIO_CK这样的频率,对外围设备如SD卡发送CMD命令,并且可以获取响应数据。 ; SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable; //不使用bypass模式,直接用HCLK进行分频得到SDIO_CK SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable; // 空闲时不关闭时钟电源 SDIO_InitStructure.SDIO_BusWide SDIO的所有命令和响应都是在SDIO_CMD引脚上面传输的,命令长度固定位48位,SDIO命令格式如下表所示: 其中除了命令索引和参数需要我们设置,其他都是由SDIO硬件自动控制。
SDIO接口的WIFI: 1、WIFI是一个sdio卡设备 2、具备wifi功能 SDIO接口的WIFI驱动就是在WIFI外面套上一个SDIO驱动的外壳 SDIO部分代码结构: drivers/ mmc 下有 mmc卡、sd卡、sdio 卡驱动。 card 设备驱动层(wifi 设备): | core 核心层(向上向下提供接口) | host 主机驱动层(实现 SDIO 驱动) 我们主要关心 core 目录(CORE 层),其中是媒体卡的通用代码 CORE 层完成: 不同协议和规范的实现 为 HOST 层的驱动提供了接口函数 完成了 SDIO 总线注册 对应 ops 操作 以及支持 mmc 的代码 host 目录(HOST 层)是根据不通平台而编写的 SDIO card 设备驱动层(wifi 设备): | core 核心层(向上向下提供接口) | host 主机驱动层(实现 SDIO 驱动) 核心层根据需要构造各种MMC/SD命令,这些命令怎么发送给
"硬盘" 升级为 "万能接口": 2.2 SDIO 引脚定义:10 根线的 "超能力解析" 现在重点拆解 SDIO 的 10 根引脚(主机视角),注意和 SD 卡的区别: 引脚名称 编号 方向 2.3 外设分类:SDIO 能接哪些 "神奇设备"? SDIO 设备分三大类,每类对应不同的命令集和应用场景: 三、PCI 配置空间:SDIO 设备的 "电子身份证" 当 SDIO 设备插入主机(比如手机的 AP 处理器),主机怎么知道这是 Wi-Fi 主机发 CMD0 命令复位设备,确认是 SDIO 设备(响应里带 "SDIO" 标志) 2. 发 CMD58 读取电压等级,协商 1.8V 或 3.3V 供电 3. SDIO 工作在存储模式,和 SD 卡无缝兼容 5.2 物联网设备:小接口实现大扩展 工业网关:外接 4G 模块(如移远 EC25)通过 SDIO 连接主控,同时用 SD 卡存日志,一个接口搞定通信
SDIO总线介绍SDIO(Secure Digital lnput and Output),即安全数字输入输出接口。SDIO总线协议是由SD协议演化而来,它主要是对SD协议进行了一些扩展。 SDIO总线主要是为SDIO卡提供一个高速的I/O能力,并伴随着较低的功耗。SDIO总线不但支持SDIO卡,而且还兼容SD内存卡。 支持SDIO的设备比如手机和相机不仅能支持SD卡,TF卡,随着SDIO硬件设备的扩充SDIO总线的外围能够支持更多的SDIO设备比如Bluetooth,WIFI,GPS,Camera sensor等,它们的识别过程跟 ARM端sdio_test案例实现SDIO Master功能,具体如下:(1)打开SDIO设备节点,如:/dev/generic_sdio0;(2)发送数据至SDIO总线,以及从SDIO总线读取数据;( FPGA端dram_sdio案例实现SDIO Slave功能,具体如下:(1)FPGA将SDIO Master发送的数据保存至DRAM;(2)SDIO Master发起读数据时,FPGA从DRAM读取数据
二、SDIO框图以及SDIO时钟 复位后SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度(通过ACMD6命令设置)。 如果一个多媒体卡接到了总线上,则SDIO_D0、SDIO_D[3:0]或SDIO_D[7:0]可以用于数据传输。 2、SDIO适配器时钟(SDIOCLK):该时钟用于驱动SDIO适配器,可用于产生SDIO_CK时钟。 2、SDIO时钟控制寄存器(SDIO_CLKCR) 3、SDIO参数寄存器(SDIO_ARG) 4、SDIO命令寄存器(SDIO_CMD) 低6位为命令索引,即要发送的命令索引号(如发送 10、SDIO状态寄存器(SDIO_STA) 状态寄存器可以用来查询SDIO控制器的当前状态,以便处理各种事务。比如SDIO_STA的位2表示命令响应超时,说明SDIO的命令响应出了问题。
模块 1、SDIO-Wifi模块介绍 SDIO-Wifi模块是基于SDIO接口的符合WiFi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过 SDIO具有传输数据快,兼容SD、MMC接口等特点。 对于SDIO接口的WiFi,首先,它是一个SDIO的卡设备,然后具备了WiFi的功能。 ,使得 SDIO 外围(我们称为 SDIO 卡)的开发与应用变得相当热门。 card SD卡与SDIO卡的异同 1.SD卡使用的是SD卡协议,而SDIO卡使用的是SDIO协议;协议不一样,初始化/读写方式都不一样 2.ARK1600控制器既支持SD卡也支持SDIO卡,在驱动上完全可以做到同一个卡槽既支持 对于SDIO总线,它的HOST端是开发板mmc控制器,而device端则是各种带SDIO接口的模块,比如SDIO WiFi模块。
在NAND Flash与主控HOST的交互中,SDIO接口扮演了至关重要的角色。 SDIO接口的优势1.双向传输能力:与SD卡不同,SDIO接口支持数据的双向传输,即同时进行输入和输出,极大地提高了数据传输效率。 4.广泛的兼容性:SDIO接口标准得到了广泛的支持和应用,与多种外设兼容,使得系统设计更加灵活和便捷。 主控HOST的作用在NAND Flash与SDIO接口的数据传输过程中,主控HOST扮演着至关重要的角色。 小型化的SDIO存储芯片已经越来越能符合电路设计者的要求,如瀚海微的SD NAND,小型化封装容量最大可达64GB.
SDIO-WiFi即基于SDIO接口符合WiFi标准的嵌入式模块,内置802.11协议栈以及TCP/IP协议栈,可实现主平台铜鼓SDIO到无线网络之间转换 SDIO:传输数据块,兼容SD,MMC接口等 先以SDIO设备注册,然后检测到再注册WiFi功能,即用SDIO协议发送命令和数据 sdio 基本概念 接口 1.SD的IO接口,透过SD的IO接口连接外设,透过SD卡的IO数据接位与外设传递数据 static struct sdio_driver if_sdio_driver = { .name = “libertas_sdio”, .id_table = if_sdio_ids, .probe = if_sdio_probe, .remove = if_sdio_remove, .drv = sdio_driver *drv = to_sdio_driver(dev->driver); struct sdio_func *func = dev_to_sdio_func(dev);
SDIO 接口。 4.2 配置DMA SDIO 外设支持生成 DMA 请求,使用 DMA 传输可以提高数据传输效率,因此在 SDIO 的控制代码中,可以把它设置为 DMA 传输模式或轮询模式,ST 标准库提供 SDIO None */ static void MX_SDIO_SD_Init(void) { /* USER CODE BEGIN SDIO_Init 0 */ /* USER CODE END SDIO_Init = HAL_SD_CARD_TRANSFER ); /* SDIO DMA DeInit */ /* SDIO DeInit */ HAL_DMA_DeInit(&hdma_sdio); /* SDIO = HAL_SD_CARD_TRANSFER ); /* SDIO DMA DeInit */ /* SDIO DeInit */ HAL_DMA_DeInit(&hdma_sdio); /* SDIO
布线简单:仅需使用2条IIC总线或3条SPI总线 SDIO SDIO是SD型的扩展接口,除了可以接SD卡外,还可以接支持SDIO接口的设备,插口的用途不止是插存储卡。 SDIO协议是由SD卡的协议演化升级而来的,很多地方保留了SD卡的读写协议,同时SDIO协议又在SD卡协议之上添加了CMD52和CMD53命令。 由于这个,SDIO和SD卡规范间的一个重要区别是增加了低速标准,低速卡的目标应用是以最小的硬件开始来支持低速I/O能力。低速卡支持类似调制解调器,条形码扫描仪和GPS接收器等应用。 高速卡支持网卡,电视卡还有“组合”卡等,组合卡指的是存储器+SDIO。 SDIO和SD卡的SPEC间的又一个重要区别是增加了低速标准。SDIO卡只需要SPI和1位SD传输模式。 对组合卡来说,全速和4BIT操作对卡内存储器和SDIO部分都是强制要求的。 在非组合卡的SDIO设备里,其最高速度要只有达到25M,而组合卡的最高速度同SD卡的最高速度一样,要高于25M。
外设寄存器设置为默认值 SDIO->POWER=0x00000000; SDIO->CLKCR=0x00000000; SDIO->ARG=0x00000000; SDIO->CMD =0x00000000; SDIO->DTIMER=0x00000000; SDIO->DLEN=0x00000000; SDIO->DCTRL=0x00000000; SDIO->ICR=0x00C007FF (SDIO->STA&(SDIO_FLAG_RXOVERR|SDIO_FLAG_DCRCFAIL|SDIO_FLAG_DTIMEOUT|SDIO_FLAG_DBCKEND|SDIO_FLAG_STBITERR (void); SDIO_SD_ERROR_INFO SDIO_CmdResp7Error(void); SDIO_SD_ERROR_INFO SDIO_CmdResp1Error(u8 cmd); SDIO_SD_ERROR_INFO SDIO_CmdResp3Error(void); SDIO_SD_ERROR_INFO SDIO_CmdResp2Error(void); SDIO_SD_ERROR_INFO