首先作为一个菜鸟,我得好好向诸位学习。最近一直在摸索flash烧写的步骤,总结了一些经验以及还存在的问题,想写点这些东西和大家一起探讨。我现在弄的DSP平台是以前师兄用DM642自己做的板子,该板子上没有cpld,所以如要充分利用flash(Am29LV033C 4M)的空间只能通过GPIO口来选择翻页工作,合众达以及其他例程上都是用了三根选择翻页线,即将flash分为8页,每页512K,一直不明白为什么,而我师兄的板子只有两根线,即将flash分为4页,每页1M,本来以为这在原理上是可以实现的,但我通过反复修改例程始终只能烧写前512k,于是断言难道要坑爹,后来查阅各种资料,貌似DM642这款片子最多能给flash提供512K的寻址空间,因此必须分为8页,这也就解释了合众达公司的设计思路,当然这个仅是我的理解,不一定对哈~,希望高人指点,因为我想即使不能完全实现4M的空间,那么退而求2M的空间应该可行吧,但是实验一直没有成功。 翻页无法实现,我于是转向思索是否是flash的问题,想着下一个小于512K的程序不就得啦,好不容易找到一个程序,欣喜若狂的实验着,结果还是失败、失败、失败。对于bootload的编写我完全是按照c语言来写的,网上有神贴,是用C语言实现flash的二级烧写,大家可以看一下,亲测可用,下面会提到,再此也感谢一下想出这种方式的大神,向您致敬~ 现在我通过大神的二次烧写步骤已经初步实现了boot的启动,为什么说是初步呢,是因为我正确烧写flash后,拔掉仿真器,按复位按钮,程序可以正常启动,这说明,bootload和flash已经正常工作,但问题就在于我断电后,bootload就不能正常重启了,我在断电后连上仿真器,在线可以看出,在0x90000000和0x00000400处的程序是对的,所以我的bootload确实把程序自动导入了,但是为什么不能正常工作呢?难道是我的跳转地址不对?我用的是extern far void c_int00(void),在boot最后调用该函数,c_int00();想不明白,请各位帮忙看看~
Shine:
1. DM642 EMIF有20根地址线, 接异步memory时, 最大寻址空间不止512K, 可以查看下面文档第97页上的表. 你可以看看合众达板子地址线在硬件上是怎么连接的. http://www.ti.com/lit/ug/spru266e/spru266e.pdf2. GPIO默认值是多少? 你看一下secondary bootloader是不是放在第一个512K flash空间? 你在烧写flash时, 配置过GPIO管脚, 但下电后重新上电, GPIO管脚回到初始值, 这点需要注意一下. 另外, 可以参考一下下面的二次bootloader程序. http://www.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=spra999a
shu wei xiao:
回复 Shine:
您好,感谢您抽出时间来回答我这些问题。我仔细看过合众达的板子,他们用的是三根线作为翻页,也就是说每页为512K,我也看过文档确实是20位地址线,所以正如我上面所说,我觉得在理论上师兄的板子是可以运作的,但是实验始终未能成功;另外关于bootload问题,我通过查看地址数值,确实搬运成功了,我并未配置GPIO口,因为我下的程序本身小于512k。
Shine:
回复 shu wei xiao:
1. 你可以看一下板子上flash所在的CE空间是否还有其他memory也映射到这个CE空间? 这样的话, flash最大寻址空间会减少. 2. 那你可以用仿真器跟一下程序, 看程序运行到哪里出错了
shu wei xiao:
回复 Shine:
我在实验时是弄仿真器跟着的,每次当程序烧写超过512K时,擦除命令就不再管用了,在相应的地址空间也不会变为1.
Shine:
回复 shu wei xiao:
你可以看一下板子上flash所在的CE空间是否还有其他memory也映射到这个CE空间? 这样的话, flash最大寻址空间会减少. TI的EVM板就是还有FPGA也映射到CE1空间, 所以flash最大寻址空间只有512K. http://c6000.spectrumdigital.com/evmdm642/
shu wei xiao:
回复 Shine:
嗯,感谢您抽时间来回答我的问题。我的板子上并没有FPGA,我再看看吧。另外,我的程序本身是小于512K的,并未分页,不知道为什么上电后不能启动成功,但我用仿真器跟着看到里面的存储器程序也搬运到我指定的地方,说明boot程序也执行了,但是却不能执行后续的程序,请问这是什么原因呢?
Shine:
回复 shu wei xiao:
PC指向哪里? GEL文件中板子初始化设置都搬到程序中了么?
shu wei xiao:
回复 Shine:
非常感谢您抽空指导,我仔细检查了一下,不能通过仿真器观察的原因确实是我没有将映射空间设足,导致我不能看后续的寄存器情况。现在我还有一个问题就是,我现在已经完成了对程序的烧写,但是当我复位后观察flash,以及0x00000000发现都变成了fffffff,我不知道是怎么回事?配置的管脚是EMIF引导上电。请您帮我看看~
Shine:
回复 shu wei xiao:
你好, 程序烧写后, 能看到正确烧进去了么?
你指的复位是在CCS里点击CPU Reset还是按硬件复位键, 或者板子下电后重新上电? CCS->Options->Memory Map选项中都设成可读写的吧?
shu wei xiao:
回复 Shine:
请问memory map中的可读写是怎么设置呢?我的是默认的no memory/peotected那个没有改动。硬件复位是指按的硬件复位键。板子下电再上电也不行。我也不清楚是否真的烧进去了,从CCS查看寄存器是烧进去了,但是一旦复位后就变成FF。