Index: fw/sdk/libyc_encflash_bulk.a
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: fw/sdk/libyc_qspi.a
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: fw/sdk/yc_encflash_bulk.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: fw/sdk/yc_qspi.c
===================================================================
--- /YC3121_SDK/fw/sdk/yc_qspi.c	(revision 842)
+++ /YC3121_SDK/fw/sdk/yc_qspi.c	(working copy)
@@ -68,22 +68,22 @@
 	return result;
 }
 
-#define BLOCK_UNIT  (256)
+#define PAGE_SIZE  (256)
 uint8_t noinline _qspi_flash_write(uint32_t flash_addr,uint32_t len,uint8_t *tbuf)
 {
-    uint8_t buf[BLOCK_UNIT+4] = {0};
-    uint32_t packnum = (len+BLOCK_UNIT-1)/BLOCK_UNIT;
+    uint8_t buf[PAGE_SIZE+4];
+    uint32_t packnum = (len+PAGE_SIZE-1)/PAGE_SIZE;
     uint32_t packlen = 0;
 
     for(uint32_t i=0; i<packnum;i++)
     {
-        packlen = len > BLOCK_UNIT?BLOCK_UNIT:len;
+        packlen = len > PAGE_SIZE?PAGE_SIZE:len;
 
-        ((void(*)(uint8_t *buf,uint8_t cmd,uint32_t addr))0x47e5)(buf,W25X_PAGE_PROGRAM,flash_addr+i*BLOCK_UNIT);
+        ((void(*)(uint8_t *buf,uint8_t cmd,uint32_t addr))0x47e5)(buf,W25X_PAGE_PROGRAM,flash_addr+i*PAGE_SIZE);
 
         for(uint32_t j = 0;j<packlen;j++)
         {
-            buf[4+j] =  tbuf[j+i*BLOCK_UNIT];
+            buf[4+j] =  tbuf[j+i*PAGE_SIZE];
         }
         if(ERROR == ((uint8_t(*)(void))0x47d1)())
                 return ERROR;
@@ -107,6 +107,7 @@
 	__asm("CPSID i");
 	uint8_t tmp = pre_qspi();
 	//uint8_t result=((uint8_t(*)(uint32_t flash_addr, uint32_t len, uint8_t *tbuf))FUNC_QSPI_FLASH_WRITE_ADDR)(flash_addr, len, buf);
+    prefetch(_qspi_flash_write,_qspi_flash_write+0x100);
 	uint8_t result=_qspi_flash_write(flash_addr, len, buf);
 	end_qspi(tmp);
 	__asm("CPSIE i");
@@ -256,7 +257,7 @@
 uint8_t enc_read_flash_fast(uint32_t flash_addr, uint8_t *buf, uint32_t len)
 {
 	__asm("CPSID i");
-	uint8_t result=((uint8_t(*)(uint8_t *dst,uint8_t *src,uint32_t len))(0x1d8+1))(buf,flash_addr,len);//_dmacopy
+	uint8_t result=((uint8_t(*)(uint8_t *dst,uint8_t *src,uint32_t len))(0x1d8+1))(buf,(uint8_t*)flash_addr,len);//_dmacopy
 	__asm("CPSIE i");
 	return result;
 }
@@ -280,39 +281,59 @@
 	((void(*)(void *start_addr, void *end_addr))FUNC_PREFETCH)(start_addr, end_addr);
 }
 
-static void noinline replace_w_data(uint32_t real_addr)
+//erase_len<0x1000
+static void noinline replace_w_data(uint32_t erase_start_addr,int erase_len)
 {
-	uint32_t page_addr = 0;
+	uint32_t sector_addr = 0;
 	uint32_t rem_addr = 0;
-	uint8_t rbuf[4096] ={0};
-	uint8_t times = 0;
-	uint8_t fill_data_nums = 36;
-
-//	uint8_t tmpbuf[4096]={0};
-	page_addr = (real_addr & 0xfffff000);
-	rem_addr = real_addr & 0xfff;
-	times = ((rem_addr + 36) <= 4096) ? 1 : 2;
-	fill_data_nums = (times==2) ? (4096 - rem_addr) : 36;
+	uint8_t rbuf[4096];
+    uint8_t page_buf[PAGE_SIZE+4];
+	uint8_t sector_num = 0;
+	int fill_data_nums;
+    uint32_t page_num;
+    uint32_t page_len = PAGE_SIZE;
+
+	sector_addr = (erase_start_addr & 0xfffff000);
+	rem_addr = erase_start_addr & 0xfff;
+    if((rem_addr + erase_len)==0x1000)//tail not need write
+    {
+        page_num=(rem_addr+PAGE_SIZE-1)/PAGE_SIZE;
+    }
+    else
+    {
+        page_num=4096/PAGE_SIZE;
+    }
+	sector_num = ((rem_addr + erase_len) <= 4096) ? 1 : 2;
+	fill_data_nums = (sector_num==2) ? (4096 - rem_addr) : erase_len;
 
-	while(times--)
+	while(sector_num--)
 	{
 		//step1: sector read
-		//qspi_flash_read(page_addr, rbuf, 4096);
-		((uint8_t(*)(uint32_t flash_addr, uint32_t len, uint8_t *tbuf))FUNC_QSPI_FLASH_READ_ADDR)(page_addr, 4096, rbuf);
-		//step2: sector erase
-		//qspi_flash_sectorerase(page_addr);
-		((uint8_t(*)(uint32_t flash_addr))FUNC_QSPI_FLASH_SECTORERASE_ADDR)(page_addr);
-		//step3: fill page data
+		((uint8_t(*)(uint32_t flash_addr, uint32_t len, uint8_t *tbuf))FUNC_QSPI_FLASH_READ_ADDR)(sector_addr, 4096, rbuf);
+        //step2: fill page data
 		for(int i=0; i < fill_data_nums; i++)
 		{
 			rbuf[rem_addr + i] = 0xff;
 		}
+		//step3: sector erase
+		((uint8_t(*)(uint32_t flash_addr))FUNC_QSPI_FLASH_SECTORERASE_ADDR)(sector_addr);
+
 		//step4:sector write
-		//qspi_flash_write(page_addr, rbuf, 4096);
-		((uint8_t(*)(uint32_t flash_addr, uint32_t len, uint8_t *tbuf))FUNC_QSPI_FLASH_WRITE_ADDR)(page_addr, 4096, rbuf);
-		page_addr += 4096;
+        for(uint32_t i=0; i<page_num;i++)
+        {
+            ((void(*)(uint8_t *buf,uint8_t cmd,uint32_t addr))0x47e5)(page_buf,W25X_PAGE_PROGRAM,sector_addr+i*PAGE_SIZE);//_qspi_flash_precmd
+            for(uint32_t j = 0;j<page_len;j++)
+            {
+                page_buf[4+j] =  rbuf[j+i*PAGE_SIZE];
+            }
+            ((uint8_t(*)(void))0x47d1)();//_qspi_flash_writeenable
+            ((uint8_t(*)(uint8_t *tbuf,uint32_t len))0x468d)(page_buf,page_len+4);//_qspi_write
+            ((uint8_t(*)(void))0x4741)();//_qspi_flash_waitfinish
+        }
+        
+		sector_addr += 4096;
 		rem_addr = 0;
-		fill_data_nums = 36 - fill_data_nums;
+		fill_data_nums = erase_len - fill_data_nums;
 	}
 }
 
@@ -333,15 +354,13 @@
 	            ((real_addr >> 24) & 0xff) << 0;
 	uint8_t tmp = pre_qspi();
 	uint32_t replace_w_data_start_addr=(uint32_t)replace_w_data;
-	prefetch((uint32_t*)replace_w_data_start_addr,(uint32_t*)(replace_w_data_start_addr+178));
-	replace_w_data(real_addr);
+	prefetch((uint32_t*)replace_w_data_start_addr,(uint32_t*)(replace_w_data_start_addr+0x110));
+	replace_w_data(real_addr,36);
 	end_qspi(tmp);
 	//if(!primask)	__asm("CPSIE i");
 	__asm("CPSIE i");
 }
 
-
-
 void enc_erase_flash_32k(uint32_t flash_addr)
 {
  uint8_t num;
@@ -354,9 +373,13 @@
 
  log_addr = log_addr + 0x1000000;
 
- qspi_flash_read(log_addr, back_buf, 0x10);
- qspi_flash_sectorerase(log_addr);
- qspi_flash_write(log_addr, back_buf, 0x10);
+ __asm("CPSID i");
+ uint8_t tmp = pre_qspi();
+ uint32_t replace_w_data_start_addr=(uint32_t)replace_w_data;
+ prefetch((uint32_t*)replace_w_data_start_addr,(uint32_t*)(replace_w_data_start_addr+0x110));
+ replace_w_data(log_addr+0x10,0x1000-0x10);
+ end_qspi(tmp);
+ __asm("CPSIE i");
 
  for (i = (log_addr+0x1000); i < log_addr + 0x9000; i += 0x1000)
  {
@@ -367,14 +390,20 @@
  qspi_flash_sectorerase(log_addr+0x9000);
  memset(back_buf,0xff,0x10);
  qspi_flash_write(log_addr+0x9000, back_buf, 4096);
+ 
+  __asm("CPSID i");
+ tmp = pre_qspi();
+ replace_w_data_start_addr=(uint32_t)replace_w_data;
+ prefetch((uint32_t*)replace_w_data_start_addr,(uint32_t*)(replace_w_data_start_addr+0x110));
+ replace_w_data(log_addr+0x9000,0x10);
+ end_qspi(tmp);
+ __asm("CPSIE i");
 }
 
 uint8_t enc_earse_flash_app_area(uint32_t addr,uint32_t len)
 {
-	uint8_t temp_backup[0x1000]={0};
 	uint32_t earse_start_addr;
 	uint32_t earse_end_addr;
-	int i;
 
 	if(len<=0)
 	{
@@ -392,24 +421,16 @@
 	earse_end_addr|=0x1000000;
 
 	//earse first sector(4k)
-	qspi_flash_read(earse_start_addr,temp_backup,0x10);//cpu 32k head backup(16byte)
-	if(qspi_flash_sectorerase(earse_start_addr)!=SUCCESS)
-	{
-		return ERROR;
-	}
-	if(qspi_flash_write(earse_start_addr,temp_backup,0x10)!=SUCCESS)//write cpu 32k head backup(16byte)
-	{
-		return ERROR;
-	}
+     __asm("CPSID i");
+    uint8_t tmp = pre_qspi();
+    uint32_t replace_w_data_start_addr=(uint32_t)replace_w_data;
+    prefetch((uint32_t*)replace_w_data_start_addr,(uint32_t*)(replace_w_data_start_addr+0x110));
+    replace_w_data(earse_start_addr+0x10,0x1000-0x10);
+    end_qspi(tmp);
+    __asm("CPSIE i");
+    
 	earse_start_addr+=0x1000;
-
-	//backup end
-	qspi_flash_read(earse_end_addr-0x1000,temp_backup,0x1000);//32k end page backup(0x1000)
-	for(int i=0;i<0x10;i++)//clear end_backup first 16 bytes
-	{
-		temp_backup[i]=0xff;
-	}
-
+    
 	//earse head sector(4k)
 	for(;((earse_start_addr%0x8000)!=0);earse_start_addr+=0x1000)
 	{
@@ -420,7 +441,7 @@
 	}
 
 	//earse block(32k)
-	for(;(earse_start_addr+0x8000)<=earse_end_addr;earse_start_addr+=0x8000)
+	for(;(earse_start_addr+0x8000)<=(earse_end_addr-0x1000);earse_start_addr+=0x8000)
 	{
 		if(qspi_flash_blockerase32k(earse_start_addr)!=SUCCESS)
 		{
@@ -429,18 +450,21 @@
 	}
 
 	//earse end sector(4k)
-	for(;earse_start_addr<earse_end_addr;earse_start_addr+=0x1000)
+	for(;earse_start_addr<(earse_end_addr-0x1000);earse_start_addr+=0x1000)
 	{
 		if(qspi_flash_sectorerase(earse_start_addr)!=SUCCESS)
 		{
 			return ERROR;
 		}
 	}
-
-	if(qspi_flash_write(earse_end_addr-0x1000,temp_backup,0x1000)!=SUCCESS)//write cpu 32k end page backup(0x1000)
-	{
-		return ERROR;
-	}
+    //earse last 16 byte
+      __asm("CPSID i");
+    tmp = pre_qspi();
+    replace_w_data_start_addr=(uint32_t)replace_w_data;
+    prefetch((uint32_t*)replace_w_data_start_addr,(uint32_t*)(replace_w_data_start_addr+0x110));
+    replace_w_data(earse_end_addr-0x1000,0x10);
+    end_qspi(tmp);
+    __asm("CPSIE i");
 
 	return SUCCESS;
 }
@@ -507,7 +531,7 @@
     }
 }
 
-#define QSPI_LIB_VERSION 0x00010009
+#define QSPI_LIB_VERSION 0x00010010
 uint32_t qspi_GetVersion(void)
 {
     return QSPI_LIB_VERSION;
Index: fw/sdk/yc_qspi.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
