This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Slave I2C secondary boot



We are designing a board with multiple C6678 devices and an ARM controller.  We would like to boot the C6678s using secondary
boot over Ethernet after configuring the boot parameter table using I2C from the ARM. 

It seems the most straightforward way to do this would be to configure the C6678 devices for slave I2C boot and download the new BP
table to each device.  However according to sprugy5b and a reading of the ROM BL code slave I2C mode does not allow this, only boot
tables or boot configuration tables.  Which way would be better if we want to do this without an IBL:

 1)  Boot initially in slave I2c mode, and write the memory locations where the BP table resides using a boot  configuration table.
    
 2)  Boot initially in master I2C mode with the ARM device configured as a "virtual EEPROM" as has been suggested
     on another question thread.
    
Or is there another way to modify the boot parameter table in I2C slave mode?  Thanks.

  • Hi Gary,

    In addition to modifying the boot parameter table for ethernet boot, you will  need to pass a boot table for a small secondary bootloader loaded at the c_int00 symbol that will allow you to re-enter boot to boot over Ethernet. This is how I visualize the boot process:

    1. Boot ARM initially with I2C master boot and load the new parameter table and secondary loader on the DSP.

    2. Secondary boot loader will force the DSP to re-enter into booting over ethernet with the parameters specified in the modified boot parameter table.

    Please let me know if there are any follow up questions.

    Regards,

    Rahul

  • Thanks, Rahul.  Here are some follow-up questions:

    1)  Do we need a secondary bootloader if we use I2C master boot?  My understanding was that you could perform a secondary ethernet boot directly from the boot ROM if you passed a new boot parameter table using I2C master boot.

    2) If we do need a secondary bootloader can this also be done with I2C slave boot?  Can the new boot parameter table be passed in the secondary bootloader?

    - Gary

  • Hi Gary,

    On the I2C master the boot parameter mode has been tested so you wouldn`t need a secondary bootloader. You can perform a secondary boot over Ethernet directly from the boot ROM using I2C Master boot. We don`t have an example that has this feature tested with an I2C slave so my recommendation was to do it using a secondary bootloader.

    Yes new boot parameter table can be passed in secondary bootloader. The pseudo code for the secondary bootloader would appear as follows:

    #include tiboot.h

    const BOOT_PARAMS_ETHERNET_T  params = {
    ...............................

    ..............................

                
    };    
     
    #pragma DATA_SECTION(boot_params, ".bootParams")
    BOOT_PARAMS_T boot_params;

    main()
    {     
        void (*fcn)(void);

        /* Copy the boot parameter table defined above into place over the existing boot parameter table is located  */
        memcpy (&boot_params, &params, sizeof(params));
        
        /* Re-enter the boot rom to allow the modified boot parameter table to be used for boot */
        fcn = (void (*)(void))&romtBootReentry_addr;
        (*fcn)();
    }

    Regards,

    Rahul