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.

differences between TMS320C6678 Silicon Rev 1.0 and Silicon Rev 2.0 ?

Other Parts Discussed in Thread: TMS320C6678

Hi

      Could anyone tell me the differences between TMS320C6678 Silicon Revision 1.0 and Silicon  Revision 2.0?
I have found some information in SPRZ334E that the revision of C66x CorePacis is 1.0 in Silicon Rev. 1.0 and
the revision of C66x CorePacis is 2.0 in Silicon Rev. 2.0. What's the difference between two revision C66x CorePacis ?
Are there any other extra differences between TMS320C6678 Silicon Revision 1.0 and Silicon Revision 2.0 ? Do these
differences have impact on my own software design or hardware design? By now i have encounter some questions :

 I have two TMS320C6678 boards, one is TMDXEVM6678LE Rev. 1.0 with IBL version 1.0.0.4 and the other one is TMDSEVM6678LE Rev.3B with IBL version
1.0.0.16 . When i write IBL 1.0.0.4 to the E2PROM of TMDXEVM6678LE Rev 1.0, the device can boot successfully, but when i write the same IBL to TMDSEVM6678LE Rev.3B,
the DSP can't boot. Then i print some information through the uart . Find that the 1st stage of IBL operates failured. I change the IBL source code  and rewrite it to
E2PROM after rebuild it. The result is that the 1st stage of IBL runs successfully, but my application program still boots failure. I guess the problem occurs in the second
stage of IBL. By comparing the two version IBL, I find too many differences. Does the IBL 1.0.0.16 backward compatible to old release ? Does other software have the
same problem ?

Thanks

  • The Errata - SPRZ334E, that you referenced details the differences.  Functionally from your SW standpoint, they should be the same, with some of the previous errata advisories having been fixed.  If existing workarounds were in place for errata's that have been fixed, they should still work (i.e. not required to revert back to a non-workaround solution.)

    This sounds like it may be a board or configuration on the board issue with the boot.  I'm going to ask one of our boot experts to address this.

    Best Regards,
    Chad

  • Can you read the devstat value in both the cases. One key difference in the EVM is that the switches used for boot setting are not placed in the same way. For example in the EVM for rev1.0 the SW3, SW4, SW5 and SW6 are aragened left to right and in rev3.0 it is from right to left.

    Thanks,

    Arun.

  • Hi ArunMani,

      I've checked the DIP switchs and confirm that they do not have a problem. In fact the problem is : the value of C6678 JTAGID Register is 1009E02Fh.  In the first stage of IBL, the program will read the JTAGID register to confirm from where to boot. The source code is  " bootDevice = deviceReadBootDevice()" , in the main function of iblinit.c.

    In IBL version 1.0.0.16, some lines of deviceReadBootDevice() are :

    ...

    v = *((Uint32 *)DEVICE_JTAG_ID_REG);                                                                // the result is  v == 1009E02Fh
        v &= DEVICE_JTAG_ID_MASK;   //#define DEVICE_JTAG_ID_MASK         0x0fffffff /* exclude variant bits(31:28) */  in Target.h

        if (v == DEVICE_C6678_JTAG_ID_VAL)                                                                                //#define DEVICE_C6678_JTAG_ID_VAL   0x9e02f      /* C6678 */  in Target.h
            params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6678;
        else if (v == DEVICE_C6670_JTAG_ID_VAL)
            params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6670;
        else
     params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6657;  

        switch (params->boot_mode)  {

    #ifndef EXCLUDE_I2C
            case BOOT_MODE_I2C:   w = BOOT_DEVICE_I2C;
                                  break;

    ...

    return w;

     

    In IBL version 1.0.0.4, some lines of deviceReadBootDevice() are :

    ...

     v = *((Uint32 *)DEVICE_JTAG_ID_REG);                                                                                   //the result is v == 1009E02Fh


        if (v == DEVICE_C6618_JTAG_ID_VAL)                                                                                     #define DEVICE_C6618_JTAG_ID_VAL    0x9e02f     /* C6678 */ in Target.h
            params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6618;
        else
            params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6616;

        switch (params->boot_mode)  {

    #ifndef EXCLUDE_I2C
            case BOOT_MODE_I2C:   w = BOOT_DEVICE_I2C;
                                  break;