本帖最后由 nicholasldf 于 2009-11-23 16:47 编辑
首先,谢谢大家帮忙分析!:handshake
百特的刘工过来帮忙找到了原因。十分谢谢他,否则又要白费人力了。
我总结了大致如下:
at91sam9260内部的romboot要利用SDRAM来烧写或读取dataflash程序,我之前一直以为romboot的运行过程中只使用内部SRAM,不会用到SDRAM;
烧程序时,romboot先从PC机接收程序文件并放置在SDRAM,再从SDRAM烧写到dataflash;
给PC机上传程序时,先读取dataflash的内容并放置到SDRAM,再从SDRAM上传到PC机;
所以SDRAM很重要,没有SDRAM将不能烧写和读取程序。SAMBA软件默认的配置是32bit的SDRAM,所以换成16bit的SDRAM时,要修改配置。
首先是SDRAM的宽度改为16bit,否则会烧写程序会出错;
再次是dataflash的时钟速率,因为16bit的SDRAM速度比32bit慢,所以romboot跟dataflash通信的速度也要相应的调低,否则烧写和读取都会出错。所以之前出现了“程序烧不进去、烧了at91bootstrap后擦除了应用程序、烧写应用程序发现at91bootstrap也会被损坏、读取的dataflash程序跟烧写进去的程序不一致”...等现象。
在SAMBA软件配置中,9260EK目录下,在SDRAM.tcl,设置AT91C_SDRAMC_DBW_16_BITS来改变SDRAM宽度。在DATAFLASH.tcl,修改variable DATAFLASH_CLK为1000000调低dataflash的操作时钟速率。
从中,我觉得atmel的SAMBA文档应该提到这些问题,就像SDRAM改为16bit,SAMBA配置要做何调整,否则,用户很难定位原因。 |