高级会员

- 积分
- 641
- 金钱
- 641
- 注册时间
- 2012-11-3
- 在线时间
- 6 小时
|
开发板载一个1m字节的IS62WV51216,用FSMC来进行读写,我现在把数据写入IS62WV51216外面(意思就是没有把数据写在IS62WV51216),然后在读回来,也能得到我们刚刚写入的数据。
假如这个函数是测试外部内存容量的,那么我感觉例程这个 外部内存测试 的函数就有点问题了,如果不是测试容量的,我就多虑了
//外部内存测试(最大支持1M字节内存测试)
void fsmc_sram_test(u16 x,u16 y)
{
u32 i=0,j;
u8 temp=0;
u8 sval=0; //在地址0读到的数据
LCD_ShowString(x,y,239,y+16,16,"Ex Memory Test: 0KB");
//每隔4K字节,写入一个数据,总共写入256个数据,刚好是1M字节
for(i=0;i<1024*1024;i+=4096)
{
FSMC_SRAM_WriteBuffer(&temp,i,1);
temp++;
}
//依次读出之前写入的数据,进行校验
for(i=0;i<1024*1024;i+=4096)
{ j++;
FSMC_SRAM_ReadBuffer(&temp,i,1);
if(i==0)sval=temp;
else if(temp<=sval)break;//后面读出的数据一定要比第一次读到的数据大.
LCD_ShowxNum(x+15*8,y,(u16)(temp-sval+1)*4,4,16,0);//显示内存容量
}
} 这个函数测回来的内存是1024k
假如用这个函数测小于1024k的内存,的到的测试结果应该也是1024k,为什么这么说呢,第一个for循环 循环256次,假如测试小于1024k的内存,那么在循环结束时,有一些数据肯定溢出了(因为内存<1024k,已经满了),那么在通过第二个for循环进行读,也是循环256次,读回来的数据肯定和写入的一样啊,不可能执行else if(temp<=sval)break;,因为溢出的那些数据读回来也是我们写入的数据,那么在进行 LCD_ShowxNum(x+15*8,y,(u16)(temp-sval+1)*4,4,16,0);的时候,无论是不是1024k额内存,显示的数据也是1024k
我把这个函数改为 最大支持2M字节内存测试 时 ,显示的就是2048k,验证了我得想法。 |
|