TA的每日心情 | 无聊 2020-7-7 14:50 |
---|
签到天数: 284 天 连续签到: 1 天 [LV.8]以坛为家I
|
本帖最后由 xinchao 于 2016-8-26 13:42 编辑
调试STM32时,写了一段测试RAM容量的代码,贴出来大家看看。希望有用,如果你有更好的方法,欢迎分享!
测试过程是这样的;
1.先设定一个容量值。
2.在设定的容量值里,由高地址往低地址依次写入测试数据。
3.再由低地址往高地址依次读出数据进行校验,如果出错,则出错时的地址就是RAM的容量,测试结束;如果没出错则转下一步。
4.增加设定的容量值,转第1步重新测试。
u32 SRAM_Size_Test(void) //外部内存容量测试(最大测试32MB)
{
union{
u8 a[4];
u32 l;
}adv;
u32 add;
u32 dat;
u16 size = 0;
while(size < 0x8000) //最大测试32MB 要测再大的改此值
{
if(size < 0x0800) size += 256; // 2MB内 每次加256KB
else if(size < 0x2000) size += 2048; // 8MB内 每次加2MB
else size += 8192; //32MB内 每次加8MB
add = size * 1024;
dat = 66666;
//------------Write Datas------------
do{
dat += 1234;
add -= 4;
adv.l = dat;
SRAM_WriteBuffer(adv.a, add, 4);
}while(add > 0);
//------------Verify Datas-----------
do{
SRAM_ReadBuffer(adv.a, add, 4);
if(dat != adv.l) break;
add += 4;
dat -= 1234;
}while(add < (size * 1024));
if(add < (size * 1024)) break;
else printf("\r\nSRAM Size %u KB Test OK!", add / 1024);
}
printf("\r\nThe SRAM is %u KB", add / 1024);
return(add / 1024);
}
void FSMC_SRAM_WriteBuffer(u8* pBuffer, u32 WriteAddr, u32 n)
{
for(; n!=0; n--)
{
*(vu8*)(Bank1_SRAM3_ADDR + WriteAddr) = *pBuffer;
WriteAddr++;
pBuffer++;
}
}
void FSMC_SRAM_ReadBuffer(u8* pBuffer, u32 ReadAddr, u32 n)
{
for(; n!=0; n--)
{
*pBuffer++ = *(vu8*)(Bank1_SRAM3_ADDR+ReadAddr);
ReadAddr++;
}
} |
|