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.

TMS320C5535: Booting from an external I2C EEPROM

Part Number: TMS320C5535

I'm trying to program an external I2C EEPROM with a boot image output from code composer studio, but am having a hard time troubleshooting since it's my first time working with boot loaders. I have reviewed SPRABL7D and SPRU280I which gave me a general idea of what to do, but there is no step-by-step guide for my specific case. Here are the steps I've taken so far:

1) I'm trying to make a boot image using the hex55 utility on code composer studio. I tried to follow SPRABL7D and SPRU280I the best I can.

SPRABL7D says "A boot signature to the boot image boot signature is 0x09AA" but I don't know know where to put this boot signature. Please let me know if anything else in the setup is incorrect. 

After these steps, I hook up the C5535 to the EEPROM using I2C (I2C has been verified and is working, so that shouldn't be the problem), but the C5535 does NOT boot up from the EEPROM . Any guidance or advice for what I may have done wrong would be greatly appreciated. I have also attached the .map file for your reference. 

Best, 

Eddie

  • Hello,
    you can take several steps for debugging this and I think the first one should be to check signals with scope.
    Can you check the activity on SCL and SDA pins with scope and give a screenshot?
    Also you should have A0,A1 and A2 connected to ground. Is that so?

    Michail
  • Michail, 

    Thank you for getting back to me. When I turn on the DSP and try to boot from the I2C EEPROM, I see the following signal on the I2C lines:

    YELLOW: Clock line

    BLUE: Data line

    The signals are strange and do not fully go to LOW for some reason.

    I can successfully talk to other I2C slaves when I boot using JTAG, so that leads me to believe it's not a hardware problem. This I2C issue only occurs when I try to boot from the I2C EEPROM. A0,A1, A2 is floating BUT they are internally pulled LOW when left floating. I checked all the other I2C peripherals, and the EEPROM is the only slave with an address of 0x50.

    SPRABL7D says "A boot signature to the boot image boot signature is 0x09AA", where do I set up this boot signature? 

    Best, 

    Eddie

  • Hi Eddie,

    make sure that you're getting SCL and SDA data at the right moment. DSP is trying to boot from many devices at startup and I2C EEPROM is not the first one.

    I suggest to set trigger of the scope on a level near to zero and falling edge and then to wait for valid I2C transaction.

    About the signature 09AA it should be written in first EEPROM cells addr 0x0000and 0x0001. can I take a look at boot image that you're loading in eeprom?

    Even better if you can read already written eeprom with a programmer and get binary from it to see what's inside for real.

    BR

    Michail

  • Michail, 

    So I did as you suggested and the good news is that the DSP does look like its talking to the EEPROM:

    Will the hex55 utility tool add the boot signature in the .hex output file automatically? or does the user have to write to  cell address 0x0000 and 0x0001 manually? 

    This is the process I follow to write/read from the EEPROM using Arduino. I hope it's sufficient and works well for initializing the EEPROM for the DSP. 

    Best, 

    Eddie 

  • Hello,
    sorry for delayed answer. As I see in your attachment there is something wrong with your .HEX file.
    It is a binary file but it should be a specifically formatted text file as described for example here en.wikipedia.org/.../Intel_HEX .
    So the process of creating image file for the eeprom should be wrong. Also you have no signature 0x09AA in it either in binary or text.

    BR
    Michail
  • Michail, 

    I managed to convert the .hex file to a .bin file. I also was able to check it and can confirm that 0x09aa is at the beginning of the .bin file. 

    Sadly, the C5535 doesn't boot up using this image, so something else must be wrong.

    Instead of trying to burn the boot image to the I2C EEPROM using an Arduino, is there a I2C EEPROM programmer that you can recommend? 

    Best, 

    Eddie

  • Hi Eddie,

    if I understand correctly your compiled image is my_app.bin (which looks good at first glance) and read back image is the log file. They are not the same so it is possible that one of the Write/Read operation to the eeprom went bad. To verify what happens for sure the best way is to obtain a classic eeprom programmer. Since this can take some time (delivery, etc) I can recommend using a scope at SDA/SCL and see how long is the communication between DSP and I2C eeprom. If there is a short packet, 5 bytes or so, then for sure DSP is not reading the signature 09AA and stops communication. If you see long transaction ~10ms long or more than the whole program from eeprom should be received and we'll get into further investigation why it is not executed correctly.

    BR,

    Michail

  • Michail, 

    Thank you for your suggestions. I looked at the I2C lines and can see that there is only a short packet transmitted, so the DSP is not reading the EEPROM data. 

    I will order a traditional EEPROM I2C programmer and report back with any issues or findings. 

    Best, 

    Eddie

  • Update:

    May the DSP gods bless those who a traditional EEPROM programmer.

    Using a traditional I2C programmer fixed the issue!

    Best, 

    Eddie

  • Good to hear that you resolved your issue.
    It is always better to work using classic way instead of complicated, not well documented error prone solutions.

    BR
    Michail