- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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';Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am having the EXACT same problem. Please let me know if you figure it out.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page