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

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

3天内不再提示

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

CHANBAEK 来源:嵌入式系统研发 作者:ESDev 2023-04-14 10:22 次阅读

1.概述

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

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

2.原理

在U-boot中,对遵循SD Hostcontroller 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 Hostcontroller 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。

poYBAGQ4uOiAf8U2AAERWtIXtG4811.png

4.2驱动加载结果查询

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设备信息查询

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写操作

cli>mmc write 0x80000000 100 2

2 blocks written: OK

4.5读操作

cli>mmc read 0x90000000 100 2

2 blocks read: OK

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

    关注

    134

    文章

    9027

    浏览量

    366442
  • soc
    soc
    +关注

    关注

    38

    文章

    4092

    浏览量

    217748
  • MMC
    MMC
    +关注

    关注

    0

    文章

    76

    浏览量

    30442
  • 移植
    +关注

    关注

    1

    文章

    376

    浏览量

    28093
  • u-boot
    +关注

    关注

    0

    文章

    120

    浏览量

    38180
收藏 人收藏

    评论

    相关推荐

    U-boot的基本介绍

    从本文开始,将陆续推送“手把手教你移植U-boot”系列文章,目标是由浅入深地讲解U-boot的工作流程、原理、配置方法移植
    发表于 07-14 16:52 2715次阅读
    <b class='flag-5'>U-boot</b>的基本介绍

    U-Boot移植DM9000网卡分享!

    U-Boot移植DM9000网卡——西伯利亚的风 根据书《嵌入式Linux应用开发完全手册》移植网卡驱动,对于Jz2440开发板好像并不适用
    发表于 07-29 00:06

    嵌入式系统中U-Boot 基本特点及其移植方法

    在介绍U-Boot 基本特点的基础上,结合U-Boot 移植经历,以MPC8xx 和嵌入式Linux 为背景,分析、探讨U-Boot移植
    发表于 04-15 09:25 17次下载

    嵌入式系统中U-Boot 基本特点及其移植方法

    在介绍U-Boot 基本特点的基础上,结合U-Boot 移植经历,以MPC8xx 和嵌入式Linux 为背景,分析、探讨U-Boot移植
    发表于 05-16 14:52 12次下载

    嵌入式U-BOOT的启动流程及移植

    S3C44B0开发板上的移植方法和步骤。 u-boot是一个功能强大的bootloader开发软件,适用的CPU平台及
    发表于 02-25 16:00 59次下载

    Mini2440之U-boot使用及移植详细手册

    Mini2440之U-boot使用及移植详细手册
    发表于 10-30 08:31 44次下载
    Mini2440之<b class='flag-5'>U-boot</b>使用及<b class='flag-5'>移植</b>详细手册

    S3C6410的u-boot分析与移植

    S3C6410的u-boot分析与移植
    发表于 10-31 14:44 28次下载
    S3C6410的<b class='flag-5'>u-boot</b>分析与<b class='flag-5'>移植</b>

    基于nanoPC-T3的U-Boot移植过程梳理

      导读:前文对U-Boot架构设计做了分析,本文来梳理一下U-Boot在具体板子上的移植工作,主要记录整体思路、要点,以触类旁通而记之。
    的头像 发表于 12-14 23:14 820次阅读

    Linux U-Boot开发指南

    介绍 U-Boot 的编译打包、基本配置、常用命令的使用、基本调试方法等, 为 U-BOOT移植及应用开发提供了基础。
    的头像 发表于 03-06 10:28 1246次阅读
    Linux <b class='flag-5'>U-Boot</b>开发指南

    U-boot的QSPI驱动移植方法及验证方法

    本文主要讲述了U-boot的QSPI驱动移植方法及验证方法。在产品调试阶段,U-boot的dri
    的头像 发表于 04-14 10:21 2815次阅读
    <b class='flag-5'>U-boot</b>的QSPI<b class='flag-5'>驱动</b><b class='flag-5'>移植</b><b class='flag-5'>方法</b>及验证<b class='flag-5'>方法</b>

    U-boot的DPU驱动移植方法

    本文以ARM Mali系列显示处理器驱动为例,讲述了U-boot的DPU驱动移植方法
    的头像 发表于 04-14 10:25 1301次阅读
    <b class='flag-5'>U-boot</b>的DPU<b class='flag-5'>驱动</b><b class='flag-5'>移植</b><b class='flag-5'>方法</b>

    U-boot的SPLASH_SCREEN(启动画面)驱动移植方法

     在上一篇《U-boot驱动-DPU驱动移植》中,以ARM Mali系列显示处理器驱动为例,讲述了U-b
    的头像 发表于 04-14 10:28 1358次阅读
    <b class='flag-5'>U-boot</b>的SPLASH_SCREEN(启动画面)<b class='flag-5'>驱动</b><b class='flag-5'>移植</b><b class='flag-5'>方法</b>

    U-boot的DPU驱动移植方法

    U-boot的VIDEO驱动子系统集成了ARM Mali系列显示处理器的驱动,支持Mali-DP500、Mali-DP550和Mali-DP650显示处理器,驱动源码位于目录./dri
    的头像 发表于 06-09 14:35 1047次阅读
    <b class='flag-5'>U-boot</b>的DPU<b class='flag-5'>驱动</b><b class='flag-5'>移植</b><b class='flag-5'>方法</b>

    U-boot驱动SPLASH_SCREEN驱动移植方法

    U-boot集成了SPLASH_SCREEN驱动源码,当使能和配置SPLASH_SCREEN驱动后,可以将启动画面使用的图片文件转换为位图数据数组
    的头像 发表于 06-09 14:39 1188次阅读
    <b class='flag-5'>U-boot</b><b class='flag-5'>驱动</b>SPLASH_SCREEN<b class='flag-5'>驱动</b><b class='flag-5'>移植</b><b class='flag-5'>方法</b>

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

    本文主要讲述了U-bootMMC DM框架驱动移植方法
    的头像 发表于 06-09 14:43 1361次阅读
    遵循SD Host controller Specification协议的<b class='flag-5'>MMC</b>设备<b class='flag-5'>驱动</b>开发讨论