- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I'm working on cyclone III with the EPCS64, in my Nios code C the time delay of erasing for one sector is
defined at 3 seconds to be sure of the erasing, I would like to know if there is a way to reduce this time of erasing in reading one of the epcs register for example ?Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Here is the piece of C code Nios to erase a sector :
alt_epcs_flash_erase_block(p_epcs_fd,epcs_addr); OSTimeDly(3*OS_TICKS_PER_SEC);- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Assuming it is NOR flash, you repeatedly read the flash's status register until it indicates that the sector is written.
I'd have thought that alt_epcs_flash_erase_block() already did that - IIRC you can't do any other flash cycles until the ease completes (it is a long time since I wrote NOR flash code). You should have the source for the flash functions - look at what they do.- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I've something like that : // polling on the busy bit of the EPCS every 100 ms
// while ((epcs_read_status_register(EPCS_CTRL_BASE_B+0x400) & 0x1) != 0x0) // OSTimeDly(OS_TICKS_PER_SEC/100); Don't know if I've to use it to look each 100 ms if I erased the sector, what is the value send back the alt_epcs_erase_block() ?!- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
FWIW if your board has two 16bit flash chips to generate a 32bit memory device, you must wait for both chips to signal that the erase (or write) has completed - that was the first bug I had to fix in the vendor supplied software for an evaluation board! (vendor and board will remain nameless!!).
I don't beleive there is any reason to do any kind of delay between the reads of the status register. Once the erase/write is complete I think you then write to the device to terminate the erase/write - so this would have to be done inside the erase/write function. (It is over 10 years since I was doing this.) Just look at the source for alt_epcs_erase_block().- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ok, did it and just see that alt_epcs_erase_block() send back 0 when it's ok otherwise another value.
So I did something like this while(alt_epcs_flash_erase_block(p_epcs_fd,epcs_addr)) OSTimeDly(OS_TICKS_PER_SEC); is it good to do this or am I completely wrong- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page