做网站怎样产生效益,wordpress 本机安装目录,php大流量网站开发规范,玉器企业网站源码SD2.0协议详解#xff1a;命令格式、初始化/读取/写入 - WangXuan的文章 - 知乎 https://zhuanlan.zhihu.com/p/610495260
参考上述与其它理解#xff0c;若使用GPIO口模拟#xff0c;重点与难点#xff1a;
1. 时钟线问题#xff1a; 在SD准备期间#xff0c;需不间断…SD2.0协议详解命令格式、初始化/读取/写入 - WangXuan的文章 - 知乎 https://zhuanlan.zhihu.com/p/610495260
参考上述与其它理解若使用GPIO口模拟重点与难点
1. 时钟线问题 在SD准备期间需不间断一直发送频率为100kHz- 400kHz的时钟 以让SD卡初始化在初始化完成后时钟频率为0-25MHZ此要求意味着 在空闲时需由PWM或定时器产生需要的持续时钟(初始化完成后应该可以停止了) 在工作时暂停此时钟并使用GPIO模拟工作完成后继续此时钟初始化完成后应该可以关闭但未验证。
2. 校验码问题: CMD线和每根DAT线自身独立产生校验码CMD线为CRC7, DAT线为CRC16此要求 1. 在写 CMD上时问题不大写入前先计算好后一次性写入。 2. 在读SD卡时返回时若简化设计可选择忽略。 3.在向SD写入时将产生一定的计算量以4线为例每线为1024位共512*84096位。
3. 其它 1. 模拟时CMD的起始方向指令共6字节可看作为一个字节校验7位停止位看作最后一字节。 2. 描述中的由host→card共6位指令的“CMDn”中的n对应0-63为标准指令后跟对应32位数据。 3. 描述中的响应 (response) 即从 card 到 host用R1-7“表示CMDn与之有对应关系见相关手册。格式同CMDn但R2例外有共136bit。 物理IO层结构设计 考虑到一个应用绝大多数情况只有一个SD卡即一条SDIO总线故直接单例化设计以提高效率
1. 内部主要函数功能设计位于 SDIO_Soft.c中 仅支持4线DAT模式 _IoInit(): 初始化Clk线为输出其它线为输入上拉。 _SetClk(HZ): 用于配置CLK为指定频率需用PWM或定时器翻转IO实现 _OnClk(): 开始输出固定频率到Clk线上 _OffClk(): 关闭Clk _NoneClk(U8): 发送指定个数据时钟其它位不操作。 _Sendmd(u8 Cmd): 发送8位指令 _RcvCmd(u8 BitCount): 接收指定位应答入接收指令缓冲返回收到位数长度 _SendData(u8只读指针u16数据个数): 发送指定数据到4线dat上。 _RcvData(8只读指针u16数据个数): 从4线dat上接收指定数据个数内部可选接收期间同时收应答指令(放入接收指令缓冲中)。
2. 对外统一函数接口 SDIO.h 设计为SDIO操作的通用接口对其它MCU的SDIO硬件可封装为此接口以方便上层操作。 SDIO_Init()初始化IO开启时钟等。 SDIO_Cmd(u8指令 u32数据,u8前置)发送指令此函数内部计算好校验码后依次发出在U8指令信息的b7置位时接收响应,接收的响应保存入SDIO单例化结构中。返回0正确其它为错误码 SDIO_RdBlock(u8可写数据指针): 上层在带读数据的指令发出后立即调用此函数读入一块数据长度固定为512注意多收尾部的校验码。返回0正确其它为错误码 SDIO_WrBlock(u8只读数据指针): 上层在带写数据的指令发出后立即调用此函数写出一块数据长度固定为512在内部提交计算好CRC16校验码在尾部发出。返回0正确其它为错误码 其它函数 为可选 仅硬件实现的SDIO支持如:DMA, 读写多块等。