首先,先修复上一个篇文章遗留下来的问题,即uboot起来后显示内容容量只有512M的问题,后来查看了4412的芯片手册,发现是有寄存器没有设置正确,所以才导致内存容量识别有问题,按照下面的修改,我们的uboot就能识别到1G的内存容量了!

diff --git a/arch/arm/mach-exynos/exynos4_setup.h b/arch/arm/mach-exynos/exynos4_setup.h
index 9e252ad..b3477e7 100644
--- a/arch/arm/mach-exynos/exynos4_setup.h
+++ b/arch/arm/mach-exynos/exynos4_setup.h
@@ -385,7 +385,7 @@ struct mem_timings {#define ADD_LAT_PALL           (1 << 6)#define MEM_TYPE_DDR3          (0x6 << 8)#define MEM_WIDTH_32           (0x2 << 12)
-#define NUM_CHIP_2             (1 << 16)
+#define NUM_CHIP_2             (0 << 16)#define BL_8                   (0x3 << 20)#define MEMCONTROL_VAL         (CLK_STOP_DISABLE | DPWRDN_DISABLE\| DPWRDN_TYPE | TP_DISABLE | DSREF_DIABLE\
@@ -394,16 +394,16 @@ struct mem_timings { #define CHIP_BANK_8            (0x3 << 0)
-#define CHIP_ROW_14            (0x2 << 4)
+#define CHIP_ROW_14            (0x3 << 4)#define CHIP_COL_10            (0x3 << 8)#define CHIP_MAP_INTERLEAVED   (1 << 12)
-#define CHIP_MASK              (0xe0 << 16)
+#define CHIP_MASK              (0xC0 << 16)#ifdef CONFIG_MIU_LINEAR#define CHIP0_BASE             (0x40 << 24)#define CHIP1_BASE             (0x60 << 24)#else
-#define CHIP0_BASE             (0x20 << 24)
-#define CHIP1_BASE             (0x40 << 24)
+#define CHIP0_BASE             (0x40 << 24)
+#define CHIP1_BASE             (0x80 << 24)#endif#define MEMCONFIG0_VAL         (CHIP_BANK_8 | CHIP_ROW_14 | CHIP_COL_10\| CHIP_MAP_INTERLEAVED | CHIP_MASK | CHIP0_BASE)

上面就是简单的将寄存器的值修改一下,设置开发板的最大内存寻址范围。这样就OK了。重新编译烧写启动后,输出如下:

U-Boot 2016.11-gbf241c8 (Mar 04 2017 - 06:46:50 +0800) for TINY4412CPU:   Exynos4412 @ 1.4 GHz
Model: Insignal Tiny4412 evaluation board based on Exynos4412
Board: Insignal Tiny4412 evaluation board based on Exynos4412
DRAM:  1 GiB
WARNING: Caches not enabled
MMC:   DWMMC56: Can't get the dev index
exynos_dwmci_process_node: failed to decode dev 0
SAMSUNG SDHCI: 0
sdhci_transfer_data: Error detected in status(0x208002)!
sdhci_transfer_data: Error detected in status(0x208002)!
sdhci_transfer_data: Error detected in status(0x208000)!
*** Warning - read failed, using default environmentHit any key to stop autoboot:  0
sdhci_transfer_data: Error detected in status(0x208002)!
sdhci_transfer_data: Error detected in status(0x208002)!
sdhci_transfer_data: Error detected in status(0x208000)!
SD/MMC found on device 0** ext4fs_devread read error - block
Failed to mount ext2 filesystem...
** Unrecognized filesystem type **** ext4fs_devread read error - block
Failed to mount ext2 filesystem...
** Unrecognized filesystem type **** ext4fs_devread read error - block
Failed to mount ext2 filesystem...
** Unrecognized filesystem type **
Wrong Image Format for bootm command
ERROR: can't get kernel image!

上面有两处需要修复的:
第一点是:
DWMMC56: Can’t get the dev index
exynos_dwmci_process_node: failed to decode dev 0

第二点是:
sdhci_transfer_data: Error detected in status(0x208002)!
sdhci_transfer_data: Error detected in status(0x208002)!
sdhci_transfer_data: Error detected in status(0x208000)!

首先解决第一点,看输出是因为没有给EMMC添加相应的节点,导致在解析的时候出问题了,查看Tiny4412的设备树文件,会发现确实没有给EMMC添加设备描述,我们添加下面的信息就可以解决找不到节点的问题了。

diff --git a/arch/arm/dts/exynos4210-tiny4412.dts b/arch/arm/dts/exynos4210-tiny4412.dts
index a4fe14f..77934e5 100644
--- a/arch/arm/dts/exynos4210-tiny4412.dts
+++ b/arch/arm/dts/exynos4210-tiny4412.dts
@@ -49,4 +49,14 @@sdhci@12540000 {status = "disabled";};
+
+       dwmmc@12550000 {+               samsung,bus-width = <8>;
+               samsung,timing = <2 1 0>;
+               samsung,removable = <0>;
+               fifoth_val = <0x203f0040>;
+               bus_hz = <400000000>;
+               div = <0x3>;
+               index = <4>;
+       };};

那么第二个问题才是最大的问题,我自己解决了很久,也科学上网去查找过相关的信息,但是都没有解决,所以,是的,我是来求助的,因为我真的是知识有限,没有办法解决啊,不过还是尝试过很多办法的,下面也和大家分享一下吧:
之前看到这样一个帖子:
http://u-boot.10912.n7.nabble.com/Bisected-quot-sdhci-transfer-data-Error-detected-in-status-0x208002-quot-problem-on-ODROID-X-td231188.html
就是显示解决这个问题的,我按照帖子中的说明进行了如下修改:

diff --git a/arch/arm/mach-exynos/clock.c b/arch/arm/mach-exynos/clock.c
index 3d31f9d..a8fc72a 100644
--- a/arch/arm/mach-exynos/clock.c
+++ b/arch/arm/mach-exynos/clock.c
@@ -1688,8 +1688,8 @@ unsigned long get_mmc_clk(int dev_index)void set_mmc_clk(int dev_index, unsigned int div){/* If want to set correct value, it needs to substract one from div.*/
-       if (div > 0)
-               div -= 1;
+//     if (div > 0)
+//             div -= 1;if (cpu_is_exynos5()) {if (proid_is_exynos5420() || proid_is_exynos5422())

然后上面显示的error都没有显示了,而且执行saveenv,显示done,执行mmc read/write显示的都是done,但是验证的时候发现都没有效果,我是通过执行mmc read 0x43E00000 0x800 0x100,意思是将mmc设备中第2048个block开始,读取256个block到内存0x43E00000,即u-boot执行的首地址处,然后在执行go 0x43E00000,如果mmc设备正常的话,通过上面的操作,0x43E00000位置的内容应该要被覆盖,那么go 0x43E00000操作后,开发板应该是宕机才对的,但是开发板是重新执行了uboot的初始化过程,因此看起来像是mmc设备还是没有初始化成功啊,起码mmc write/read都不能正常执行。

所以如果有哪位朋友也遇到过这种情况,还请和大家分享一下啊,谢谢!

u-boot内存容量显示修复及SD卡驱动问题相关推荐

  1. 扫盲:关于Android手机内存ROM、RAM还有SD卡的解释

    买Android手机,除了CPU外,接下来最重要的可能就是ROM.RAM.SD卡的大小了.那就赶紧来了解一下手机内存ROM.RAM还有SD卡的重要性吧,不然在买手机的时候可能会吃亏. 因为一些手机厂家 ...

  2. 相机sd卡受损怎么修复?sd卡数据恢复靠这招

    sd卡受损怎么修复?sd卡常被应用于数码相机.手机等便携式装置中,一般情况下很少会因为外力等情况导致sd卡损坏,受损多半是中毒或者格式化,那有什么方法可以修复受损的sd卡呢?下面就来了解下方法. 我们 ...

  3. sd 卡驱动--基于高通平台

    点击打开链接 内容来自以下博客: http://blog.csdn.net/qianjin0703/article/details/5918041 Linux设备驱动子系统第二弹 - SD卡 (有介绍 ...

  4. NUC970 SD卡驱动(SDIO)

    在读取SD卡的R2长响应折腾了不少时间,原因是必须开启DMA,不开启DMA,R2响应将不会传输到SDIO的FIFO中,将SDIO接口与STM32保持一致,并兼容应用层SDIO_SDCARD驱动. 寄存 ...

  5. STM32F407 SPI SD卡驱动的验证

    试验原因 网上靠谱的STM32F4的SPI方式SD卡驱动不多. 包括ST官方板子,都不用SPI_SD的驱动方式,而是用SDIO. 如果没有官方资料加持,出问题时真头疼, 相当于一个人在玩. 自己板子上 ...

  6. Exynos4412 移植针对Samsung的Linux-6.1(二)SD卡驱动——解决无法挂载SD卡的根文件系统

    系列文章目录 Exynos4412 移植针对Samsung的Linux-6.1(一)下载.配置.编译Linux-6.1 Exynos4412 移植针对Samsung的Linux-6.1(二)SD卡驱动 ...

  7. 详解sd协议以及裸机和u-boot中的sd卡驱动(2)

    3. sd卡驱动 3.1 引入 经过第2章我们知道,要想实现读写sd卡,需要按照sd协议规定的基本传输单位(命令.响应.数据)以及流程(初始化.读.写),向sd卡发送信号或者从sd卡接收信号. 为了简 ...

  8. rt-thread SDIO驱动框架分析(SD卡驱动\SD Nand驱动)

    rt-thread SDIO驱动框架分析之SD卡驱动 文章目录 rt-thread SDIO驱动框架分析之SD卡驱动 1. 前言 2. SDIO通用驱动框架介绍 3. 文件架构分析 4. SDIO设备 ...

  9. SD卡驱动分析(二)

    三.下面分析一下高通的android2.3的代码中SD卡驱动的流程. 在kernel中,SD卡是作为平台设备加入到内核中去的,在/kernel/arch/arm/mach-msm/devices-ms ...

最新文章

  1. jar中的类文件更新遇到的问题:请分析下原因呢
  2. python 数组参数_在Python中获取数组作为GET查询参数
  3. 吴恩达深度学习课程deeplearning.ai课程作业:Class 4 Week 2 Keras - Tutorial - Happy House
  4. STL常用的查找算法
  5. Eclipse使用Team explorer everywhere进行代码管理
  6. 可恶,谁占用了我的80端口?
  7. ShardingSphere(四) 垂直分库配置搭建,实现写入读取
  8. win7 更新android sdk,大神为你详解win7系统android sdk manager无法更新的处理对策
  9. windows系统文件和dll文件
  10. ABAP调用HTTP服务
  11. 路由器和带宽猫、AP、AC、交换机
  12. 美食节、灯光节等线下展销会活动公众号文章推广链接如何做到不被微信屏蔽拦截?
  13. 推荐几个高效文章搜索网站
  14. HDU 1317 一路wa到西天
  15. KVM管理虚拟机:常用命令
  16. 【计算机架构】计算 CPU 动态功耗 | 集成电路成本 | SPEC 基准测试 | Amdahl 定律 | MIPS 性能指标
  17. mapUnderscoreToCamelCase作用- 开启驼峰
  18. spring常用注解剖析
  19. Adaptive Server Anywhere 数据库配置ODBC数据源
  20. 怎么主动发起话题_如何女生发起聊天话题?

热门文章

  1. 标签条码打印软件如何设置打印区域
  2. Java-读取本地txt文件的问题
  3. CSS入门篇08.垂直布局与盒子大小
  4. 金融机构数据库自主可控之路——路远,需尽早(SinoDB)
  5. 远程连接不上阿里云(Ubuntu20.04)Mysql8.0
  6. Jetson Nano串口通信----Nano与PC通信
  7. 四大组件之Service(三)-Service的跨进程调用
  8. 洗车预约小程序开发方案,如何利用小程序提升到店交易
  9. 会声会影最新网盘资源搜索下载如何使用转场功能制作宠物电子相册
  10. PMP试题 | 每日一练,快速提分 8.2