Post Go back to editing

Help on ADSP-21489 firmware update via RS-232

Hi,

We are looking for some assistance with adding the ability to update our

ADSP-21489 firmware via RS-232. The fundamentals of what we want to do is

discussed in Application Note EE-345, and we have played around with this a

little bit, but never got it to work completely. We can continue to puzzle

through this ourselves, but we'd rather find a consultant who can help add

this ability into our existing software and we'll be happy to pay someone to

help in this regard.

If you have experience in this area and have some extra time on your hands,

and want to earn some extra money in your pocket, please contact me.

(Ideally the forum has some private messaging system, otherwise you could

leave an email address. Let me know your thoughts...)

Thank you,

Marc

Parents
  • Hi Marc,

    We simply implemented this logic:

    1. Enter update mode

    The host sends #u* to the DSP. The host waits for confirm string #u0*. The DSP enters update mode, ignoring other commands unrelated to the process.

    2. Erase flash command

    The host sends @E* to the DSP. The DSP erases the first a few sectors (for code). Data sectors are not affected. After finished, the DSP returns @u0* if succeed, @u1* if some error occurs, #u2* if operation timeout (10s). So the host can be able to proceed.

    3. Send data

    The host sends the data line by line from the hex ldr file in the following format:

    @:[hex line]*

    the DSP proceed the addressing and check sum of the line and if correct, write the data into the addresses. It returns @u0* for succeed, @u1* for fail. The host can re-send the failed line again.


    this will be sent line by line until the EOF of the file. And then the DSP exits the update mode.

    The user can update again without power cycling, in case he sends a wrong file.

    4. Time out

    If the DSP did not receive any command or data for longer than a certain time (10s), it will send an warning #u2* and exit the update mode. The host could show error messages and the user can try again.

    The best method is loading the whole ldr into memory, check the integrity and then flash it. Or write a loader. Our method is just a simple lazy one for emergency field debugging..

    Hope this helps.

    Rongxi

Reply
  • Hi Marc,

    We simply implemented this logic:

    1. Enter update mode

    The host sends #u* to the DSP. The host waits for confirm string #u0*. The DSP enters update mode, ignoring other commands unrelated to the process.

    2. Erase flash command

    The host sends @E* to the DSP. The DSP erases the first a few sectors (for code). Data sectors are not affected. After finished, the DSP returns @u0* if succeed, @u1* if some error occurs, #u2* if operation timeout (10s). So the host can be able to proceed.

    3. Send data

    The host sends the data line by line from the hex ldr file in the following format:

    @:[hex line]*

    the DSP proceed the addressing and check sum of the line and if correct, write the data into the addresses. It returns @u0* for succeed, @u1* for fail. The host can re-send the failed line again.


    this will be sent line by line until the EOF of the file. And then the DSP exits the update mode.

    The user can update again without power cycling, in case he sends a wrong file.

    4. Time out

    If the DSP did not receive any command or data for longer than a certain time (10s), it will send an warning #u2* and exit the update mode. The host could show error messages and the user can try again.

    The best method is loading the whole ldr into memory, check the integrity and then flash it. Or write a loader. Our method is just a simple lazy one for emergency field debugging..

    Hope this helps.

    Rongxi

Children
  • Hi, phychem

    Now, i am doing a firmware update task with ADSP-SC587.

    I think we have the similar process for the update through RS-232: update mode, erase command, flash command, reset command, etc. And for now, i  stuck by the step " erase the flash memory", i wondered if u used the ADI API function "SPI‘ like adi_spi_ReadWrite() to do the erase process .

    I know, we use the different DSP, but i think the erease funciton of the ADI are similar

    Could you please kindly share your idea? thanks