自己用6701做的产品,由于程序太大,内部的RAM空间不足,计划使用外部RAM进行调试。
根据MAP文件知道.text段约占空间50k,这部分在CMD文件中依然配置在6701内部的RAM中运行,.cinit段/.const段/.far段,这几部分每一段都超过90k因此计划放在外部RAM。
目前的硬件环境是在CE1空间上连接了一片512k×8位的SRAM,在GEL文件中的emif_init中对CE1进行配置,参数为0xffffff0f,在load program时总提示我校验失败。
我查了一下6701的文档,希望确认一件事情,是不是6701的CE1空间只能支持8位和16位的读操作,而对于写操作只能支持32位,因此使用8位的片外SRAM是不能进行程序运行的。
Tony Tang:
yan zou我查了一下6701的文档,希望确认一件事情,是不是6701的CE1空间只能支持8位和16位的读操作,而对于写操作只能支持32位,因此使用8位的片外SRAM是不能进行程序运行的。
接几位的内存芯片,就在EMIF的寄存器里做相应的配置,无论接几位的内存芯片,对程序中的读写操作位数没有限制,可以按任意类型访问。
yan zou:
回复 Tony Tang:
通过片内ram的仿真程序对片外ram进行读写测试可以确定外部ram的硬件设计是没问题的,但是通过仿真器load程序就会提示检验错误
Tony Tang:
回复 yan zou:
512K能有你上面图中的地址范围吗?512K=0x80000, 不管是map0还是map1,好像都到不了0x0160 10B0吧
yan zou:
回复 Tony Tang:
我的ram连接在ce1上,map1模式,同时ce1上还连接有一个flash,通过地址a21选择,当a21=1时选择ram,因此起始地址为0x0160 0000
Tony Tang:
回复 yan zou:
建议用示波器看看信号质量如何。我估计是信号质量不好造成的数据读写不稳定。
顺便问一下,跟据map文件里代码安排顺序,目前显示的是偏移10B0了,应该不是一开始下载到外部RAM部分就出问题了吧。
好奇的问一下,为什么要用C6701?
yan zou:
回复 Tony Tang:
是cinit段的起始位置,我做过验证,通过cmd文件无论cinit段加载到外部ram的任何地址都会提示校验失败,假如将该段放在内部ram,程序加载能顺利通过,但是程序会跑飞,全部加到内部则没问题。
选择6701是很无奈的选择,产品的使用环境只有6701合适
yan zou:
回复 Tony Tang:
另外我对您说的信号质量问题还有点疑问,我写了一段调试程序对外部ram进行了读写比对测试,方式是正片写一遍,整片读一遍,再进行读写比对,这个测试是没问题的。难道用仿真器对ram的操作会有所区别吗?
附件是我查阅的emif文档的一段资料,想了解下正确的理解。
yan zou:
回复 Tony Tang:
每次连接仿真器ce1寄存器的值始终是0xffff3f03,无法通过gel文件修改,同时利用ccs的memory窗口无法修改片外ram地址中的数值
yan zou:
回复 Tony Tang:
不知道这样理解对不对,在仿真器连接时没有对emif接口进行有效的初始化,因此向外部ram加载程序失败了。
如果这个想法正确,应该怎样利用gel文件有效的初始化emif接口
Tony Tang:
回复 yan zou:
yan zou另外我对您说的信号质量问题还有点疑问,我写了一段调试程序对外部ram进行了读写比对测试,方式是正片写一遍,整片读一遍,再进行读写比对,这个测试是没问题的。难道用仿真器对ram的操作会有所区别吗? 附件是我查阅的emif文档的一段资料,想了解下正确的理解。
即使这样读写没问题,也不能完全肯定信号质量没问题,因为通常这种测试是for循环测试,访问速度很慢。
当然啦,根据你后面说的,在CCS里都看不了这块内存空间,那应该是没初始化好吧。
上面这个图想问啥?