Sign In

Don't have a Xilinx account yet?

  • Choose to receive important news and product information
  • Gain access to special content
  • Personalize your web experience on Xilinx.com

Create Account

Username

Password

Forgot your password?
XClose Panel
Xilinx Home
Reply
prg
Newbie
prg
Posts: 2
Registered: ‎05-08-2010
0

Microblaze: Boot Program from SDRAM

Hello everybody!!
I spent 3 days on it without success and after it I decided to searching for an help.

I have a Virtex-II system with Microblaze 7.10.d and external SDRAM memory. The hardware and software system correctly working and the usual "hello world" and "blinking leds" programs work properly.

Since I plan to use linux on it, I start preparing a bootloader to be stored into BRAM. In order to perform some test, I prepare two projects in EDK: the bootloader and the SDRAM application. The bootloader waits for a "magic word" (0xDEADBEEF) from PCI bus before starting. From PCI bus I load the second application in SDRAM in the correct location (I create the bin file using mb-objcopy -O binary).
When the program receives the "magic word", the program jump to the SDRAM address. But no console output is visible...I try to manually insert the interrupt/reset/exception vectors but nothing change.

Here's the codes

//BOOTLOADER PROGRAM
#include "xparameters.h"
#include "xbasic_types.h"
#include "xgpio.h"
#include "gpio_header.h"

//====================================================
void (*app_start)();

int main (void) {

   #if XPAR_MICROBLAZE_0_USE_ICACHE
      microblaze_init_icache_range(0, XPAR_MICROBLAZE_0_CACHE_BYTE_SIZE);
      microblaze_enable_icache();
   #endif

   #if XPAR_MICROBLAZE_0_USE_DCACHE
      microblaze_init_dcache_range(0, XPAR_MICROBLAZE_0_DCACHE_BYTE_SIZE);
      microblaze_enable_dcache();
   #endif

        xil_printf("waiting for magic word\n");
        Xuint32 magic_word=0;
        do
        {
        magic_word = XIo_In32(XPAR_PLBV46_LOCAL_BRIDGE_0_BASEADDR+0X10);
        }while(magic_word!=0xDEADBEEF);

        XIo_Out32(XPAR_OPB_GPIO_0_BASEADDR,0xFFFFFFFF);
        xil_printf("magic word received\n");

   #if XPAR_MICROBLAZE_0_USE_DCACHE
      microblaze_disable_dcache();
      microblaze_init_dcache_range(0, XPAR_MICROBLAZE_0_DCACHE_BYTE_SIZE);
   #endif

   #if XPAR_MICROBLAZE_0_USE_ICACHE
      microblaze_disable_icache();
      microblaze_init_icache_range(0, XPAR_MICROBLAZE_0_CACHE_BYTE_SIZE);
   #endif

       app_start = 0x44000000;

        app_start();

 return 0;
}


// SDRAM APPLICATION
#include "xparameters.h"

#include "xbasic_types.h"
#include "xgpio.h"

int main (void) {

   #if XPAR_MICROBLAZE_0_USE_ICACHE
      microblaze_init_icache_range(0, XPAR_MICROBLAZE_0_CACHE_BYTE_SIZE);
      microblaze_enable_icache();
   #endif

   #if XPAR_MICROBLAZE_0_USE_DCACHE
      microblaze_init_dcache_range(0, XPAR_MICROBLAZE_0_DCACHE_BYTE_SIZE);
      microblaze_enable_dcache();
   #endif

        xil_printf("Hello World, I'm the one in the SDRAM!!\n");

   #if XPAR_MICROBLAZE_0_USE_DCACHE
      microblaze_disable_dcache();
      microblaze_init_dcache_range(0, XPAR_MICROBLAZE_0_DCACHE_BYTE_SIZE);
   #endif

   #if XPAR_MICROBLAZE_0_USE_ICACHE
      microblaze_disable_icache();
      microblaze_init_icache_range(0, XPAR_MICROBLAZE_0_CACHE_BYTE_SIZE);
   #endif


   return 0;
}


What's wrong?!? Please help me!!!

Thanks for your attention