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.

TMS320F28069: extra byte at the end of SCI bootload process

Part Number: TMS320F28069
Other Parts Discussed in Thread: C2000WARE

When using the SCI bootloader, my customer currently sends a dummy 0x00 byte at the end of each transmit message. Is that byte necessary for receiving the checksum of the message? Based on customer's experience, the 0x00 is necessary to make the bootloader work, but I can't explain why.

Thank you! 

  • Hi Lenio,

    From the standpoint of pure UART, it shouldn't be necessary. But let me check with the bootloader expert to see if it's required for bootloader.

    Regards,

    Vince

  • Hello Lenio,

    The bootloader expert will be on holiday tomorrow, please expect a reply sometime after that.

    Best regards,

    Omer Amir

  • Hello Lenio,

    The bootloader expert will be on holiday tomorrow, please expect a reply sometime after that.

    Best regards,

    Omer Amir

  • Can you please add this question from the customer to the same request:

    I was talking to another person who had worked on this chip back when the dummy byte was needed, and they remember that there was some kind of 2 byte register for getting bytes on the wire, and that you had to fill both for the interrupt to fire.

  • Hi Lenio,

    Sorry for the delayed response on this. I was able to discuss with the bootloader experts and looked at the code. So see responses below.

    When using the SCI bootloader, my customer currently sends a dummy 0x00 byte at the end of each transmit message. Is that byte necessary for receiving the checksum of the message?

    With the SCI bootloader, it only receives packets in groups of 2 bytes at a time (to make one word). So user must send a packet of 2 bytes each time when transmitting.

    EDITED: On top of that, the reason 0x00 is specifically working is because the LAST 2 BYTES of all data blocks being sent is ended by sending two bytes of 0x00. This header block size of 0x00 0x00 signals the end of data.

    So in this case, you'll need to send two bytes at a time for your data.

    Here's a good resource that you're probably aware of already that walks through how the serial flash programmer works: Serial Flash Programming of C2000Tm Microcontrollers

    Regards,

    Vince

  • Hi Lenio,

    I did have one question for you to clarify: are you referring to the ROM bootloader or a flash kernal loader?

    If the latter, my previous reply is not fully applicable.

    Regards,

    Vince

  • This is for flash. I  relayed the information to the customer and I'm waiting for their comments. In the document you suggested, I could not find any information about the termination word 0x0000. Do we have any document that offers details about it?

    Thank you!

  • Hi Lenio,

    If this is for flash, then this is a different issue than what I described. The bootloader code in C2000Ware is where it refers to the termination word of 0x0000.

    I will contact the Flash Kernel expert to help provide a reply based on this.

    Regards,

    Vince

  • Hi Lenio,

    Within the SCI kernel bootloader for this device, SCIA_GetWordData() fetches two bytes from the SCI-A port and puts them together to form a single 16-bit value. 

    The dummy byte 0x00 that is sent after each transmitted message is not necessary to calculate the checksum. 

    Do you have any updates from the customer on why they need to send the dummy byte?

    Thanks and regards,

    Charles