[問題]如何增加記憶體?

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

re:[問題]如何增加記憶體?

文章chester » 週四 12月 19, 2002 5:21 pm

saturn 寫:
Anonymous 寫:嗯.....有趣的現象!
現在先來 try 一下是 hardware 有問題呢?? 還是 software (kernel)有bugs??

如果可以的話,先來單純使用 bootloader 來測試 SDRAM .
(確定可以用 bootloader 來 access (讀及寫)所有的 16M/32M SDRAM).
這樣做的目的是想要確認 SDRAM 是正常,且 Memory controller 是正確被
設定的.

如果是沒問題的話,那麼使用這個沒有問題的 bootloader 配合著
linux-2.4.19-rmk4 ,(kernel 部分也請不要修改任何東西,不用傳參數)
看看到底同一份的 kernel 會不會有不同的結果...

----------
--CK


那請問該如何寫測試程式!?用組合語言嗎!?還是用c寫!?
可否明示整個大概的流程!?

謝謝!
Brian


什麼語言寫都可以...
貼一下我曾寫過的範例,可能要稍微修改一下符合你的環境.

代碼: 選擇全部
static void
Memory_Read_Write(void)
{
 unsigned int start,end,total;
 unsigned int counter, *memory_pointer;
 unsigned int value;
 unsigned int err_count=0;
 
 do {   
     Serial_Printf("%s\n\rPlease input memory address to start :",MEMORY_PROMPT);
     start = Serial_Get_Int();
 }while(Verify_Addr(start));
 
 do {
     Serial_Printf("\n\rPleas input end of memory address :");
     end = Serial_Get_Int();
 }while(Verify_Addr(end));
 
 total=(end-start);
 if ((total/1024/1024) > 3)
    {
     Serial_Printf("Sorry it must be in 3MB range for testing....\n\r");
     return;
    }
 Serial_Printf("Write memory from 0x%x to 0x%x and total %dKB\n\r",start,end,(total/1024));
 
 /* Memory write */
 memory_pointer=(unsigned int *)start;
 
 for (counter =0;counter < total ; counter+=4)
    {
     *memory_pointer ++= counter;
     if ((counter % 0x10000 ) ==0)
        {   
         Serial_Printf(".");
        }
    }
 Serial_Printf("\n\rMemory writing OK,then try to testing memory read...\n\r");
 
 /* Memory read */
 memory_pointer = (unsigned int *)start;
  for (counter =0;counter < total;counter +=4)
    {
     value = *memory_pointer;
     if( value != counter)
        {
         Serial_Printf("%x = %x\n",(unsigned int)memory_pointer,value);
         err_count++;
        }
     memory_pointer++;
     if ((counter % 0x10000)==0)   
            Serial_Printf(".");
    }
 
 if(err_count ==0)
    {
     Serial_Printf("\n\rMemory read write test ....OK.\n\r");
    }
 else
    {
     Serial_Printf("\n\rMemory read write test ....FAIL.\n\r");
    }

}


請記得把它寫在 bootloader 中來一起測試,最好可以多試一些memory 區域.
(MMU 請記得關掉,cache 也不要打開..)

如果 32M RAM 都沒問題的話,那就要來好好花時間看看 kernel 部分的 code.
CK.
頭像
chester
版面大總管
版面大總管
 
文章: 56
註冊時間: 週四 11月 14, 2002 9:42 pm
來自: taipei

re:[問題]如何增加記憶體?

文章訪客 » 週二 12月 31, 2002 5:39 pm

chester 寫:請記得把它寫在 bootloader 中來一起測試,最好可以多試一些memory 區域.
(MMU 請記得關掉,cache 也不要打開..)

如果 32M RAM 都沒問題的話,那就要來好好花時間看看 kernel 部分的 code.


經測試SDRAM似乎沒有問題!?我有開MMU和沒有開MMU測試結果都一樣,這我
不知道為什麼!?我測試了一下,記憶體位址0xc200,0000之後就有問題讀寫不一致,這剛好是32M的邊界。它能跨越0Xc100,0000就表示能讀寫超過 16M,這
應表示硬體沒有問題!
謝謝你的幫忙!

Saturn
訪客
 

上一頁

回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客