您的位置:首页 > 其它

tiny4412sdk-1506原生uboot卡死

2016-06-26 12:15 141 查看
于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设计很差。

以上三点理由让我不会再选择友善的产品!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: