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位,則顯示出問
SD卡CF卡U盤硬碟等磁碟屬性顯示為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 不