您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]BF518外部flash不能烧写
本帖共有5569个阅读者
发表帖子 发表投票 回复主题
[求助]BF518外部flash不能烧写
langbeimao(论坛新手)
langbeimao
头衔:社区公民
帮派:无帮无派
帖数:15
金钱:222
积分:18
注册时间:2011/11/25
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]BF518外部flash不能烧写

我是ADSP新手,自己参考ADI的518开发板做了个板子,用的518F芯片,SDRAM:MT48LC32M16A2P,flash用的是29LV320TE-90PFTN,共计4MB的容量,但我只用了AMS0-2来连FLASH,就是用了3MB的空间,AMS3做外部器件的扩展了。硬件调试显示flash是正常的,我对它也可以做整个芯片的擦除、读写,读写的数据也对。我用的是ADI的仿真器,怀疑是仿真器问题的时候更换了另一个,也是不能烧写。

参考了论坛上得帖子和发布的视频,先设置生成LDR文件,在OPTION里也选了flash,bin格式,16位,我准备烧的程序没有用到SDRAM,只是对GPIO进行操作,所以没有加载init_code。然后生成了ldr的文件。

由于flash只使用AMS0-2,所以我修改了518例程里面的flash driver程序,将sector改为48,也修改了器件的code,用VDSP的烧写程序时,导入flash drive后可以正确读取器件CODE,并且sector map也对。然后在programming选项卡里选erase all,格式bin,点program后,flash进行擦除,然后烧写进度条有反应,但是很快就断了,显示error: could not write file,load wil lnot complete。如图

我自己分析可能原因:

1. 仿真器问题,换了一个新的仿真器试了也不能烧。仿真器型号一样。

2. flash自己的问题,但是我用仿真器对flash进行读写的时候没有问题,数据也对。我对整个芯片进行了擦拭,然后交替写入0x5555,0xaaaa,再把数据读回来,也显示正确。从VDSP的memory里看也是对的。

3. driver的问题,修改后的driver导入显示成功。如图。

4.设计问题,flash用的AMS0-2的空间,ADI自己的板子上是4个bank全用了,而且用的flash的是bottom boot的。我用的flash是top boot型的,只用了三个bank,是不是因为boot的block地址在AMS3空间,而不能烧写?

5. SDRAM的初始化代码,论坛里帖子说需要对init code,但是我烧写的程序没有用到SDRAM啊,是不是不需要烧写,另外烧写的话,有没有代码可以借鉴一下啊,我对init code不太了解,论坛说在518的文件夹下有源码,我看了不知道怎么使用,请andy或者高手们指教。


上传的图片
  20127281902863.jpg [ 117.85 KB 720×504 ] (缩略时请点击查看原图)

 



上传的图片
  20127281954863.jpg [ 120.51 KB 720×515 ] (缩略时请点击查看原图)

 




这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/7/28 19:04:04
langbeimao(论坛新手)
langbeimao
头衔:社区公民
帮派:无帮无派
帖数:15
金钱:222
积分:18
注册时间:2011/11/25
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

我用的vdsp++5,update9,高手们指点一下吧,为什么flash烧不了呢?


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/7/30 16:50:44
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

1. 确认一下你使用AMS0到AMS2 三个线使用门电路 译码地址的关系是否正确。

2. 检查焊接,看是否有短接或虚焊地方。

3. 建议使用尾缀BD的芯片,TE的没有用过,不知道会产生什么结果



这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/8/3 10:21:06
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

4.  以后还是用OpenADSP开源社区的ICE吧,推荐AD-HP510ICE-FULL,https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.11.otR9kb&id=37825542152;产品质量又好,服务又好!


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/8/3 10:53:47
langbeimao(论坛新手)
langbeimao
头衔:社区公民
帮派:无帮无派
帖数:15
金钱:222
积分:18
注册时间:2011/11/25
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

谢谢andy和OP的回复。

这两天我有折腾了一下,通过驱动可以把数据写入flash了,貌似是驱动的问题。不过写进去之后却遇到了系统不能自举的问题:flash显示烧写完成后,断开仿真器,断电,重新上电,但是板子没有反应,烧的GPIO口输出方波的程序没有工作。

硬件连接上,我检查了bmode管脚,确实为001,从外部8或者16位的异步器件启动。我在程序里读SYSCR寄存器,也显示0x8001,外部启动设置应该没有问题。

我查看了生成的ldr文件,16bit,bin格式,无初始化代码。写入到flash的文件后,从memroy里看0x20000000地址里数据。第一个16字节的数据头的前4个字节,居然是重复的。即06 50 6B AD 00 00 A0 FF 00 00 00 00 C0 0F 00 00的ldr数据变成了06 50 6B AD 06 50 6B AD 00 00 A0 FF 00 00 00 00 C0 0F 00 00不知道为什么写入flash后会出现这样的情况。我用手里533的板子试了,虽然写的驱动和代码不一样,不过也会出现前4个字节重复的现象,不过533的那个板子可以自举,我的这个518的就起不来。

于是我又查看了断电后boot的情况,用仿真器看上电后的数据,533的板子里确实是在FFA00000的地址里导入了LDR的数据,所以能自举,但我的板子断电后上电,FFA00000地址里的数据就不对,没有往DSP里搬运数据。请教如何才能诊断程序是否boot呢?



这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/8/3 16:33:14
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

可以用示波器在上电瞬间测量数据线和读使能线是否有信号,如果有,说明处理器上电后在读取flash数据。

你可以先写一个点LED的代码看看,不要使用SDRAM。代码越简单越好。看是否能启动。

另外VDSP下有个bootroom的代码,运行可以模拟从flash加载代码运行,你可以跟一下看看。

在仿真中,除了连接后复位的模式,还有终止模式和不干涉模式,即连接仿真器后不会对处理器复位,保持处理器当前运行状态,在config里面可以配置,你可以使用这两种模式看看。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/8/4 11:14:01
langbeimao(论坛新手)
langbeimao
头衔:社区公民
帮派:无帮无派
帖数:15
金钱:222
积分:18
注册时间:2011/11/25
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

Andy:

多谢你的指导!前两天回家了,才回来。

我测了一下上电后的信号,AMS0和ARE的信号只在上电后有4次信号,然后就没了。不知道是为什么。用boot rom代码看,我从main那里设了断点,然后进去,单步走,先是读SYSCR,然后跳到_bootrom.main.testquick,然后跳到testall,仍然会进main。init,然后到_bootrom.sysreset.loop那里仿真器就断了。因为是新手,也很头大,搞不懂正常的启动流程应该是什么样的,怎么会再复位那里跳出来呢。板子上用的是官方开发板上得复位芯片。这个用bootrom看代码应该怎么看呢?

我用不干涉模式看,上电后,连仿真器,连上后就看到有程序在运行,我halt后,FFA10000里的数据也不是flash里的ldr数据。不知道程序在跑什么。

另外,adsp的177管脚必须焊接么?我的板子上没焊,不知道是否有关联。

Andy兄请指教!多谢!!



这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/8/23 18:26:17
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

177管脚最好焊接,你可以测量一下177的地是否和其他地连接在一起,如果连接了,不焊接应该可以。

你用点灯的LED代码LED代码是否能boot?另外flash你最好换成尾椎为DB的,不要用TE的,这个我不知道是不是会影响boot。如AM29LV320DB


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/8/24 18:15:52
langbeimao(论坛新手)
langbeimao
头衔:社区公民
帮派:无帮无派
帖数:15
金钱:222
积分:18
注册时间:2011/11/25
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

多谢andy耐心的帮助!

我更换了flash,换成M29W320EB,flash driver修改后,可以烧入程序,系统可以启动,GPIO可以工作,输出波形。

可是又遇到了新问题,就是启动几次后就起不来了。我查看FLASH,里面的数据全是一样的数据,如bb84bb84.。。。,这时候如果再去烧写程序,flash driver读回来的器件code就是错误的,我用自己写的flash 测试程序走一遍,设置完EBIU后,读code,这时就对了,而且这时候flash里面的数据也刷新成了程序数据。系统就能启动了。但是几次之后又是一样的问题再次发生。

我怀疑启动过程中ebiu的初始化有问题,有时候没有完成flash的初始化,所以启动不起来。可是这个怎么设置啊?是不是初始化代码的问题?


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/8/30 14:20:22
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
9信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

查查你的焊接是否地址线短接了,你可以遍历SDRAM验证地址线。方法:

写一个遍历写入SDRAM数据的代码。交替写入0x5555,0xaaaa.

然后再写一个校验的代码,将写入的值读出做比较,打印出所有的错误代码。

运行代码,先将SDRAM写满数据。然后打开memory,随机找个地址,将其值改为其他的,然后运行校验代码。看校验的错误有几个,如果是1个代表地址没问题,如果打印多个,说明地址线短接。



这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/8/30 17:41:34
13
1
1/2
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154539 Call, 1 Queries, Processed in 0.030273 second(s),