Nios® V/II Embedded Design Suite (EDS)
Support for Embedded Development Tools, Processors (SoCs and Nios® V/II processor), Embedded Development Suites (EDSs), Boot and Configuration, Operating Systems, C and C++

Nios II erase sector

Altera_Forum
名誉分销商 II
1,727 次查看

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 ?
0 项奖励
5 回复数
Altera_Forum
名誉分销商 II
601 次查看

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);
0 项奖励
Altera_Forum
名誉分销商 II
601 次查看

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.
0 项奖励
Altera_Forum
名誉分销商 II
601 次查看

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() ?!
0 项奖励
Altera_Forum
名誉分销商 II
601 次查看

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().
0 项奖励
Altera_Forum
名誉分销商 II
601 次查看

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
0 项奖励
回复