1. 程式人生 > >u-boot記憶體容量顯示修復及SD卡驅動問題

u-boot記憶體容量顯示修復及SD卡驅動問題

 首先,先修復上一個篇文章遺留下來的問題,即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 TINY4412

CPU:   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 environment

Hit 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 @@
        [email protected] {
                status = "disabled";
        };
+
+       [email protected] {
+               samsung,bus-width = <8>;
+               samsung,timing = <2 1 0>;
+               samsung,removable = <0>;
+               fifoth_val = <0x203f0040>;
+               bus_hz = <400000000>;
+               div = <0x3>;
+               index = <4>;
+       };
 };
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驅動問題

 首先,先修復上一個篇文章遺留下來的問題,即uboot起來後顯示內容容量只有512M的問題,後來查看了4412的晶片手冊,發現是有暫存器沒有設定正確,所以才導致記憶體容量識別有問題,按照下面的修改,我們的uboot就能識別到1G的記憶體容量了! diff --

友堅U-boot-1.1.6學習移植dm9000a驅動

1.  u-boot的原始碼頂層目錄說明 目    錄                特    性                解 釋 說 明 board                平臺依賴              /board/samsung/smdk6410 cpu                

uboot 的記憶體命令使用: mw (修改) md (顯示),u-boot 記憶體 memory

修改: mw [記憶體地址] [值] [長度] 例如: mw 0x02000000 0 128 表示修改地址為0x02000000~0x02000000+128的記憶體值為0. //---------------------------------------------

u-boot-2009 tftp下載核心nfs系統

核心版本:3.0.35: setenv ipaddr 200.200.4.234 setenv serverip 200.200.4.233 setenv bootcmd_tftp tftpboot 0x10800000 uImage-myimx6a9 setenv bootargs

自己寫bootloader筆記6---boot.c分析(u-boot向核心傳遞引數跳轉到核心)

#include "setup.h"extern void uart0_init(void); extern void nand_read(unsigned int addr, unsigned char *buf, unsigned int len); extern void puts(char *str)

android檔案快取SD建立資料夾失敗解決和bitmap記憶體溢位解決

 1.相關程式碼:    新增許可權: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:na

U-Boot中MAC地址設定往核心中傳遞

一、核心引數的傳遞 U-Boot向Linux驅動傳遞引數的方式有兩種,一為在系統啟動的時候由bootloader傳入,還有一種是將驅動編譯成模組,將引數作為模組載入的引數傳入。 核心通過setup介面接受Bootloader傳入的引數。方式如下: st

U-boot中新增Cubieboard(全志A10)乙太網驅動

當定義CONFIG_CMD_NET和CONFIG_CMD_PING,編譯之後執行ping命令,告警沒有找到乙太網。 因此,需要開啟U-boot的網路功能, u-boot-sunxi-sunxi中沒有找到明顯的網路驅動程式碼,或許有通用的驅動,但可以獲得資料的途徑有限,再說我

使用u-boot引導smart210提供的核心,在了“Starting kernel ...”

大家好,我問個問題,使用u-boot引導友善smart210提供的核心,卡在了“Starting kernel ...”。 我百度了很久都沒能解決。。。不知道大家有沒有處理過這個問題的經驗?謝謝! 直接go zImage也不行。 gcc:4.9.2 u-boot:2014.07 linux核心:3.0.8(c

使用FreeRTOS在SD驅動使用非系統延時導致上電重啟不工作的情況

new i開啟 ask 函數 fault 思想 初始化 font 是否 一、問題描述在一個使用FreeRTOS的工程中,只做了SD卡的驅動,由於RTOS使用了Systick,故非系統延時函數使用的是 DWT中的時鐘周期(CYCCNT)計數功能,但是在SD卡驅動中使用了這個非

stm32官方SD驅動的使用注意事項

使用stm32 CUBE 庫所提供的SD卡驅動的朋友們請注意: 1、適用於MMC卡,本人沒測試過,mmc卡現在已經是收藏品了,誰還會用呢,so,st的團隊求求你們嚴謹的好不好。 2、SD卡初始化過不去,因為丫在傳送CMD0後,接著傳送了CMD1(CMD1是mmc卡的獨有指令

tiny4412 裝置樹之SD驅動(三)

開發板:tiny4412(1611) 核心:linux4.4 編譯器:arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320) 在linux核心中,SD卡屬於MMC子系統,簡單的介紹: http://blog.

Linux SD驅動開發(六) —— SD啟動過程總體分析

一、工作流程 mmc驅動主要檔案包括 drivers/mmc/card/block.c drivers/mmc/card/queue.c drivers/mmc/core/core.c drivers/mmc/core/host.c drivers/mmc/core/ 核心

u-boot與Linux核心視訊顯示介面引數配置傳遞方案

http://blog.chinaunix.net/uid-20543672-id-3244213.html 分類: LINUX2012-06-15 11:48:54 一、一般視訊顯示介面初始化所需要的引數 眾所周知,顯示器顯示的是二維的,處理器將視訊資料通過顯示介面行、地傳送到顯示器,每行

修改u-boot的開機logo顯示過程

[ u-boot: git://git.denx.de/u-boot.git] [tag: v2011.09-rc1 ] 修改u-boot的開機logo其實很簡單。請見下面步驟。 1. 獲取一張BMP的圖片,修改之,讓其色深為8位,即256色,如果用24位,則顯示出問

SDCFU盤硬碟等磁碟屬性顯示為0位元組怎麼修復恢復照片視訊資料檔案

【故障現象】磁碟(如U盤,SD卡,行動硬碟等)打不開,右鍵檢視磁碟屬性,顯示為0位元組: 【原因分析】出現這種錯誤提示的原因可能有以下幾種:1.沒有安全彈出移動磁碟,2. 突然斷電,讀盤中斷。3.電腦病毒引起的,4.移動磁碟質量問題 【恢復方法】這種問題有2種損壞可能:一是磁

u-boot移植(十三)---代碼修改---裁剪環境變量 一

相關 addition 並且 width load command 啟動程序 type 入參 一、內核裁剪   內核的裁剪首先就是修改我們的配置文件,即 include/configs/jz2440.h 文件,裏面定義的很多宏,我們也許用不上的就要去掉。 1 /*

u-boot移植(十三)---代碼修改---支持文件系統補丁制作

ota ons set nan 文件的 help and ole com 一、燒寫文件系統 1.1 jffs2燒寫   1.下載文件系統:tftp 30000000 fs_mini_mdev.jffs2      2.擦除文件的塊:nand erase.part rootf

Android 推斷SD是否存在容量查詢

rect hit block 容量 java sdc dia edi code 首先先要加入權限 <uses-permission android :name ="android.permission.MOUNT_UNMOUNT_FILESYSTEM

U-Boot 不能識別FAT32 SD分區

div log 識別 pan 完成 *** fat32格式 spa 格式 /********************************************************************* * U-Boot 不