于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,可能技术/成本原因没实现)

以下是我做的补丁包,代码如下:

  1. diff -uNrp uboot_tiny4412/board/samsung/tiny4412/mem_init_tiny4412.S uboot_tiny4412_kevin/board/samsung/tiny4412/mem_init_tiny4412.S
  2. --- uboot_tiny4412/board/samsung/tiny4412/mem_init_tiny4412.S -- ::03.511480729 +
  3. +++ uboot_tiny4412_kevin/board/samsung/tiny4412/mem_init_tiny4412.S -- ::09.950628589 +
  4. @@ -, +, @@ mem_ctrl_asm_init:
  5.  
  6. ldr r1, =0x0FFF301A
  7. str r1, [r0, #DMC_CONCONTROL]
  8. - ldr r1, =0x00312640
  9. + ldr r1, =0x00302640 @这里只有一个chip0
  10. str r1, [r0, #DMC_MEMCONTROL]
  11.  
  12. - ldr r1, =0x40e01323
  13. + ldr r1, =0x40C01333 @Row15bit,偏移地址是0x3FFFFFFF(1GB)
  14. str r1, [r0, #DMC_MEMCONFIG0]
  15. - ldr r1, =0x60e01323
  16. + ldr r1, =0x80C01333 @可以不修改,这里只为了说明控制器0地址到达0x7FFFFFFF
  17. str r1, [r0, #DMC_MEMCONFIG1]
  18.  
  19. #ifdef CONFIG_IV_SIZE
  20. @@ -, +, @@ mem_ctrl_asm_init:
  21. str r1, [r0, #DMC_TIMINGPOWER]
  22. #endif
  23. #ifdef MCLK_400
  24. - ldr r1, =0x4046654f
  25. + ldr r1, =0x6946654f @根据ddr3颗粒规格书微调参数
  26. str r1, [r0, #DMC_TIMINGROW] @TimingRow
  27. - ldr r1, =0x46400506
  28. + ldr r1, =0x46460506 @根据ddr3颗粒规格书微调参数
  29. str r1, [r0, #DMC_TIMINGDATA] @TimingData
  30. - ldr r1, =0x52000a3c
  31. + ldr r1, =0x5200183c @根据ddr3颗粒规格书微调参数
  32. str r1, [r0, #DMC_TIMINGPOWER] @TimingPower
  33. #endif
  34.  
  35. @@ -, +, @@ mem_ctrl_asm_init:
  36. : subs r2, r2, #
  37. bne 4b
  38.  
  39. -#if 1
  40. +#if 0 @去掉chip1代码
  41. /* chip 1 */
  42. ldr r1, =0x07100000
  43. str r1, [r0, #DMC_DIRECTCMD]
  44. @@ -, +, @@ mem_ctrl_asm_init:
  45.  
  46. ldr r1, =0x0FFF301A
  47. str r1, [r0, #DMC_CONCONTROL]
  48. - ldr r1, =0x00312640
  49. + ldr r1, =0x00302640
  50. str r1, [r0, #DMC_MEMCONTROL]
  51.  
  52. - ldr r1, =0x40e01323 @Interleaved?
  53. + ldr r1, =0x40c01333 @Interleaved?
  54. str r1, [r0, #DMC_MEMCONFIG0]
  55. - ldr r1, =0x60e01323
  56. + ldr r1, =0x80C01323
  57. str r1, [r0, #DMC_MEMCONFIG1]
  58.  
  59. #ifdef CONFIG_IV_SIZE
  60. @@ -, +, @@ mem_ctrl_asm_init:
  61. str r1, [r0, #DMC_TIMINGPOWER]
  62. #endif
  63. #ifdef MCLK_400
  64. - ldr r1, =0x4046654f
  65. + ldr r1, =0x6946654f @根据ddr3颗粒规格书微调参数
  66. str r1, [r0, #DMC_TIMINGROW] @TimingRow
  67. - ldr r1, =0x46400506
  68. + ldr r1, =0x46460506 @根据ddr3颗粒规格书微调参数
  69. str r1, [r0, #DMC_TIMINGDATA] @TimingData
  70. - ldr r1, =0x52000a3c
  71. + ldr r1, =0x5200183c @根据ddr3颗粒规格书微调参数
  72. str r1, [r0, #DMC_TIMINGPOWER] @TimingPower
  73. #endif
  74.  
  75. @@ -, +, @@ mem_ctrl_asm_init:
  76. : subs r2, r2, #
  77. bne 4b
  78.  
  79. -#if 1
  80. +#if 0 @去掉chip1代码
  81. /* chip 1 */
  82. ldr r1, =0x07100000
  83. str r1, [r0, #DMC_DIRECTCMD]
  84. diff -uNrp uboot_tiny4412/board/samsung/tiny4412/tiny4412.c uboot_tiny4412_kevin/board/samsung/tiny4412/tiny4412.c
  85. --- uboot_tiny4412/board/samsung/tiny4412/tiny4412.c -- ::03.511480729 +
  86. +++ uboot_tiny4412_kevin/board/samsung/tiny4412/tiny4412.c -- ::21.071493254 +
  87. @@ -, +, @@ void dram_init_banksize(void)
  88. gd->bd->bi_dram[].size = PHYS_SDRAM_3_SIZE;
  89. gd->bd->bi_dram[].start = PHYS_SDRAM_4;
  90. gd->bd->bi_dram[].size = PHYS_SDRAM_4_SIZE;
  91. + gd->bd->bi_dram[].start = PHYS_SDRAM_5; //BANK数量改变
  92. + gd->bd->bi_dram[].size = PHYS_SDRAM_5_SIZE;
  93. + gd->bd->bi_dram[].start = PHYS_SDRAM_6;
  94. + gd->bd->bi_dram[].size = PHYS_SDRAM_6_SIZE;
  95. + gd->bd->bi_dram[].start = PHYS_SDRAM_7;
  96. + gd->bd->bi_dram[].size = PHYS_SDRAM_7_SIZE;
  97. + gd->bd->bi_dram[].start = PHYS_SDRAM_8;
  98. + gd->bd->bi_dram[].size = PHYS_SDRAM_8_SIZE;
  99.  
  100. #ifdef CONFIG_TRUSTZONE
  101. gd->bd->bi_dram[nr_dram_banks - ].size -= CONFIG_TRUSTZONE_RESERVED_DRAM;
  102. diff -uNrp uboot_tiny4412/drivers/mmc/mmc.c uboot_tiny4412_kevin/drivers/mmc/mmc.c
  103. --- uboot_tiny4412/drivers/mmc/mmc.c -- ::04.479480708 +
  104. +++ uboot_tiny4412_kevin/drivers/mmc/mmc.c -- ::42.119732762 +
  105. @@ -, +, @@ static int mmc_read_ext_csd(struct mmc *
  106. ext_csd_struct = ext_csd[EXT_CSD_REV];
  107. host->ext_csd.boot_size_multi = ext_csd[BOOT_SIZE_MULTI];
  108.  
  109. - if (ext_csd_struct > ) {
  110. + if (ext_csd_struct > ) { //若不修改,进入uboot会提示无法识别版本,原因是友善用的emmc颗粒版本较高
  111. printf("unrecognised EXT_CSD structure "
  112. "version %d\n", ext_csd_struct);
  113. err = -;
  114. diff -uNrp uboot_tiny4412/include/configs/tiny4412.h uboot_tiny4412_kevin/include/configs/tiny4412.h
  115. --- uboot_tiny4412/include/configs/tiny4412.h -- ::03.834845777 +
  116. +++ uboot_tiny4412_kevin/include/configs/tiny4412.h -- ::01.719191442 +
  117. @@ -, +, @@
  118. #ifdef CONFIG_EVT0_STABLE
  119. #define CONFIG_NR_DRAM_BANKS 2
  120. #else
  121. -#define CONFIG_NR_DRAM_BANKS 4
  122. +#define CONFIG_NR_DRAM_BANKS 8 //BANK提高到8
  123. #endif
  124. -#define SDRAM_BANK_SIZE 0x10000000 /* 256 MB */
  125. +#define SDRAM_BANK_SIZE 0x08000000 /* 128 MB */ //每个BANK容量减小
  126. #define PHYS_SDRAM_1 CONFIG_SYS_SDRAM_BASE /* SDRAM Bank #1 */
  127. #define PHYS_SDRAM_1_SIZE SDRAM_BANK_SIZE
  128. #define PHYS_SDRAM_2 (CONFIG_SYS_SDRAM_BASE + SDRAM_BANK_SIZE) /* SDRAM Bank #2 */
  129. @@ -, +, @@
  130. */
  131. /* Fastboot variables */
  132. #define CFG_FASTBOOT_TRANSFER_BUFFER (0x48000000)
  133. -#define CFG_FASTBOOT_TRANSFER_BUFFER_SIZE (0x18000000) /* 384MB */
  134. +#define CFG_FASTBOOT_TRANSFER_BUFFER_SIZE (0x30000000) /* 768MB */ //当初为了调原生uboot启动android5.0修改,这里跟uboot启动无关
  135. #define CFG_FASTBOOT_ADDR_KERNEL (0x40008000)
  136. #define CFG_FASTBOOT_ADDR_RAMDISK (0x41000000)
  137. #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. 第8章 Foundation Kit介绍

    本文转载至  http://blog.csdn.net/mouyong/article/details/16947321 Objective-C是一门非常精巧实用的语言,目前我们还没有研究完它提供的全 ...

  2. SET IDENTITY_INSERT ON/OFF 权限

    今天突然遇到了,找不到对象“XXXX”,因为它不存在或者没有您所需的权限,于是检查程序,突然发现程序中有一段代码是: SET IDENTITY_INSERT eticket ON //执行业务 ... ...

  3. 【BZOJ4769】超级贞鱼 归并排序求逆序对

    [BZOJ4769]超级贞鱼 Description 马达加斯加贞鱼是一种神奇的双脚贞鱼,它们把自己的智慧写在脚上——每只贞鱼的左脚和右脚上各有一个数.有一天,K只贞鱼兴致来潮,排成一列,从左到右第i ...

  4. Linux的分区

    1.磁盘分区 主分区: 最多只能有4个 扩展分区: 最多只能有1个 主分区加扩展分区最多只能有4个 不能写入数据,只能包含逻辑逻辑分区 逻辑分区: 磁盘号从5开始,只要看到磁盘号是5,一定是逻辑分区 ...

  5. cocos2d-x CCControl控件

    感谢点评与关注.欢迎转载与分享.勤奋努力,持之以恒! CCControlSlider 滑动条 void HelloWorld::myInit10() { CCSize size = CCDirecto ...

  6. jQuery 中的 Deferred 和 Promises(转)

    转自:http://www.css88.com/archives/4750/comment-page-1 看前首先了解:Promises/A规范,具体可以看这里,http://www.css88.co ...

  7. url信息

    var protocol = window.location.protocol; // "http:" var host = window.location.host; //&qu ...

  8. vim有用的快捷键

    多行前插入字符: ctrl + v (进入列模式,选上要插入的行) shift + i 输入要统一插入的字符 esc (虽然从外面看着是只有一行插入了,但是按下esc后就会发现之前选的都插入了 删除多 ...

  9. 《DevExpress》记录之TreeList

    如这两幅图所示:如果要显示左边的竖线,需要设置 感谢 DoomGuards本节Dome下载地址:http://pan.baidu.com/s/1wBOJk 密码:vz4d

  10. 【leetcode刷题笔记】Word Search

    Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...