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.rhkb.cn/news/207345.html

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

相关文章

【机器视觉技术】:开创人工智能新时代

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; IT杂谈 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1; 前言&#x1f324;️ 机器视觉技术的实现☁️ 图像采集☁️ 图像处理☁️ 数据建模☁️应用展示…

Phpstudy v8.0/8.1添加 php-7.4.9

1、官网下载最新的php版本 打开Windows版的官网下载&#xff0c;地址&#xff1a;PHP For Windows: Binaries and sources Releases 页面上有不同的PHP版本&#xff0c;这里我们下载的是64位nts版的PHP7.4.9&#xff0c;php-7.4.9-nts-Win32-vc15-x64.zip。 2、解压下载的文…

segment-anything安装教程

文章目录 一. segment-anything安装教程 一. segment-anything安装教程 官网安装说明:https://github.com/facebookresearch/segment-anything anaconda下新建一个环境 conda create -n sam python3.8激活新建的环境 conda activate sam更换conda镜像源 conda config --add ch…

XUbuntu22.04之OBS30.0设置录制音频降噪(一百九十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Nacos作为配置中心的一些知识二

11292327 问&#xff1a;客户端发请求给Nacos服务端&#xff0c;服务端这边会进行哪些处理&#xff1f; 答&#xff1a;客户端发请求给Nacos 服务端 &#xff0c;服务端这边通过ConfigController类的309行的listener方法&#xff0c;进行处理 第一步 获取客户端请求的文件的…

中职组网络安全-web-PYsystem003.img-(环境+解析)

​ web安全渗透 1.通过URL访问http://靶机IP/1&#xff0c;对该页面进行渗透测试&#xff0c;将完成后返回的结果内容作为flag值提交&#xff1b; 访问该网页后发现F12被禁用&#xff0c;使用ctrlshifti查看 ctrlshifti 等效于 F12 flag{fc35fdc70d5fc69d269883a822c7a53e}…

SpringCloud核心组件

Eureka 注册中心&#xff0c;服务的注册与发现 Feign远程调用 Ribbon负载均衡&#xff0c;默认轮询 Hystrix 熔断 降级 Zuul微服务网关&#xff08;这个组件负责网络路由&#xff0c;可以做统一的降级、限流、认证授权、安全&#xff09; Eureka 微服务的功能主要有以下几…

有时出厂重置BIOS是解决电脑问题和保持其最佳性能的好办法,主要有两种方法

​BIOS是计算机开机时启动的第一个程序&#xff0c;它有助于执行一些基本的计算机操作&#xff0c;并管理计算机和安装在计算机上的操作系统之间的命令。与任何其他程序一样&#xff0c;如果在启动计算机时遇到问题或在计算机中添加了新硬件&#xff0c;则可能需要将BIOS重置为…

JMeter怎样测试WebSocket

一、安装WebSocket取样器 1、从JMeter插件管理器官网下载&#xff1a; https://jmeter-plugins.org/ 搜索websocket 1、jetty-http-9.1.2.v20140210.jar 2、jetty-io-9.1.2.v20140210.jar 3、jetty-util-9.1.2.v20140210.jar 4、websocket-api-9.1.1.v20140108.jar 5、w…

【Windows】内网穿透实现hMailServer远程发送邮件

目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpolar内网…

2023认证杯小美赛数学建模国际赛ABCD题思路及python代码分享

大家好呀&#xff0c;认证杯小美赛数学建模开始了&#xff0c;来说一下初步的选题建议吧&#xff1a; 首先定下主基调&#xff0c; 本次小美赛难度&#xff1a;D&#xff1c;A≈C&#xff1c;B。推荐选择D题。预计12.2中午更新D完整论文。预定论文请往后滑看完本文档链接。 A…

Day02嵌入式---按键控灯

一、简单介绍 按键控制灯开关是一种常见的嵌入式系统示例项目&#xff0c;它通常用于演示嵌入式系统的基本控制能力。该项目由一个或多个LED和一个按键组成。通过按下按键&#xff0c;可以控制LED的开关状态&#xff0c;从而实现灯的亮灭控制。 二、查看功能手册 2.1 查看硬件…

Windows核心编程 HOOK

目录 HOOK概述 HOOK API SetWindowsHookExA 函数(winuser.h) UnhookWindowsHookEx 函数(winuser.h) NextHookEx 函数(winuser.h) 局部钩子 全局钩子 为什么全局钩子需要用dll作为过程函数&#xff1f; HOOK概述 本质&#xff1a;Windows消系统的消息过滤器。 全局钩子…

血的教训--redis被入侵之漏洞利用复现--总览

血的教训–redis被入侵之漏洞利用复现–总览 相信大家对于自己的服务器被入侵&#xff0c;还是比较憎恨的&#xff0c;我的就被攻击了一次&#xff0c;总结经验&#xff0c;自己也是整理了这一个系列&#xff0c;从最基础到最后面的自己总结被攻破的步骤&#xff0c;非常清晰的…

操作系统 选择题 期末试题 考研真题 + 参考答案

1.&#xff08;考研真题&#xff0c;单项选择题&#xff09;单道批处理系统的主要缺点是&#xff08; &#xff09;。 A. CPU利用率不高 B.失去了交互性 C.不具备并行性 D.以上都不是 【参考答案】A 【解析】单道批处理系统的内存中只有一道程序&#xff0c;当该程序…

网络分层的分层原则

一、网络分层 网络分层是指将网络通信过程划分为不同的层次&#xff0c;每个层次负责不同的功能&#xff0c;从而实现网络通信的有效管理和协调。通常&#xff0c;网络分层可以分为七层&#xff0c;即OSI模型和四层&#xff0c;即TCP/IP模型。 OSI模型包括以下七层&#xff1…

SpringBoot 环境使用 Redis + AOP + 自定义注解实现接口幂等性

目录 一、前言二、主流实现方案介绍2.1、前端按钮做加载状态限制&#xff08;必备&#xff09;2.2、客户端使用唯一标识符2.3、服务端通过检测请求参数进行幂等校验&#xff08;本文使用&#xff09; 三、代码实现3.1、POM3.2、application.yml3.3、Redis配置类3.4、自定义注解…

中职组网络安全-Windows操作系统渗透测试 -20221219win(环境+解析)

B-4:Windows操作系统渗透测试 任务环境说明: 服务器场景:20221219win 服务器场景操作系统:Windows(版本不详)(封闭靶机) 1.通过本地PC中渗透测试平台Kali对服务器场景Server08进行系统服务及版本扫描渗透测试,并将该操作显示结果中1433端口对应的服务版本信息作为F…

处理视频的新工具:UniFab 2.0.0.4 Crack

UniFab这是一个用于处理视频的新工具&#xff0c;可以帮助您像专业人士一样获得结果&#xff0c;事实上&#xff0c;它可以确保在项目的任何设备上完美播放&#xff0c;所以&#xff0c;来认识一下 UniFab - 一款功能强大且方便的视频编辑器和转换器&#xff0c;但另一方面&…

VsCode 调试 MySQL 源码

1. 启动 MySQL 2. 查看 MySQL 进程号 [root ~]# ps -ef | grep mysqld root 21479 1 0 Nov01 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir/usr/local/mysql/data --pid-file/usr/local/mysql/data/mysqld.pid root 26622 21479 0 …