关于自制dm6446的ubl启动问题的解决


请教darkhate,关于dm6446的ubl启动  

我先说说我的情况:使用的是合众达的dm6446开发板,自己做的板子是根据开发板的原理图做的,只是把DDR RAM由开发板的256M换成了64M。自己做的板子在裸写的程序下测试都很好,主要指读写DDR,读写NAND flash。现在开始移植ubl和uboot,可写进去后发现串口没有输出。 

我对程序做出的修改主要如下: 

1、把nandflash.out的源代码里的static Uint32 ublheader[6]={0xA1ACED00,0x000024ac,0x0000001c,0x00000001,0x00000001,0x00000000}; 
0x000024ac为编译ubl后显示的 
arm_v5t_le-objcopy -R .ddrram -R .ddrram2 --gap-fill 0xFF --pad-to 0x3800 -S -O binary ubl_davinci_nand ../ubl_davinci_nand.bin 
The entry point of the binary is 0x24ac 

2、把ubl里的DDRinit函数里的DDR寄存器值改为了适合自己板子的值,这些值是使用裸写程序测试过的 

除了上面两个步骤,还需要别的什么步骤吗? 

此外,我有一个疑问: 
看了你写的“排查过程,在买的开发板上ATA的 R/W信号和Nand flash的 R/W信号同样的连接到cpu dm6446上,在PCB布线的过程中,需要考虑信号的串扰,另外还需要考虑信号电平的互相干扰,如果布线不合适,ATA即使没有接上,它们的信号也会导致nand flash的 status改变,从而导致cpu无法接收到正确的状态信息。可以考虑将ATA先断开。 ” 
我的板子上没用到ATA,只不过把pinmux的ATAEN位清零了,这样是不是就是你所说的ATA断开?

文章选项: 打印

 Re: 请教darkhate,关于dm6446的ubl启动  [re: zhlyp2007]

 

 

请教不敢当,我也刚接触这个芯片,参考板咱们用得估计是一块板子,以后也可以互相讨论,呵呵。 

看了你的说明,我想说的是,你说的这些,我认为有些问题就是,你不能确定串口的硬件工作正常,可以在CCS参考板子的裸板测试代码,利用串口调试助手,检测串口硬件的工作状态,这个厂家是做好了的,在软件包里面是有的,串口与其他部分没有关联,基本上你改它的可能性也不大,所以拿过来应该可以直接测试,检测一个数据的大回环。 

另外,我的检测过程中,我感觉参考板上的硬件还是会有一些问题的,不知道是不是我们拿的版本比较早一点,我们在硬件测试的过程中,发现了几处原理图上电阻阻值的错误,我不做硬件,具体位置不太清楚,只能大概提示:一处是jtag口处,需要去掉两个电阻,一个是nand flash的控制信号处,具体可以看看我之前的nand flash相关帖。还有一个是音频的电阻。 

UBL的代码工作原理比较简单明了,如果硬件没有问题,是可以跑起来的,你可以重点关注一下你ddr芯片的位宽,另外,你说的入口地址最好还是用objdump命令查看一下,不过按照这里也是和引导uboot相关,和ubl 自身启动是没有关系的。看进度,咱们两个公司进度差不多哦。我是个新手,如果你不嫌弃的话,我们可以一起探讨和学习,一个人做太郁闷了,我也需要一个能够讨论的伙伴,如果可以,加我qq:406173699 或者 MSN: wf_stonemonkey@hotmail.com 

文章选项: 

 Re: 请教darkhate,关于dm6446的ubl启动  [re: darkhate]

 

 

先谢谢那么晚给我的回复 

首先我能保证的是我的串口是正常的。因为当cpu处于uart boot时,串口一直有“bootme”输出的,而且我也用裸写的程序测试过了 

电阻阻值错误的问题我也有发现,在网络部分就有些阻值标错了,不过在nand flash部分真没发现有电阻用错,此外我读写nand flash的程序一直是正常的 

objdump的入口地址正是ubl的入口地址,而uboot的入口地址被nandflash.out默认为了81080000。我的DDR的参数也是经过板子验证的,可我的ubl还是不能给我想要的结果,很郁闷啊

文章选项: 

 Re: 请教darkhate,关于dm6446的ubl启动  [re: zhlyp2007]

 

 

恩,我特意在我的板子上试了试,只烧写一个ubl_nand.bin进去,启动的时候,会打印出串口代码的,不过启动模式有好几种的,不知道你强调uart_mode,有何种深意? 

你是如何烧写二进制代码进去的?CCS? DVflash?还是什么别的?感觉是估计是CCS啊? 

如果我没猜错,我想你需要仔细看看DM644xInit() 函数里面的DDR2init部分,还是和你换DDR2芯片相关的。

文章选项: 

 Re: 请教darkhate,关于dm6446的ubl启动  [re: darkhate]

 

 

不知道你到底做的怎么样了,好歹给个回复啊,如果搞定了,接帖是必要的素质,网络上大家是人人为我,我为人人。

文章选项: 

 Re: 请教darkhate,关于dm6446的ubl启动  [re: darkhate]

 

 

呵呵,别着急啊,今晚终于解决了,现在是分享时间: 
1,自己编译nandflash.out时,一定要用带ECC检查的nandflash源代码库,否则编译出来的nandflash.out是不对的,不能正确的把UBL写入相应的位置 
2,第二条就是我的板子出的问题,其实硬件是没问题的,编译出来的nandflash.out和ubl.bin也是正确的,问题就是出在硬件中没有自启动时reset the cpu,6446文档有这么一句话:The BOOTCFG register (located at address 0x01C4 000A) contains the status values of the BTSEL1,BTSEL0, DSP_BT, EM_WIDTH, and AEAW[4:0] pins captured at the rising edge of RESET,所以6446的电路在上电后要复位一下才可以用的(后来找到毛病后有人告诉我很多DSP都是这样的,汗!我以前做arm的不是很懂dsp,没想到硬件工程师也。。。。)

 如需访问原内容可参考网址:点击打开链接

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值