marvell 88W8686 sdio wifi模块学习

本文介绍了SDIO接口的基础知识,包括SD总线、SD命令、CMD52和CMD53命令。详细讲解了Marvell 88W8686 SDIO WiFi模块的引脚图和工作原理,以及如何通过STM32进行初始化和数据传输。文中还提供了代码示例,展示了如何进行SDIO初始化和CMD53命令的使用,以便与WiFi模块进行通信。
摘要由CSDN通过智能技术生成

 

一、SDIO简介

SD卡(Secure Digital Memory Card)在我们生活中已经非常普遍了,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种就是SDIO接口。SDIO(Secure Digital Input and Output) 全称是安全数字输入/输出接口,多媒体卡(MMC)、SD卡、SD I/O卡都有SDIO接口。STM32控制器有SDIO主机接口,它可以与MMC卡、SD卡、SD I/O卡以及CE-ATA设备进行数据传输。MMC卡可以说是SD卡的前身,现阶段已经用得很少。SD I/O卡本身不是用于存储的卡,它是指利用SDIO传输协议的一种外设。比如Wi-Fi Card,它主要是提供Wi-Fi功能,有些Wi-Fi模块是使用串口或者SPI接口进行通信的,但Wi-Fi SDIO Card是使用SDIO接口进行通信的。SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转换。SDIO具有传输数据快,兼容SD、MMC接口等特点。

SD总线

SDIO总线和USB总线类似,SDIO也有两端,其中一端是HOST端,另一端是device端。所有的通信都是由HOST端发送命令开始的,Device端只要能解析命令,就可以相互通信。

CLK信号:HOST给DEVICE的 时钟信号,每个时钟周期传输一个命令。

CMD信号:双向 的信号,用于传送 命令 和 反应。

DAT0-DAT3 信号:四条用于传送的数据线。

SD命令

SDIO总线上都是HOST端发起请求,然后DEVICE端回应请求,其中请求和回应中会包含数据信息:

1. Command:用于开始传输的命令,是由HOST端发往DEVICE端的,其中命令是通过CMD信号线传送的;

2. Response:回应是DEVICE返回的HOST命令作为Command的回应。也是通过CMD线传送的;

3. Data:数据是双向的传送的。可以设置为1线模式,也可以设置为4线模式。数据是通过DAT0-DAT3信号线传输的。

SDIO的每次操作都是由HOST在CMD线上发起一个CMD,对于有的CMD,DEVICE需要返回Response,有的则不需要。

 对于读命令,首先HOST会向DEVICE发送命令,紧接着DEVICE会返回一个握手信号,此时,当HOST收到回应的握手信号后,会将数据放在4位的数据线上,在传送数据的同时会跟随着CRC校验码。当整个读传送完毕后,HOST会再次发送一个命令,通知DEVICE操作完毕,DEVICE同时会返回一个响应。

对于写命令,首先HOST会向DEVICE发送命令,紧接着DEVICE会返回一个握手信号,此时,当HOST收到回应的握手信号后,会将数据放在4位的数据线上,在传送数据的同时会跟随着CRC校验码。当整个写传送完毕后,HOST会再次发送一个命令,通知DEVICE操作完毕,DEVICE同时会返回一个响应。

 

SDIO 的寄存器:

SDIO 卡的设备驱动 80% 的任务就是操作 SDIO 卡上的有关寄存器。 SDIO 卡最多允许有 7 个功能( function) ,这个同其功能号是对应的( 0 ~ 7 ) , 每个功能都对应一个 128K 字节大小的寄存器,这个见下面的图。功能号之所以取值范围是 1~7 ,而没有包含 0 ,是因为功能 0 并不代表真正的功能,而代表 CIA 寄存器,即 Common I/O Area ,这个纪录着 SDIO 卡的一些基本信息和特性,并且可以改写这些寄存器。其中地址 0x1000~0x17fff 是 SDIO 卡的 CIS 区域,就是基本信息区域, Common Information Structure 。初始化的时候读取并配对 SDIO 设备。

这些寄存器的详细分区已经其对应的功能,在开发过程中都是需要仔细研读的,这些都在协议的 SPEC中都有详细说明,这里就不在罗索了。

 

CMD52 命令:

SDIO 设备为了和 SD 内存卡兼容, SD 卡所有 Command 和 Response 完全兼容,同时加入了一些新的 Command 和Response 。例如,初始化 SD 内存卡使用 ACMD41 ,而 SDIO 卡设备则用 CMD5 通知 DEVICE 进行初始化。

但二者最重要的区别是, SDIO 卡比 SD 内存卡多了 CMD52 和 CMD53 命令,这两个命令可以方便的访问某个功能的某个地址寄存器。

CMD52 命令是 IO_RW_DIRECT 命令的简称,其命令格式如下

 

首先第一位为 0, 表明是起始位,第二位为传输方向,这里为 1 ,代表方向为 HOST 向 DEVICE 设备传送,其后 6 位为命令号,这里是 110100b ,用十进制表示为 52 , CMD52 的名字也由此而来。紧接着是读写标志位。

然后是操作的功能号。也就是 function   number 。如果为 0 则指示为 CCCR 寄存器组。

紧接着是寄存器地址,用17 指示,由于功能寄存器有 128K 地址, 17 位正好能寻址。

再下来 8 位 Write data or Staff Bits的意思是说,如果当前为写操作,则为数据,否则 8 位为填充位。无意义。

最后 7 位为 CRC 校验码。最后一位为结束位 0 。

对于 CMD52 的 Response 是 48 位,命令格式如下:

总结下, CMD52 是由 HOST 发往 DEVICE 的,它必须有 DEVICE 返回来的 Response 。 CMD52 不需要占用DAT 线,读写的数据是通过 CMD52 或者 Response 来传送。每次 CMD52 只能读或者写一个 byte .

 

CMD53 命令:

CMD52 每次只能读写一个字节,因为有了 CMD53 对读写进行了扩展, CMD53 允许每次读写多个字节或者多个块(BLOCK)。 CMD53 的命令格式如下:

第一位是 1, 为开始位,然后是一位方向位,总是 1 ,代表方向为 HOST 向 DEVICE 设备传送,其后 6 位为命令号,这里是 110101b ,用十进制表示为 53 , CMD53 的名字也由此而来。

然后是 1 位的读写标志。接着是 3 位功能号,这个同 CMD52 都是相同的。 Block   Mode 如果 1 FONT>代表是块传输模式,否则为字节传输模式。

OP Code 为操作位,如果是 0 ,代表数据往固定的位置读写,如果 1 代表是地质增量读写。例如,对地址 0 固定读写16 个字节,相当于 FONT>16 次读写的地址 0 ,而对地址 0 增量读写 16 个字节,相当于读写 0~15 地址的数据。

然后是 17 位的地址寄存器,可以寻址到 128K 字节的地址,然后是 9 位的读写的计数,对于字节读取,读写大小就是这个计数,而对于块读写,读写的大小是计数乘以块的大小。

随后的 7 位为 CRC 校验码。最后一位为 1 。

当读写操作是块操作的时候,块的大小是可以通过设置 FBR 中的相关寄存器来设置。

同 CMD52 命令不同的是, CMD53 没有返回的命令的,这里判断是否 DEVICE 设备读写完毕是需要驱动里面自己判断的,一般有 2 个方法, 1. 设置相应的读写完毕中断。如果DEVICE 设备读写完毕,则对 HOST 设备发送中断。 2.HOST 设备主动查询 D

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值