tiny4412sdk-1506原生uboot卡死


於16年2月多購買了tiny4412sdk-1506,用友善之臂(以下簡稱友善)的superboot是可以進入linux,而用三星原始的uboot_tiny4412-20130729則不可以。出現現象是卡在“OK”,偶爾能繼續跑下去。根據以往開發的經驗,可以知道這絕對是ddr3配置的問題,查看“Tiny4412-1306-Schematic”是4顆ddr3@16bit,用到一個控制器兩個片選(chip0,chip1),而“Tiny4412-1412-Schematic”(對應我購買的PCB)是2顆ddr3@16bit,只需要一個控制器一個片選(chip0)。

(1306版本最好是兩個控制器一個片選,能把ddr3帶寬提升到64bit,可能技術/成本原因沒實現)

 

以下是我做的補丁包,代碼如下:

diff -uNrp uboot_tiny4412/board/samsung/tiny4412/mem_init_tiny4412.S uboot_tiny4412_kevin/board/samsung/tiny4412/mem_init_tiny4412.S
--- uboot_tiny4412/board/samsung/tiny4412/mem_init_tiny4412.S   2016-04-11 12:32:03.511480729 +0800
+++ uboot_tiny4412_kevin/board/samsung/tiny4412/mem_init_tiny4412.S     2016-04-01 01:39:09.950628589 +0800
@@ -67,12 +67,12 @@ mem_ctrl_asm_init:
 
        ldr     r1, =0x0FFF301A
        str     r1, [r0, #DMC_CONCONTROL]
-       ldr     r1, =0x00312640
+       ldr     r1, =0x00302640          @這里只有一個chip0
        str     r1, [r0, #DMC_MEMCONTROL]
 
-       ldr     r1, =0x40e01323
+       ldr     r1, =0x40C01333          @Row是15bit,偏移地址是0x3FFFFFFF(1GB)
        str     r1, [r0, #DMC_MEMCONFIG0]
-       ldr     r1, =0x60e01323
+       ldr     r1, =0x80C01333          @可以不修改,這里只為了說明控制器0地址到達0x7FFFFFFF
        str     r1, [r0, #DMC_MEMCONFIG1]
 
 #ifdef CONFIG_IV_SIZE
@@ -97,11 +97,11 @@ mem_ctrl_asm_init:
        str     r1, [r0, #DMC_TIMINGPOWER]
 #endif
 #ifdef MCLK_400
-       ldr     r1, =0x4046654f
+       ldr     r1, =0x6946654f          @根據ddr3顆粒規格書微調參數
        str     r1, [r0, #DMC_TIMINGROW] @TimingRow
-       ldr     r1, =0x46400506
+       ldr     r1, =0x46460506          @根據ddr3顆粒規格書微調參數
        str     r1, [r0, #DMC_TIMINGDATA] @TimingData
-       ldr     r1, =0x52000a3c
+       ldr     r1, =0x5200183c          @根據ddr3顆粒規格書微調參數
        str     r1, [r0, #DMC_TIMINGPOWER] @TimingPower
 #endif
 
@@ -133,7 +133,7 @@ mem_ctrl_asm_init:
 4:     subs    r2, r2, #1
        bne     4b
 
-#if 1
+#if 0                                   @去掉chip1代碼
        /* chip 1 */
        ldr     r1, =0x07100000
        str     r1, [r0, #DMC_DIRECTCMD]
@@ -209,12 +209,12 @@ mem_ctrl_asm_init:
 
        ldr     r1, =0x0FFF301A
        str     r1, [r0, #DMC_CONCONTROL]
-       ldr     r1, =0x00312640
+       ldr     r1, =0x00302640
        str     r1, [r0, #DMC_MEMCONTROL]
 
-       ldr     r1, =0x40e01323                 @Interleaved?
+       ldr     r1, =0x40c01333                 @Interleaved?
        str     r1, [r0, #DMC_MEMCONFIG0]
-       ldr     r1, =0x60e01323
+       ldr     r1, =0x80C01323
        str     r1, [r0, #DMC_MEMCONFIG1]
 
 #ifdef CONFIG_IV_SIZE
@@ -239,11 +239,11 @@ mem_ctrl_asm_init:
        str     r1, [r0, #DMC_TIMINGPOWER]
 #endif
 #ifdef MCLK_400
-       ldr     r1, =0x4046654f
+       ldr     r1, =0x6946654f          @根據ddr3顆粒規格書微調參數
        str     r1, [r0, #DMC_TIMINGROW] @TimingRow
-       ldr     r1, =0x46400506
+       ldr     r1, =0x46460506          @根據ddr3顆粒規格書微調參數
        str     r1, [r0, #DMC_TIMINGDATA] @TimingData
-       ldr     r1, =0x52000a3c
+       ldr     r1, =0x5200183c          @根據ddr3顆粒規格書微調參數
        str     r1, [r0, #DMC_TIMINGPOWER] @TimingPower
 #endif
 
@@ -275,7 +275,7 @@ mem_ctrl_asm_init:
 4:     subs    r2, r2, #1
        bne     4b
 
-#if 1
+#if 0                                   @去掉chip1代碼
        /* chip 1 */
        ldr     r1, =0x07100000
        str     r1, [r0, #DMC_DIRECTCMD]
diff -uNrp uboot_tiny4412/board/samsung/tiny4412/tiny4412.c uboot_tiny4412_kevin/board/samsung/tiny4412/tiny4412.c
--- uboot_tiny4412/board/samsung/tiny4412/tiny4412.c    2016-04-11 12:32:03.511480729 +0800
+++ uboot_tiny4412_kevin/board/samsung/tiny4412/tiny4412.c      2016-03-29 21:37:21.071493254 +0800
@@ -195,6 +195,14 @@ void dram_init_banksize(void)
        gd->bd->bi_dram[2].size = PHYS_SDRAM_3_SIZE;
        gd->bd->bi_dram[3].start = PHYS_SDRAM_4;
        gd->bd->bi_dram[3].size = PHYS_SDRAM_4_SIZE;
+       gd->bd->bi_dram[4].start = PHYS_SDRAM_5;          //BANK數量改變
+       gd->bd->bi_dram[4].size = PHYS_SDRAM_5_SIZE;
+       gd->bd->bi_dram[5].start = PHYS_SDRAM_6;
+       gd->bd->bi_dram[5].size = PHYS_SDRAM_6_SIZE;
+       gd->bd->bi_dram[6].start = PHYS_SDRAM_7;
+       gd->bd->bi_dram[6].size = PHYS_SDRAM_7_SIZE;
+       gd->bd->bi_dram[7].start = PHYS_SDRAM_8;
+       gd->bd->bi_dram[7].size = PHYS_SDRAM_8_SIZE;
 
 #ifdef CONFIG_TRUSTZONE
        gd->bd->bi_dram[nr_dram_banks - 1].size -= CONFIG_TRUSTZONE_RESERVED_DRAM;
diff -uNrp uboot_tiny4412/drivers/mmc/mmc.c uboot_tiny4412_kevin/drivers/mmc/mmc.c
--- uboot_tiny4412/drivers/mmc/mmc.c    2016-04-11 12:32:04.479480708 +0800
+++ uboot_tiny4412_kevin/drivers/mmc/mmc.c      2016-03-30 01:03:42.119732762 +0800
@@ -955,7 +955,7 @@ static int mmc_read_ext_csd(struct mmc *
        ext_csd_struct = ext_csd[EXT_CSD_REV];
        host->ext_csd.boot_size_multi = ext_csd[BOOT_SIZE_MULTI];
 
-       if (ext_csd_struct > 5) {
+       if (ext_csd_struct > 7) {  //若不修改,進入uboot會提示無法識別版本,原因是友善用的emmc顆粒版本較高
                printf("unrecognised EXT_CSD structure "
                        "version %d\n", ext_csd_struct);
                err = -1;
diff -uNrp uboot_tiny4412/include/configs/tiny4412.h uboot_tiny4412_kevin/include/configs/tiny4412.h
--- uboot_tiny4412/include/configs/tiny4412.h   2016-04-11 20:37:03.834845777 +0800
+++ uboot_tiny4412_kevin/include/configs/tiny4412.h     2016-04-11 16:13:01.719191442 +0800
@@ -278,9 +278,9 @@
 #ifdef CONFIG_EVT0_STABLE
 #define CONFIG_NR_DRAM_BANKS   2
 #else
-#define CONFIG_NR_DRAM_BANKS   4
+#define CONFIG_NR_DRAM_BANKS   8               //BANK提高到8
 #endif
-#define SDRAM_BANK_SIZE         0x10000000    /* 256 MB */
+#define SDRAM_BANK_SIZE         0x08000000    /* 128 MB */          //每個BANK容量減小
 #define PHYS_SDRAM_1            CONFIG_SYS_SDRAM_BASE /* SDRAM Bank #1 */
 #define PHYS_SDRAM_1_SIZE       SDRAM_BANK_SIZE
 #define PHYS_SDRAM_2            (CONFIG_SYS_SDRAM_BASE + SDRAM_BANK_SIZE) /* SDRAM Bank #2 */
@@ -326,7 +326,7 @@
 */
 /* Fastboot variables */
 #define CFG_FASTBOOT_TRANSFER_BUFFER            (0x48000000)
-#define CFG_FASTBOOT_TRANSFER_BUFFER_SIZE       (0x18000000)   /* 384MB */
+#define CFG_FASTBOOT_TRANSFER_BUFFER_SIZE       (0x30000000)   /* 768MB */ //當初為了調原生uboot啟動android5.0修改,這里跟uboot啟動無關   
 #define CFG_FASTBOOT_ADDR_KERNEL                (0x40008000)
 #define CFG_FASTBOOT_ADDR_RAMDISK               (0x41000000)
 #define CFG_FASTBOOT_PAGESIZE                   (2048)  // Page size of booting device

以上的注釋都是patch之后后續加上,只為了方便閱讀。修改后的uboot啟動android 4.2是可以正常啟動,但無法運行android 5.0(啟動一段時間后自動跑飛),問了其他人均表示此現象。

詢問友善說是uboot問題。應該是superboot做了其他處理,這里沒有能力繼續研究下去。

 

1:友善的售后做的很差,把客戶當傻X;

2:開源力度相當低;

3:硬件&PCB設計很差。

以上三點理由讓我不會再選擇友善的產品!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM