Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
14 years ago

ALTREMOTE_UPDATE doesn't work with user logic

Hi All,

Cyclone III issue.

I've looked all over for an answer on this. I've written a boot Loader in VHDL which accepts a .rbf file via RS232 with an appended 32-bit CRC to verify a good transfer. I use a 16mBit Serial Flash where I load the file into the upper half and verify the CRC before erasing the application page (in the lower half) and then copying the new application configuration down to the application boot page sector. I access the Flash with a custom Flash driver (also VHDL) by setting the configuration pins to User I/O after configuration (i.e. not using the ASMI mega function). All works well except for the ALTREMOTE_UPDATE mega function. I can set PARAM to "100" and Data_in and start a write which then triggers the busy but when I do a Read the load page is always still Zero. I also never get a valid status read for the reconfiguration cause. I've verified that all else works by just writting the application at address "zero" (factory) and stobing the reconfig pin in the ALTREMOTE_UPDATE function. It comes up and runs regardless of the address I've set prior to re-boot.

Altera's data sheets are pretty much useless. They spend too much effort with examples using NIOS that they forgot to write how anything actual works (i.e. timing, bit defintions, etc.). There is almost no information on how to access the Remote update pins directly with out the mega function.

Any ideas why ALTREMOTE_UPDATE won't work under a simple VHDL state machine. see simple write/read code snip below.

Thanks,

Steve

when SETUP_APPLICATION_ADDRESS =>

if (UPDATE_BUSY = '1') then

UPDATE_HANDLER_SM <= WAIT_APPLICATION_ADDRESS;

else

UPDATE_HANDLER_SM <= SETUP_APPLICATION_ADDRESS;

end if;

PARAM <= "100";

DATA_IN_UPDATE <= "00" & X"20000";

READ_PARAM <= '0';

WRITE_PARAM <= '1';

when WAIT_APPLICATION_ADDRESS =>

if (UPDATE_BUSY = '0') then

UPDATE_HANDLER_SM <= SETUP_CHECK_APPLICATION_ADDRESS;

else

UPDATE_HANDLER_SM <= WAIT_APPLICATION_ADDRESS;

end if;

READ_PARAM <= '0';

WRITE_PARAM <= '0';

when SETUP_CHECK_APPLICATION_ADDRESS =>

if (UPDATE_BUSY = '1') then

UPDATE_HANDLER_SM <= WAIT_CHECK_APPLICATION_ADDRESS;

else

UPDATE_HANDLER_SM <= SETUP_CHECK_APPLICATION_ADDRESS;

end if;

READ_PARAM <= '1';

WRITE_PARAM <= '0';

when WAIT_CHECK_APPLICATION_ADDRESS =>

if (UPDATE_BUSY = '0') then

UPDATE_HANDLER_SM <= LOAD_ADDRESS_DATA;

PARAM <= "111";

else

UPDATE_HANDLER_SM <= WAIT_CHECK_APPLICATION_ADDRESS;

end if;

READ_PARAM <= '0';

WRITE_PARAM <= '0';

2 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    I am having the EXACT same problem. Please let me know if you figure it out.

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    I wrote a state loop that sends the read params from all 4 "param" locations out the RS232 in ascii and figured it out by association.

    Note: Nothing lines up with the data sheet.

    Once you see where stuff is then write the code accordingly.

    It does work well once you get around Altera's misleading data sheets.