主题 : nanoPC-T1 UBOOT学习 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 106525
精华: 0
发帖: 15
金钱: 75 两
威望: 15 点
贡献值: 0 点
综合积分: 30 分
注册时间: 2014-07-26
最后登录: 2015-06-05
楼主  发表于: 2014-08-05 22:52

 nanoPC-T1 UBOOT学习

本来不确定U-boot for Tiny4412源代码是否可以用在nanoPC-T1上的,就抱着试一试的心理来研究。

今晚把tiny4412的uboot在虚拟机的ubuntu上编译通过,并按照readme文档做了SD启动卡。

把启动卡插到nanoPC-T1的SD卡槽上,按住bootsel按键,开机

然后在串口终端发现有一句LOG:

OK

然后,就没有然后了,呵呵,不知道BOOT是否启动了,还是启动到一半不动了?

明天上班继续研究下代码,好累!

欢迎爱好者加入365482363这个群一起研究
兲朝苦逼
级别: 新手上路
UID: 106698
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2014-07-31
最后登录: 2014-11-25
1楼  发表于: 2014-08-12 22:04
同样的问题,求解

难道U-boot for Tiny4412 不适用于nano pc?
级别: 侠客
UID: 16892
精华: 0
发帖: 58
金钱: 290 两
威望: 58 点
贡献值: 0 点
综合积分: 116 分
注册时间: 2010-03-23
最后登录: 2017-02-11
2楼  发表于: 2014-09-14 12:05

 回 1楼(seayboy) 的帖子

我的也没成功,求解
级别: 新手上路
UID: 106525
精华: 0
发帖: 15
金钱: 75 两
威望: 15 点
贡献值: 0 点
综合积分: 30 分
注册时间: 2014-07-26
最后登录: 2015-06-05
3楼  发表于: 2014-09-19 09:56
终于搞定了,修改了内存参数后,uboot 终于可以在nano pc上跑起来了
级别: 侠客
UID: 16892
精华: 0
发帖: 58
金钱: 290 两
威望: 58 点
贡献值: 0 点
综合积分: 116 分
注册时间: 2010-03-23
最后登录: 2017-02-11
4楼  发表于: 2014-09-25 10:41
楼主,您好,我也改了改内存配置,我这边还是起不来,楼周能不能帮我看看,谢谢!
下面是我的mem_init_tiny4412.S文件内容。


#include <config.h>
#include <asm/arch/cpu.h>

#ifdef CONFIG_CLK_BUS_DMC_200_400
#define MCLK_400
#else
#define MCLK_330
#endif


    .globl mem_ctrl_asm_init
mem_ctrl_asm_init:

    /* Async bridge configuration at CPU_core:
     * 1: half_sync
     * 0: full_sync */
    ldr    r0, =0x10010350
    mov    r1, #1
    str    r1, [r0]


/*****************************************************************/
/*DREX0***********************************************************/
/*****************************************************************/

    ldr    r0, =APB_DMC_0_BASE

    ldr    r1, =0xe0000086
    str    r1, [r0, #DMC_PHYCONTROL1]

    ldr    r1, =0xE3854C03
    str    r1, [r0, #DMC_PHYZQCONTROL]

    mov    r2, #0x100000
1:    subs    r2, r2, #1
    bne    1b

    ldr    r1, =0xe000008e
    str    r1, [r0, #DMC_PHYCONTROL1]
    ldr    r1, =0xe0000086
    str    r1, [r0, #DMC_PHYCONTROL1]

    ldr    r1, =0x71101008
    str    r1, [r0, #DMC_PHYCONTROL0]
    ldr    r1, =0x7110100A
    str    r1, [r0, #DMC_PHYCONTROL0]

    ldr    r1, =0xe0000086
    str    r1, [r0, #DMC_PHYCONTROL1]
    ldr    r1, =0x7110100B
    str    r1, [r0, #DMC_PHYCONTROL0]

    ldr    r1, =0x00000000
    str    r1, [r0, #DMC_PHYCONTROL2]

    ldr    r1, =0x0FFF301A
    str    r1, [r0, #DMC_CONCONTROL]
    /* ldr    r1, =0x00312640 */
    ldr    r1, =0x00302640        /*Burst Length=8 1chip 32bit DDR3*/
    str    r1, [r0, #DMC_MEMCONTROL]

    /* ldr    r1, =0x40e01323 */
    ldr    r1, =0x40c01333        /*base[31:24]=0x40=>0x40000000 mask[23:16]=0xC0=>0x40000000-0x7FFFFFFF */
                            /*col[11:8]=0x3=>10bit row[7:4]=0x5=>15bit banks[3:0]=0x3=>8banks*/
    str    r1, [r0, #DMC_MEMCONFIG0]
    /* ldr    r1, =0x60e01323
    str    r1, [r0, #DMC_MEMCONFIG1]
    */

#ifdef CONFIG_IV_SIZE
    ldr    r1, =(0x80000000 | CONFIG_IV_SIZE) /*Memory Channel Interleaving Enable[31]=yes CONFIG_IV_SIZE=0x1F=>1G byte*/
#else
    ldr    r1, =0x08
#endif
    str    r1, [r0, #DMC_IVCONTROL]

    ldr    r1, =0xff000000
    str    r1, [r0, #DMC_PRECHCONFIG]

    ldr    r1, =0x000000BB
    str    r1, [r0, #DMC_TIMINGAREF] @TimingAref

#ifdef MCLK_330
    ldr    r1, =0x3545548d
    str    r1, [r0, #DMC_TIMINGROW]
    ldr    r1, =0x45430506
    str    r1, [r0, #DMC_TIMINGDATA]
    ldr    r1, =0x46000A3c
    str    r1, [r0, #DMC_TIMINGPOWER]
#endif
#ifdef MCLK_400
    ldr    r1, =0x4046654f
    str    r1, [r0, #DMC_TIMINGROW] @TimingRow
    ldr    r1, =0x46400506
    str    r1, [r0, #DMC_TIMINGDATA] @TimingData
    ldr    r1, =0x52000a3c
    str    r1, [r0, #DMC_TIMINGPOWER] @TimingPower
#endif

    /* chip 0 */
    ldr    r1, =0x07000000
    str    r1, [r0, #DMC_DIRECTCMD]

    mov    r2, #0x100000
2:    subs    r2, r2, #1
    bne    2b

    ldr    r1, =0x00020000
    str    r1, [r0, #DMC_DIRECTCMD]
    ldr    r1, =0x00030000
    str    r1, [r0, #DMC_DIRECTCMD]
    ldr    r1, =0x00010002
    str    r1, [r0, #DMC_DIRECTCMD]
    ldr    r1, =0x00000328
    str    r1, [r0, #DMC_DIRECTCMD]

    mov    r2, #0x100000
3:    subs    r2, r2, #1
    bne    3b

    ldr    r1, =0x0a000000
    str    r1, [r0, #DMC_DIRECTCMD]

    mov    r2, #0x100000
4:    subs    r2, r2, #1
    bne    4b

#if 1
    /* chip 1 */
    ldr    r1, =0x07100000
    str    r1, [r0, #DMC_DIRECTCMD]

    mov    r2, #0x100000
5:    subs    r2, r2, #1
    bne    5b

    ldr    r1, =0x00120000
    str    r1, [r0, #DMC_DIRECTCMD]
    ldr    r1, =0x00130000
    str    r1, [r0, #DMC_DIRECTCMD]
    ldr    r1, =0x00110002
    str    r1, [r0, #DMC_DIRECTCMD]
    ldr    r1, =0x00100328
    str    r1, [r0, #DMC_DIRECTCMD]

    mov    r2, #0x100000
6:    subs    r2, r2, #1
    bne    6b

    ldr    r1, =0x0a100000
    str    r1, [r0, #DMC_DIRECTCMD]

    mov    r2, #0x100000
7:    subs    r2, r2, #1
    bne    7b
#endif

    ldr    r1, =0xe000008e
    str    r1, [r0, #DMC_PHYCONTROL1]
    ldr    r1, =0xe0000086
    str    r1, [r0, #DMC_PHYCONTROL1]

    mov    r2, #0x100000
8:    subs    r2, r2, #1
    bne    8b


/*****************************************************************/
/*DREX1***********************************************************/
/*****************************************************************/

    ldr    r0, =APB_DMC_1_BASE

    ldr    r1, =0xe0000086
    str    r1, [r0, #DMC_PHYCONTROL1]

    ldr    r1, =0xE3854C03
    str    r1, [r0, #DMC_PHYZQCONTROL]

    mov    r2, #0x100000
1:    subs    r2, r2, #1
    bne    1b

    ldr    r1, =0xe000008e
    str    r1, [r0, #DMC_PHYCONTROL1]
    ldr    r1, =0xe0000086
    str    r1, [r0, #DMC_PHYCONTROL1]

    ldr    r1, =0x71101008
    str    r1, [r0, #DMC_PHYCONTROL0]
    ldr    r1, =0x7110100A
    str    r1, [r0, #DMC_PHYCONTROL0]

    ldr    r1, =0xe0000086
    str    r1, [r0, #DMC_PHYCONTROL1]
    ldr    r1, =0x7110100B
    str    r1, [r0, #DMC_PHYCONTROL0]

    ldr    r1, =0x00000000
    str    r1, [r0, #DMC_PHYCONTROL2]

    ldr    r1, =0x0FFF301A
    str    r1, [r0, #DMC_CONCONTROL]
    ldr    r1, =0x00312640
    str    r1, [r0, #DMC_MEMCONTROL]

    ldr    r1, =0x40e01323            @Interleaved?
    str    r1, [r0, #DMC_MEMCONFIG0]
    ldr    r1, =0x60e01323
    str    r1, [r0, #DMC_MEMCONFIG1]

#ifdef CONFIG_IV_SIZE
    ldr    r1, =(0x80000000 | CONFIG_IV_SIZE)
#else
    ldr    r1, =0x08
#endif
    str    r1, [r0, #DMC_IVCONTROL]

    ldr    r1, =0xff000000
    str    r1, [r0, #DMC_PRECHCONFIG]

    ldr    r1, =0x000000BB
    str    r1, [r0, #DMC_TIMINGAREF] @TimingAref

#ifdef MCLK_330
    ldr    r1, =0x3545548d
    str    r1, [r0, #DMC_TIMINGROW]
    ldr    r1, =0x45430506
    str    r1, [r0, #DMC_TIMINGDATA]
    ldr    r1, =0x46000A3c
    str    r1, [r0, #DMC_TIMINGPOWER]
#endif
#ifdef MCLK_400
    ldr    r1, =0x4046654f
    str    r1, [r0, #DMC_TIMINGROW] @TimingRow
    ldr    r1, =0x46400506
    str    r1, [r0, #DMC_TIMINGDATA] @TimingData
    ldr    r1, =0x52000a3c
    str    r1, [r0, #DMC_TIMINGPOWER] @TimingPower
#endif

    /* chip 0 */
    ldr    r1, =0x07000000
    str    r1, [r0, #DMC_DIRECTCMD]

    mov    r2, #0x100000
2:    subs    r2, r2, #1
    bne    2b

    ldr    r1, =0x00020000
    str    r1, [r0, #DMC_DIRECTCMD]
    ldr    r1, =0x00030000
    str    r1, [r0, #DMC_DIRECTCMD]
    ldr    r1, =0x00010002
    str    r1, [r0, #DMC_DIRECTCMD]
    ldr    r1, =0x00000328
    str    r1, [r0, #DMC_DIRECTCMD]

    mov    r2, #0x100000
3:    subs    r2, r2, #1
    bne    3b

    ldr    r1, =0x0a000000
    str    r1, [r0, #DMC_DIRECTCMD]

    mov    r2, #0x100000
4:    subs    r2, r2, #1
    bne    4b

#if 1
    /* chip 1 */
    ldr    r1, =0x07100000
    str    r1, [r0, #DMC_DIRECTCMD]

    mov    r2, #0x100000
5:    subs    r2, r2, #1
    bne    5b

    ldr    r1, =0x00120000
    str    r1, [r0, #DMC_DIRECTCMD]
    ldr    r1, =0x00130000
    str    r1, [r0, #DMC_DIRECTCMD]
    ldr    r1, =0x00110002
    str    r1, [r0, #DMC_DIRECTCMD]
    ldr    r1, =0x00100328
    str    r1, [r0, #DMC_DIRECTCMD]

    mov    r2, #0x100000
6:    subs    r2, r2, #1
    bne    6b

    ldr    r1, =0x0a100000
    str    r1, [r0, #DMC_DIRECTCMD]

    mov    r2, #0x100000
7:    subs    r2, r2, #1
    bne    7b
#endif

    ldr    r1, =0xe000008e
    str    r1, [r0, #DMC_PHYCONTROL1]
    ldr    r1, =0xe0000086
    str    r1, [r0, #DMC_PHYCONTROL1]

    mov    r2, #0x100000
8:    subs    r2, r2, #1
    bne    8b


/*****************************************************************/
/*Finalize********************************************************/
/*****************************************************************/

    ldr    r0, =APB_DMC_0_BASE
    ldr    r1, =0x0FFF303A
    str    r1, [r0, #DMC_CONCONTROL]

    ldr    r0, =APB_DMC_1_BASE
    ldr    r1, =0x0FFF303A
    str    r1, [r0, #DMC_CONCONTROL]

    mov    pc, lr
级别: 新手上路
UID: 107871
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2014-09-08
最后登录: 2014-11-10
5楼  发表于: 2014-10-27 11:27
試試看
ldr r1, =0x6946654f
str r1, [r0, #DMC_TIMINGROW] @TimingRow