您好,我使用的Flash型号是SST39VF800A,DSP分配给Flash的地址为0x90000000——0x9FFFFFFF。下面是我的实验过程以及在实验过程中发现的问题。
根据数据手册,flash进行读操作时,片选信号CS_2和输出使能OE均为低,且读操作是在OE的上升沿进行。所以我编写了一个VHDL程序,对“CS_2 OR OE”这个信号的上升沿进行计数。计数器cnt每增加1,就说明进行了一次读操作。这个VHDL程序经过测试是没有问题的。
随后我对DSP进行C语言编程,程序中除了一些初始化功能之外,只有一句Flash_Read(address),作用是读取地址address上的值。通过Quartus II中的SignalTap II来观察cnt的值、地址线与数据线,我发现:
运行程序后,cnt的值加1,地址线与数据线的值均正确。修改address的值,有些address的值会使cnt先加1,过一段时间后,计数器会不断增加。在这个过程中,地址线和数据线的值都与Flash中的值一一对应。且这个“一段时间”或长或短,具有随机性。还有就是,并不是所有address的值都会引起cnt先加1然后不断增加,有一些address的值只会引起cnt加1而不会继续增加。继续增加的只是其中一部分,也具有随机性,毫无规律可言。且后面这些突然出现的读操作也不是一直沿着Flash向后读,有些时候,读着读着就又回到地址0x90000000了,至于读到哪个地址后回到0x90000000也具有随机性。
想问下,这个问题的原因是什么?应该怎么解决?谢谢。