查看: 671|回复: 3
收起左侧

RISC-V MCU开发实战 (二):SD初应用

[复制链接]

  离线 

  • TA的每日心情
    拍拍
    2021-10-29 10:26
  • 签到天数: 1 天

    [LV.1]

    发表于 2021-10-27 13:49:22 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    软件平台 MounRiver Studio(MRS),硬件平台CH32V103开发板,以及一张小于32G SD卡。

    1、SD卡简介
    SD存储卡( Secure Digital Memory Card)是一种基于半导体快闪存储器的新一代高速存储设备。SD存储卡的技术是从MMC卡( MultiMedia Card格式上发展而来,在兼容SD存储卡基础上发展了SDIO( SD Input/ Output)卡,此兼容性包括机械,电子,电力,信号和软件,通常将SD、SDIO卡俗称SD存储卡。
    SD卡具有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性,它被广泛地应用于便携式装置上,例如数码相机、平板电脑和多媒体播放器等。根据SD卡容量大小不同,可将SD卡分为以下几类:

    0~2G:SD卡;2~32G:SDHC卡;32~2T:SDXC卡;
    其中,SD卡协议和SDHC卡版本协议基本兼容,但SDXC卡与SD卡和SDHC卡相差较大,本文主要介绍使用SD卡和SDHC卡。

    控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种是SDIO接口。 SPI协议驱动SD卡方式相较于SDIO驱动SD卡方式,使用引脚资源少,控制程序相对较为简单,但传输速度不如使用SDIO接口的快。由于CH32V103开发板上SD卡槽与芯片引脚的连接方式为SPI驱动方式,因此本文采用SPI协议驱动SD卡方式。

    使用SPI方式驱动SD卡需要用到以下几个寄存器:
    ① CID:卡识别号(Card identification number),用来识别卡的唯一的个体号码;
    ② CSD:卡的特定数据(Card Specific Data),指卡的操作条件信息;
    ③ SCR:SD配置寄存器(SD Configuration Register),SD卡特殊性信息;
    ④ OCR:操作条件寄存器(Operation conditions register)
    关于SD卡其他寄存器信息,可参考SD 简易规格文件《 Physical Layer Simplified Specification V2.0》。
    关于SD命令格式,固定为48bit,通过命令线(CMD)连续传输,其具体命令格式以及命令解释如下:
    MounRiver Stuido IDE-RISC-V MCU开发实战 (二):SD初应用risc-v单片机中文社区(1)
    起始位和终止位:命令的主体包含在起始位与终止位之间,它们都只包含一个数据位,起始位为0,终止位为1。
    传输标志:用于区分传输方向,该位为1时表示命令,方向为主机传输到SD卡,该位为0时表示响应,方向为SD卡传输到主机。
    命令主体内容包括命令、地址信息/参数和 CRC 校验三个部分。
    1.命令号:它固定占用6bit,所以总共有64个命令(代号: CMD0~CMD63),每个命令都有特定的用途,部分命令不适用于SPI总线,或不适用于SD卡操作,只是专门用于MMC卡或者SDI/O卡。
    2.地址/参数:每个命令有32bit地址信息/参数用于命令附加内容,例如,广播命令没有地址信息,这32bit用于指定参数,而寻址命令这32bit用于指定目标SD卡的地址,使用SPI总线驱动时,通过片选引脚来选择不同的卡,所以使用这些命令时地址可填充任意值。
    3.CRC7校验:长度为7bit的校验位用于验证命令传输内容正确性,如果发生外部干扰导致传输数据个别位状态改变将导致校准失败,也意味着命令传输失败,SD卡不执行命令。使用SPI驱动时,命令中的CRC7校验默认是关闭的,即这CRC7校验位中可以写入任意值而不影响通讯,仅在发送CMD0命令时需要强制带标准的CRC7校验。
    SPI模式下有以下几个重要的操作指令:
    MounRiver Stuido IDE-RISC-V MCU开发实战 (二):SD初应用risc-v单片机中文社区(2)
    SD卡R1响应格式如下:
    MounRiver Stuido IDE-RISC-V MCU开发实战 (二):SD初应用risc-v单片机中文社区(3)
    关于SD卡具体信息,可参考《 Physical Layer Simplified Specification V2.0》。
    2、MRS中开发流程
    1)首先新建一个CH32V103C8T6 的工程,这个要与对应芯片对应
    MounRiver Stuido IDE-RISC-V MCU开发实战 (二):SD初应用risc-v单片机中文社区(4)
    上图最下方红框中是对选中芯片的资源的简单介绍,方便查询

    2) 新建完工程之后,我们打开main.c文件,可以看到主函数只是一些初始化和串口打印,我们自己的主函数逻辑可以添加在打印下面就可以了;
    3) 新建一个hardware的文件夹,右键工程new->folder,填写文件名,点击finish即可,我们可以以同样的方式在hardware目录下再新建SD目录,SPI目录,条理清晰。
    4) 在SPI目录下,New>Source File,填写文件名spi.c,内容是SPI初始化函数以及读写函数,在新建个spi.h文件用来声明函数,这个新的头文件需要添加到头文件寻址路径中,点击菜单栏 按钮,在弹出的页面中,如下图,点击绿色加号添加路径即可
    MounRiver Stuido IDE-RISC-V MCU开发实战 (二):SD初应用risc-v单片机中文社区(5)
    部分代码截图如下,有详细注释,不再赘述
    MounRiver Stuido IDE-RISC-V MCU开发实战 (二):SD初应用risc-v单片机中文社区(6)
    MounRiver Stuido IDE-RISC-V MCU开发实战 (二):SD初应用risc-v单片机中文社区(7)

    5) 在 SD目录下新建sd.c ,sd.h,添加头文件路径方式与上条一致,sd.h文件主要包括各种宏定义及函数声明,包括SD卡类型定义、SD卡指令定义等以及函数声明;
    sd.c文件主要进行SD初始化等操作,关于SD卡初始化函数SD_Initialize,其具体操作流程如下:
    (1)调用SD_SPI_Init函数初始化GPIO口及SPI工作模式,同时控制片选引脚使之输出高电平;
    (2)利用for循环并调用SD_SPI_ReadWriteByte函数进行10读写操作,同时产生80个时钟信号,满足SD卡初始化至少需要74个时钟的要求;
    (3)调用SD_SendCmd函数发送CMD0命令,复位SD卡同时进入空闲状态;
    (4)调用SD_SendCmd函数发送相关命令对SD卡版本类型进行判断,同时返回响应信息。
    关于sd.c文件中其他函数,程序中都有相应注释,可结合注释以及《 Physical Layer Simplified Specification V2.0》手册进行理解。

    部分代码如下:
    MounRiver Stuido IDE-RISC-V MCU开发实战 (二):SD初应用risc-v单片机中文社区(8)

    MounRiver Stuido IDE-RISC-V MCU开发实战 (二):SD初应用risc-v单片机中文社区(9)

    6) main.c文件主要进行相关函数初始化以及SD卡插入检测、初始化检测以及读取SD卡容量大小
    MounRiver Stuido IDE-RISC-V MCU开发实战 (二):SD初应用risc-v单片机中文社区(10)
    7) 在工具栏中点击编译按钮,进行编译,生成二进制文件,开发环节结束
    3、验证
    点击菜单栏下载按钮 ,进行下载,插入SD卡,从串口助手可以看到输出正常

    MounRiver Stuido IDE-RISC-V MCU开发实战 (二):SD初应用risc-v单片机中文社区(11)







    上一篇:RISC-V MCU开发实战(一) :DHT11
    下一篇:RISC-V MCU开发实战(三):移植鸿蒙OS项目
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

      离线 

  • TA的每日心情

    2022-6-26 13:17
  • 签到天数: 4 天

    [LV.2]

    发表于 2021-10-27 22:22:17 | 显示全部楼层
    为你点赞,良心的工程师!SD卡应用我一直想做个MP3,这下终于能实现我这个电子老顽童的梦想了。

    点评

    哈哈,分享就是为了共同进步!  详情 回复 发表于 2021-10-28 13:55
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情
    拍拍
    2021-10-29 10:26
  • 签到天数: 1 天

    [LV.1]

     楼主| 发表于 2021-10-28 13:55:02 | 显示全部楼层
    51MCU 发表于 2021-10-27 22:22
    为你点赞,良心的工程师!SD卡应用我一直想做个MP3,这下终于能实现我这个电子老顽童的梦想了。 ...

    哈哈,分享就是为了共同进步!
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情
    奋斗
    2022-6-21 08:23
  • 签到天数: 2 天

    [LV.1]

    发表于 2022-1-24 22:38:08 | 显示全部楼层
    支持,支持   MounRiver Stuido IDE-RISC-V MCU开发实战 (二):SD初应用risc-v单片机中文社区(12)
    全球首家只专注于RISC-V单片机行业应用的中文网站
    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条


    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-4-19 15:23 , Processed in 1.025160 second(s), 60 queries .

    快速回复 返回顶部 返回列表