HI3559AV100下对emmc总线速率的调整

先前使用3559开发板时,一直没觉得emmc会是个问题,但是最近一个国产化的项目中3559配合的是一款国产128G的emmc,因为板上面积限制,走线有点限制,导致uboot启动emmc有时候会失败。

1、报错的打印如下:

MMC read: dev # 0, block # 2048, count 18432 ... sdhci_transfer_data: Error detected in status(0x208000)!
=========== REGISTER DUMP (mmc0)===========
Sys addr: 0x00002544 | Version:  0x00000005
Blk size: 0x00007200 | Blk cnt:  0x00000000
Argument: 0x00000800 | Trn mode: 0x00000033
Present:  0x03f702f2 | Host ctl: 0x0000003c
Power:    0x0000000f | Blk gap:  0x00000000
Wake-up:  0x00000000 | Clock:    0x0000000f
Timeout:  0x0000000e | Int stat: 0x00208000
Int enab: 0x027f003b | Sig enab: 0x00000000
ACMD err: 0x00000000 | Slot int: 0x00000000
Caps:     0x3f6ec881 | Caps_1:   0x08000077
Cmd:      0x0000123a | Max curr: 0x00000000
Host ctl2: 0x00000087 | ADMA Err: 0x00000060
 ADMA Ptr: 0x00000000_5fe6d588
===========================================
0 blocks read: ERROR
Load fip from 0x0000000042000000 ...
Firmware Image Package ToC:
---------------------------
- EL3 Runtime Firmware BL3-1: offset=0x88, size=0x7090
- Non-Trusted Firmware BL3-3: offset=0x7118, size=0x84E32A
---------------------------
Create Entry Point info ...
Get - EL3 Runtime Firmware BL3-1 
Get - Non-Trusted Firmware BL3-3 
kernel_size[0x84e32a] fdt_size[0x82ea] fdt_addr[0x00000000448c6000]
Invalid FDT at 0x0000000046000000, hdr at 0x000000004407ffc0

2、查看emmc的信息如下:

hisilicon # mmc info
Device: hisi-sdhci
Manufacturer ID: 88
OEM: 103
Name: 88A19 
Tran Speed: 200000000
Rd Block Len: 512
MMC version 5.1
High Capacity: Yes
Capacity: 123731968000
Bus Width: 8-bit DDR
Erase Group Size: 512 KiB
HC WP Group Size: 8 MiB
User Capacity: 115.2 GiB WRREL
Boot Capacity: 4 MiB ENH
RPMB Capacity: 4 MiB ENH
hisilicon # 

3、开发板上的emmc信息如下:

hisilicon # mmc info
Device: hisi-sdhci
Manufacturer ID: 11
OEM: 100
Name: 008G3 
Tran Speed: 200000000
Rd Block Len: 512
MMC version 5.1
High Capacity: Yes
Capacity: 7818182656
Bus Width: 8-bit DDR
Erase Group Size: 512 KiB
HC WP Group Size: 4 MiB
User Capacity: 7.3 GiB WRREL
Boot Capacity: 4 MiB ENH
RPMB Capacity: 4 MiB ENH

4、解决办法

查看emmc的信息看不出什么问题,因此我的第一反应就是去降低emmc的总线速率。因为先前在玩zynq和emmc是遇到过问题,降低emmc的时钟科技解决。zynq下江都速率最简单的办法就是在最小系统勾选时把emmc的时钟降低,编译就可以了。但是在海思的sdk中,我们有找到相应的配置方法,所以就只能去修改源码了!!!

5、uboot修改

分析代码的调用关系后,发现在uboot中drivers/mmc/mmc.c中函数static int mmc_startup(struct mmc *mmc)中屏蔽对hs400和hs200的代码,参考如下,则不会进入高速模式。
    mmc_set_clock(mmc, mmc->tran_speed);
#if 0
    if (mmc->card_caps & MMC_MODE_HS400ES) {
        err = mmc_select_hs400es(mmc);
        if (err)
            return err;
        mmc->ddr_mode = 1;
    } else if (mmc->card_caps & MMC_MODE_HS200) {
        err = mmc_select_hs200(mmc);
        if (err)
            return err;
    }
    #endif

6、设备树修改

设备树也要修改,linux-4.9.y_multi-core/arch/arm64/boot/dts/hisilicon/hi3559av100.dtsi中,屏蔽hs400的描述,参考如下:

        mmc0: eMMC@0x100f0000 {
            compatible = "hisi-sdhci";
            reg = <0x100f0000 0x1000>, <0x10290000 0x1000>;
            interrupts = <0 26 4>;
            clocks = <&clock HI3559AV100_MMC0_CLK>;
            clock-names = "mmc_clk";
            resets = <&clock 0x1a8 27>, <&clock 0x1a8 29>,  <&clock 0x1a8 30>;
            reset-names = "crg_reset", "dll_reset", "sampl_reset";
            max-frequency = <198000000>;
            crg_regmap = <&clock>;
            non-removable;
            bus-width = <8>;
            cap-mmc-highspeed;
    /*
            mmc-hs400-1_8v;
            mmc-hs400-enhanced-strobe;
    */
            cap-mmc-hw-reset;
            devid = <0>;
            status = "disabled";
        };

7、测试确认

修改往后确实测试没有问题。

同时也测试了调速前后对emmc的访问速度,对比如下:

写测试命令:dd if=/dev/zero of=/mnt/1.dat bs=1M count=1k
读测试命令:dd of=/dev/null if=/mnt/1.dat bs=1M count=1k

未降速时,写速度在160MB左右,读速度在210MB左右;

降速后,写速度在45MB左右,读速度在40MB左右。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/168701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Superset数据分析平台如何实现公网实时远程访问数据【内网穿透】

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

从零开始学优惠券样式代码编写,让你的网站焕然一新!

样式1&#xff1a; 代码实例&#xff1a; <div class"box"><div class"itemBox"><div class"leftBox">全额抵扣</div><div class"rightBotton"><button>立即使用</button></div><…

[BJDCTF 2020]easy_md5

md5(string,raw) 所以首先我们要找到一个字符串&#xff0c;这个字符串经过md5得到的16位原始二进制的字符串能帮我们实现sql注入。 我们的目标就是要找一个字符串取32位16进制的md5值里带有276f7227这个字段的&#xff0c;接着就是要看关键的数字部分了&#xff0c;在276f72…

Error running Tomcat8: Address localhost:1099 is already in use 错误解决

摘要: 有时候运行web项目的时候会遇到 Error running Tomcat8: Address localhost:1099 is already in use 的错误&#xff0c;导致web项目无法运行。这篇 blog 介绍了解决办法。 有时候运行web项目的时候会遇到 Error running Tomcat8: Address localhost:1099 is already in …

【广州华锐互动】Web3D云展编辑器能为展览行业带来哪些便利?

在数字时代中&#xff0c;传统的展览方式正在被全新的技术和工具所颠覆。其中&#xff0c;最具有革新意义的就是Web3D云展编辑器。这种编辑器以其强大的功能和灵活的应用&#xff0c;正在为展览设计带来革命性的变化。 广州华锐互动开发的Web3D云展编辑器是一种专门用于创建、编…

Altium Designer学习笔记13

0603电容封装的画法&#xff1a; 再画下三极管SOT-23的三极管的封装图&#xff1a; 画出三极管的封装图&#xff1a; 在画图的过程中&#xff0c;遇到了一个问题&#xff0c;画闭环线路的时候&#xff0c;就会被自动删除&#xff0c;查出是这个地方的配置需要进行修改。 那这个…

电源控制系统架构(PCSA)之电源状态层级

目录 5.2 电源状态层级 5.2.1 Core电源状态 5.2.2 Cluster的电源状态 5.2.3 设备电源状态 5.2.4 SOC电源状态 5.2 电源状态层级 电源状态可以组织为电源状态表的层次结构。每个电源状态表描述在其层次结构级别上可用的电源状态。 从系统级电源控制的角度来看&#xff0c…

Python与设计模式--抽象工厂模式

Python与设计模式–抽象工厂模式 一、快餐点餐系统 想必大家一定见过类似于麦当劳自助点餐台一类的点餐系统吧。在一个大的触摸显示屏上&#xff0c;有三类可以选择的上餐品&#xff1a;汉堡等主餐、小食、饮料。当我们选择好自己需要的食物&#xff0c;支付完成后&#xff0…

吴恩达《机器学习》10-1-10-3:决定下一步做什么、评估一个假设、模型选择和交叉验证集

一、决定下一步做什么 在机器学习的学习过程中&#xff0c;我们已经接触了许多不同的学习算法&#xff0c;逐渐深入了解了先进的机器学习技术。然而&#xff0c;即使在了解了这些算法的情况下&#xff0c;仍然存在一些差距&#xff0c;有些人能够高效而有力地运用这些算法&…

RevCol实战:使用RevCol实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 可逆柱状结构&#xff08;RevCol&#xff09;是一种网络结构&#xff0c;它受到GLOM&#xff08;Global Columnar Memory&#xff09;的启发。RevCol由N个子网络&#xff08;或称为…

[SWPUCTF 2021 新生赛]no_wakeup

直接赋值即可 $a ->admin admin; $a ->passwd wllm; 发现没有绕过&#xff0c;改成大于2的绕过__wakeup 这是因为PHP在反序列化时会检查序列化字符串的长度&#xff0c;如果长度小于等于2&#xff0c;则不会调用__wakeup()方法。

Windows环境搭建

Windows环境搭建 一. jdk1.8安装1. 资源链接2. 安装3. 配置环境变量 一. jdk1.8安装 1. 资源链接 资源链接 提取码&#xff1a;tfms 2. 安装 1.双击下载好的JDK,点击下一步。 2.修改默认目录&#xff08;可不修改&#xff09;&#xff0c;点击下一步&#xff0c; 3. 点击下…

EEG 脑电信号处理合集(2): 信号预处理

脑电信号在采集完以后&#xff0c;需要进行一系列的预处理操作&#xff0c;然后才能用于后续的科学研究和计算。预处理是脑电信号分析最基本且重要的一步。基于python环境MNE库。 1 使用带通滤波器&#xff0c;信号滤波&#xff0c;去噪&#xff0c;去工频干扰 data_path sam…

【SpringBoot篇】阿里云OSS—存储文件的利器

文章目录 &#x1f339;什么是阿里云OSS⭐阿里云OSS的优点 &#x1f3f3;️‍&#x1f308;为什么要使用云服务OSS&#x1f384;使用步骤⭐OSS开通⭐参考官方SDK &#x1f354;编写代码⭐上传文件 &#x1f339;综合案例 &#x1f339;什么是阿里云OSS 阿里云对象存储&#xf…

Diffusion Model: DDPM

本文相关内容只记录看论文过程中一些难点问题&#xff0c;内容间逻辑性不强&#xff0c;甚至有点混乱&#xff0c;因此只作为本人“备忘”&#xff0c;不建议其他人阅读。 Denoising Diffusion Probabilistic Models: https://arxiv.org/abs/2006.11239 DDPM 一、基于 已知…

QFont如何设置斜体|QlineEdit设置只能输入数字|QThread::finished信号发出后worker未调用析构函数

QFont如何设置斜体 要设置 QFont 的斜体,你可以使用 setItalic() 方法。以下是一个示例代码: #include <QApplication> #include <QLabel> #include <QFont> int main(int argc, char *argv

可观测性建设实践之 - 日志分析的权衡取舍

指标、日志、链路是服务可观测性的三大支柱&#xff0c;在服务稳定性保障中&#xff0c;通常指标侧重于发现故障和问题&#xff0c;日志和链路分析侧重于定位和分析问题&#xff0c;其中日志实际上是串联这三大维度的一个良好桥梁。 但日志分析往往面临成本和效果之间的权衡问…

NET 8.0 中新的变化

1性能提升 .NET 8在整个堆栈中带来了数千项性能改进 。默认情况下会启用一种名为动态配置文件引导优化 (PGO) 的新代码生成器&#xff0c;它可以根据实际使用情况优化代码&#xff0c;并且可以将应用程序的性能提高高达 20%。现在支持的 AVX-512 指令集能够对 512 位数据向量执…

mysql union 和 union all区别?

在MySQL中&#xff0c;UNION和UNION ALL都是用于合并两个或多个SELECT语句的结果集。它们之间的主要区别在于如何处理重复记录。 UNION:UNION在合并结果集时会删除重复的记录。这意味着如果两个SELECT语句的输出结果中有相同的记录&#xff0c;那么UNION只会保留其中一个。在执…

您的计算机已被.locked1勒索病毒感染?恢复您的数据的方法在这里!

尊敬的读者&#xff1a; 勒索病毒如.locked1已经成为网络安全的一大威胁。这类病毒通过加密用户文件&#xff0c;并勒索赎金以解密这些文件&#xff0c;给用户和组织带来了巨大的损害。本文将深入介绍.locked1勒索病毒的特点、恶意目的&#xff0c;以及如何恢复被其加密的数据…