3. 2009-2-25 23:20:24
1)
这几天一直在测试一款芯片的基本功能函数,发现一个奇怪的问题.对其内部寄存器的读写都是正确的,但对其内部MEMORY的读写验证是不正确的,通过对一些指令上的变动,如用固定地址或用变量指针,还有对SPEC中关于MEMORY描述中的部分,做了大量的功能,都没有结果.
不能验证读写数据, 关键是不知道是写错了,还是读错了.因为读出来的全部是0, 试着写了一个测试函数.
write_register32(0x2000, 0x01000680);
write_register32(0x2004, 0x00120000);
write_register32(HC_REG_MEMORY, 0x2000);
然后用D 0X82002000来读取,有意想不到的效果,读出来的数据有80, 06, 80, 06这样的数据,说明写对了.以上多个结果相同,说明读时加了地址,这不是主要问题.
现在是为何实现读取不成功了,对照SPEC中的时序,发现并没有什么差错.用示波器来观测用D命令为何能读到数据,比较一下, 在CS为LOW时,D命令的RD信号来完整,来用程序读取时,在CS为LOW之前, RD前面也有一个为低的脉冲,然后有一个尖脉冲.
如何去掉这个脉冲,我想到了BLS#信号,查找相关资料,不管RBLE为0或1,RD信号是一直有效的,所以不能把BLSN连接到RD上去,另外看了一下,BLS1和RD上的信号,以上的尖脉冲是相同的.
能用电容来滤了吗?我找了一个47PF电容来试,测试效果不行.这种做法,也不合实际,系统中还有SDRAM,FLASH,都用这个RD信号,对其它芯片是否有影响.这不是好办法.
我想到了一个OR门路,但我真的需要这样做吗?要背一块小板,这是最后的办法了.
查看BCFG的资料,突然想起,在二个BANK之间切换,是可以有一个延时的.通过这个字节的低4位来设置,马上测试,把这个改为15,一下子就看到效果了,这个尖脉冲不见了.
现在终于可以看到读写正确的数据了,太高兴了.困了几天的问题解决了.接下来,开始做组织数据了.
2)这几天的测试,也有一些其它问题.以前装的MDK 2.25,只要一加载有MACRO的汇编文件时,应自动关掉.重新安装了MDK 3.22版,问题解决. 3.22版似乎稳定一些,但不支持ULINK,需要ULINK2才可以,ULINK的驱动可以用3.22中的,在DEBUG框中不能出现不能调试字样.
3)关于BLS#的连接,一直没有找到好的资料,直到梅工给我传了一些扫描文件,才真正理解了.
二句话:写访问时,RBLE=1,WE有效(低电平),读访问时,RBLE=1,BLS#有效(低电平)
文章评论(0条评论)
登录后参与讨论