于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 -- ::03.511480729 +
+++ uboot_tiny4412_kevin/board/samsung/tiny4412/mem_init_tiny4412.S -- ::09.950628589 +
@@ -, +, @@ 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
@@ -, +, @@ 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 @@ -, +, @@ mem_ctrl_asm_init:
: subs r2, r2, #
bne 4b -#if 1
+#if 0 @去掉chip1代码
/* chip 1 */
ldr r1, =0x07100000
str r1, [r0, #DMC_DIRECTCMD]
@@ -, +, @@ 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
@@ -, +, @@ 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 @@ -, +, @@ mem_ctrl_asm_init:
: subs r2, r2, #
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 -- ::03.511480729 +
+++ uboot_tiny4412_kevin/board/samsung/tiny4412/tiny4412.c -- ::21.071493254 +
@@ -, +, @@ void dram_init_banksize(void)
gd->bd->bi_dram[].size = PHYS_SDRAM_3_SIZE;
gd->bd->bi_dram[].start = PHYS_SDRAM_4;
gd->bd->bi_dram[].size = PHYS_SDRAM_4_SIZE;
+ gd->bd->bi_dram[].start = PHYS_SDRAM_5; //BANK数量改变
+ gd->bd->bi_dram[].size = PHYS_SDRAM_5_SIZE;
+ gd->bd->bi_dram[].start = PHYS_SDRAM_6;
+ gd->bd->bi_dram[].size = PHYS_SDRAM_6_SIZE;
+ gd->bd->bi_dram[].start = PHYS_SDRAM_7;
+ gd->bd->bi_dram[].size = PHYS_SDRAM_7_SIZE;
+ gd->bd->bi_dram[].start = PHYS_SDRAM_8;
+ gd->bd->bi_dram[].size = PHYS_SDRAM_8_SIZE; #ifdef CONFIG_TRUSTZONE
gd->bd->bi_dram[nr_dram_banks - ].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 -- ::04.479480708 +
+++ uboot_tiny4412_kevin/drivers/mmc/mmc.c -- ::42.119732762 +
@@ -, +, @@ 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 > ) {
+ if (ext_csd_struct > ) { //若不修改,进入uboot会提示无法识别版本,原因是友善用的emmc颗粒版本较高
printf("unrecognised EXT_CSD structure "
"version %d\n", ext_csd_struct);
err = -;
diff -uNrp uboot_tiny4412/include/configs/tiny4412.h uboot_tiny4412_kevin/include/configs/tiny4412.h
--- uboot_tiny4412/include/configs/tiny4412.h -- ::03.834845777 +
+++ uboot_tiny4412_kevin/include/configs/tiny4412.h -- ::01.719191442 +
@@ -, +, @@
#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 */
@@ -, +, @@
*/
/* 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设计很差。

以上三点理由让我不会再选择友善的产品!

tiny4412sdk-1506原生uboot卡死的更多相关文章

  1. 基于tiny4412原生uboot修改制作SD启动并烧写到emmc

    最近入手tiny4412的标准板,底板SDK型号为1506.但是因为友善之臂提供的superboot不能进入boot菜单,此时我就不能通过tftp下载内核和通过nfs挂载根文件系统,于是想自己做个ub ...

  2. X-007 FriendlyARM tiny4412 u-boot移植之内存初始化

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  3. tiny4412 --Uboot移植(5) DDR3内存

    开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位 工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-g ...

  4. tiny210——uboot移植Makefile文章分析

    这东西已经写,我们没有时间发布,如今,终于有时间稍微长送记录汇总uboot学习过程.具体了.以后忘了也能够再温习回来嘛有些特殊字符显示得乱掉了 Makefile追踪技巧: 技巧1:能够先从编译目标開始 ...

  5. 海思uboot启动流程详细分析(二)

    1. 第二个start.S 从start_armboot开始,在startup.c中有包含#include <config.h> 在config.h中: /* Automatically ...

  6. 原生 table css实现操作按钮固定右侧及底部滚动 IE不会卡死

    需求的表格比较复杂(各种合并新增删除),elementUi的table组件无法满足需求,故而写了原生table,且与其他用了table组件的表格保持一致. 贴一下简单的代码,只实现操作按钮固定右侧以及 ...

  7. 嵌入式系统烧写uboot/bootloader/kernel的一般方法

    嵌入式系统烧写uboot/bootloader/kernel的一般方法   本文介绍了在嵌入式系统中烧写uboot/bootloader/kernel 的一般方法,以及如果uboot或者内核出现错误, ...

  8. X-008 FriendlyARM tiny4412 uboot移植之copy u-boot到DDR内存

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  9. X-006 FriendlyARM tiny4412 u-boot移植之Debug串口用起来

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

随机推荐

  1. iOS表格制作

    由于项目上的需求,需要做一个表格出来,来显示流程状态.刚开始脑子一头雾水,没有一点思路,但是靠着自己的座右铭--“世上无难事,只怕有心人”,克服了所有困难.好,不说了,讲正事. 制作表格,还是需要ta ...

  2. 【智力题】IO——行测、笔试、面试中遇到的

    昨天(05.23)下午去参加了明源软件的暑期实习宣讲+笔试,第一次听说这个行业,行业和笔试风格完全不一样啊,5道行测智力题+1个问答+ 斐波那契数列 + 洗牌算法(思想.流程图.代码),今年回来后线上 ...

  3. 【BZOJ4205】卡牌配对 最大流

    [BZOJ4205]卡牌配对 Description 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值 ...

  4. 九度OJ 1188:约瑟夫环 (约瑟夫环)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1891 解决:817 题目描述: N个人围成一圈顺序编号,从1号开始按1.2.3......顺序报数,报p者退出圈外,其余的人再从1.2.3 ...

  5. 微信小程序报“app.json”错误解决办法

    1.亲测 “app.json未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译.” 是由于新创建的界面xxx.json所在的文件夹为0KB造成的,你可以试着在xxx.json文件内 ...

  6. linux c编程:popen

    我们在执行shell命令比如cat /etc/group | grep root的时候,通过管道的机制将cat /etc/group的结果传递给grep root,然后将结果显示出来 linux中提供 ...

  7. windows环境下JDK1.8安装

    jdk的安装,在Windows环境下没有什么特殊的选项,只需要“傻瓜式”安装就行(下一步). 如果说有的话,那就是你安装的路径,默认是c盘下的路径,可以根据自己的喜好,安装到自己的意愿目录: 当然,j ...

  8. WORD表格数据运算技巧

    我们经常会用WORD制作表格,有时表内的数据要运算的,WORD表格数据运算能力无法与EXCEL相比.但常见的乘除加减.相邻数据累加,将金额数字自动转成大写,WORD都能在表格内自动完成.下面以一个简单 ...

  9. memcpy使用

    void memcpy(void dest, const void *src, size_t n); 功能编辑 从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置 ...

  10. 常用grads函数

    GrADS的函数分两类, 一类是对格点/站点数据执行运算的,这一类我们姑且称之为分析函数; 另一类是脚本编程(gs)时使用的, 这后一类我们姑且称之为脚本函数. 第一类分析函数又分为格点分析和站点分析 ...