linux tf 卡驱动理解

mmc 驱动框架

在这里插入图片描述

梳理tf卡读取异常重启逻辑问题进展:

a. 查找代码发现,在mmc_blk_issue_rw_rq函数中可以找到数据读取数据异常时的处理机制,其中部分代码如下:
    static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
    {
            ...
            mmc_start_req(card->host, areq, (int *) &status);//读取数据
            switch (status) {
                	case MMC_BLK_DATA_ERR://读取数据错误
                    case MMC_BLK_CMD_ERR://执行命令错误

                        case MMC_BLK_ABORT:// 异常退出

	                mmc_blk_reset(); //执行复位函数

            }
            ...
      }
    执行复位函数的逻辑,其中部分代码
    mmc_blk_reset
        |--->mmc_hw_reset
             |--->host->bus_ops->reset
                 |--->mmc_reset  //复位函数
                       |--->mmc_flush_cache(host->card);  //清除cache                  
                       |--->mmc_power_cycle(host, card->ocr); //执行io断电复位操作
                            |--->mmc_set_ios 
                                |---> host->ops->set_ios
                                     |--->_SetPower
                                         |--->Hal_CARD_PowerOn/Hal_CARD_PowerOff
                    |--->mmc_init_card(host, card->ocr, card);//重新初始化tf卡


      复位函数主要体现在mmc_reset  函数中。在文件sstar/sdmmc/ms_sdmmc_lnx.c 中st_mmc_ops,并未实现hw_reset函数,因此mmc_reset,主要内容为:
      1、执行mmc_flush_cache,清除cache
     2、mmc_power_cycle, 执行io断电复位操作,具体逻辑如下
            void mmc_power_cycle(struct mmc_host *host, u32 ocr)                                                                                                              
            {
                mmc_power_off(host);
                /* Wait at least 1 ms according to SD spec */
                mmc_delay(1);
                mmc_power_up(host, ocr);
        }
    3、执行mmc_init_card,重新初始化tf卡

b. 目前分析代码,初步得出结果为:
        1、tf卡io复位调用的时机:
            操作tf卡读取数据或执行命令时,最终会调用函数mmc_blk_issue_rw_rq,返回值为MMC_BLK_DATA_ERR, MMC_BLK_CMD_ERR, MMC_BLK_ABORT,都会触发复位动作。
        2、tf卡io复位主要做了些操作:
             清除cache;执行io断电复位;重新初始化tf卡

参考文章:

https://blog.csdn.net/u013836909/category_11430485.html
https://www.cnblogs.com/yanghong-hnu/p/4671343.html
https://blog.csdn.net/u013836909/article/details/12282330
https://blog.csdn.net/h_8410435/article/details/105427499

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值