0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

遵循SD Host controller Specification协议的MMC设备驱动开发讨论

冬至子 来源:嵌入式系统研发 作者:ESDev 2023-06-09 14:43 次阅读

1.概述

本文主要讲述了U-boot的MMC DM框架驱动的移植方法。DM是Driver Model的简称,是U-boot的基本驱动框架。常见的MMC设备包括SD卡、eMMC存储器等。本文讨论遵循SD Host controller Specification协议的MMC设备驱动开发。

示例U-boot版本:2022.10。硬件平台:ARM SOC。

2.原理

在U-boot中,对遵循SD Host controller Specification 协议的MMC设备有着完备的底层驱动支持。因此,移植某个特定MMC外设驱动,具体工作为调用U-boot自有的MMC底层标准驱动,实现对MMC外设的访问和操作。

MMC驱动的工作原理 :首先对设备树文件xx.dts进行解析,按照先bind后probe的顺序加载MMC驱动,分别通过相应的bind函数和probe函数完成。

U-boot启动后,在读取MMC设备节点的compatible字段后,找到与之匹配的U_BOOT_DRIVER,然后执行bind函数对驱动进行绑定,最后通过probe函数对驱动进行激活,解析设备树的节点属性,对驱动进行配置,从而使驱动具备工作条件,供上层应用程序调用。

U-boot的命令子系统包含了众多测试命令子集,其中mmc命令集可用来对MMC驱动进行功能测试,对MMC设备进行信息查询和访问操作。

3.移植方法

3.1 主要工作

U-boot移植MMC DM框架驱动的主要工作包括:

(1)向./drivers/mmc/添加驱动文件源码xx_sdhci .c(名称xx由驱动开发者定义,下同);

(2)在./drivers/mmc/Makefile添加xx_sdhci .c的编译条目;

(3)在./drivers/mmc/Kconfig添加xx_sdhci .c的编译配置选项;

(4)向./arch/arm/dts/xx.dts中添加MMC设备节点。

3.2 驱动源码设计

在U-boot的MMC驱动中,有众多设备遵循了SD Host controller Specification 协议,选取其中的Atmel SDHCI控制器驱动,讲解驱动代码的原理和设计方法,代码路径: ./drivers/mmc/atmel_sdhci.c。自编的驱动文件源码xx_sdhci .c可参考atmel_sdhci.c进行设计。

** MMC驱动包括2个核心函数,即atmel_sdhci_bind和atmel_sdhci_probe函数** 。

atmel_sdhci_bind函数用于驱动的绑定。调用了sdhci_bind函数,位于./drivers/mmc/sdhci.c;而MMC作为一种块设备,sdhci_bind函数进一步调用了mmc_bind函数,位于./drivers/mmc/mmc-uclass.c。

atmel_sdhci_probe函数用于驱动的激活。atmel_sdhci_probe函数的主要流程为:首先对设备树进行参数解析,解析出MMC控制器的工作时钟频率、寄存器地址、数据宽度、最高工作频率等参数;然后通过sdhci_setup_cfg函数进行参数配置,sdhci_setup_cfg函数位于./drivers/mmc/sdhci.c;最后调用sdhci_probe函数完成probe操作。

3.3 MMC设备树节点

在设备树添加MMC设备节点,节点设计方法可以参考./doc/device-tree-bindings/mmc下的文档。

4.验证方法

4.1编译mmc测试工具

为编译mmc测试工具,应配置U-boot,使能CONFIG_CMD_MMC。

图片

4.2驱动加载结果查询

从本节开始,将介绍mmc测试命令的使用方法及执行结果示例。

dm tree命令列出了DM框架驱动的加载结果。

下面xx_sdhci和mmc_blk前的Probed标志为[+],表示驱动已经加载成功了。

cli>dm tree

Class Index Probed Driver Name

root 0 [ + ] root_driver root_driver

mmc 0 [ + ] xx_sdhci `-- mmc@xxxxxxxx

blk 0 [ + ] mmc_blk `-- mmc@xxxxxxxx.blk

4.3MMC设备信息查询

下面mmc info命令输出了SD卡的基本信息。

cli>mmc info

Manufacturer ID: 3

OEM: 5344

Name: SD32G

Bus Speed: 2000000

Mode: SD High Speed (50MHz)

Rd Block Len: 512

SD version 3.0

High Capacity: Yes

Capacity: 29.7 GiB

Bus Width: 4-bit

Erase Group Size: 512 Bytes

4.4写操作

DDR的0x80000000地址向SD卡的100# block位置连续写入2个block数据。

cli>mmc write 0x80000000 100 2

2 blocks written: OK

4.5读操作

从SD卡的100# block位置向DDR的0x90000000地址连续读入2个block数据。

cli>mmc read 0x90000000 100 2

2 blocks read: OK

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15235

    浏览量

    171206
  • 存储器
    +关注

    关注

    38

    文章

    7151

    浏览量

    162000
  • MMC
    MMC
    +关注

    关注

    0

    文章

    71

    浏览量

    30344
  • SD卡
    +关注

    关注

    2

    文章

    530

    浏览量

    63020
  • u-boot
    +关注

    关注

    0

    文章

    116

    浏览量

    38044
收藏 人收藏

    评论

    相关推荐

    sdmmc卡规范协议

    sdmmc卡规范协议MultiMediaCard Architecture-MultiMediaCard Architecture-MultiMediaCard
    发表于 07-22 15:07

    Linux下SD驱动移植

    、添加和开发板相关的 SD 卡插拔引发的中断: #vidrivers/mmc/host/s3cmci.c +1335 在1335行,添加如下内容:
    发表于 09-11 14:09

    【WRTnode2R试用体验】+SD卡的配置

    │ ││ │ < >MMC host test driver│ ││ │*** MMC/SD/SDIO Host
    发表于 11-03 23:36

    AES参考设计的SD / MMC卡上的USB高速设备海量存储

    采用AES参考设计的SD / MMC卡上的USB高速设备海量存储。该参考设计演示了基于AT32UC3A3的USB大容量存储设备,具有用于通信的高速USB和用于存储的
    发表于 07-21 13:15

    RT-Thread SDIO驱动框架分析之SD驱动

    层中,实现SD卡、SDIO卡、MMC卡的通用外设驱动逻辑,如卡的识别、卡的模块切换、卡的读写操作等,这些都是通用的,遵循SD标准
    发表于 03-13 16:01

    rt-thread SDIO驱动框架分析(SD卡flash驱动\SD Nand flash驱动

    设备驱动框架层的具体接口对于SDIO外设亦是如此:在设备驱动框架层中,实现SD卡、SDIO卡、MMC
    发表于 04-04 16:26

    1394 Open Host Controller Inte

    1394Open Host Controller InterfaceSpecification The following documents may be useful
    发表于 06-26 10:11 40次下载

    sd标准/MMC卡标准

    2 FILE SYSTEM SPECIFICATION SD Memory Card Specifications Part 3 SECURITY SPECIFICATION MMC
    发表于 07-22 15:03 19次下载

    sd卡-mmc卡-CPU说明资料

    sd卡-mmc卡-CPU说明资料:sd卡-mmc卡-CPU说明资料SD Memory Card (Secure Digital Memory
    发表于 08-22 17:55 25次下载

    基于S3C2410的SD MMC驱动的实现

    设计了一个基于S3C2410 片内SDI 的SD/MMC驱动,该驱动支持MMC 卡、SD卡、
    发表于 01-06 15:41 53次下载

    mmc卡和sd卡的区别是什么

    mmc卡和sd卡已经是目前运用广泛的两种的内存卡。本文以mmc卡和sd卡为中心,主要介绍了它门两者的结构应用,mmc卡和
    发表于 12-16 09:06 4.6w次阅读

    基于S3C2410控制器实现SD/MMC驱动的设计

    MMC卡是基于NAND快闪记忆技术开发的存储卡:SD卡是在MMC卡的基础上开发研制的一款具有大容量、高性能、安全性好等特点的多功能存储卡.存
    发表于 08-19 14:21 1542次阅读
    基于S3C2410控制器实现<b class='flag-5'>SD</b>/<b class='flag-5'>MMC</b>卡<b class='flag-5'>驱动</b>的设计

    Linux MMC开发指南

    介绍 Linux 内核中 SD/MMC 子系统的接口及使用方法,为 SD/MMC 设备驱动
    的头像 发表于 03-06 10:21 2512次阅读
    Linux <b class='flag-5'>MMC</b><b class='flag-5'>开发</b>指南

    U-boot的MMC DM框架驱动的移植方法

    本文主要讲述了U-boot的MMC DM框架驱动的移植方法。DM是Driver Model的简称,是U-boot的基本驱动框架。常见的MMC设备
    的头像 发表于 04-14 10:22 1791次阅读
    U-boot的<b class='flag-5'>MMC</b> DM框架<b class='flag-5'>驱动</b>的移植方法

    SATA3.0 Host Controller IP介绍

    SATA3.0 Host IP不仅实现了SATA协议的PHY(物理层)、link(链路层)和TRN(传输层),并且实现了CMD(命令层)和APP(应用层),支持1.5、3和6Gbps传输速率
    发表于 02-27 15:53 0次下载