?? ipb_flash.c
字號:
/*****************************************************************************
* File name : FLASH.c
* Description: Including Functions Supporting 8-bit Flash (AT29LV010A)
* FLASH_START 0x90000000
* FLASH_END 0x9007FFFF
* FLASH_ADR1 0x90005555
* FLASH_ADR2 0x90002AAA
******************************************************************************/
#ifndef MASTER_FILE
#define C6711_GLOBALS
#include "includes.h"
#endif
void delay_msec(int );
/*-------------------------------------------------------------------------*
* Function: flash_page_prog()
* Description:
*-------------------------------------------------------------------------*/
void flash_page_prog(char * src_addr, char * dst_addr, int page_size)
{
int i;
char temp,temp1;
char *flash_ptr = dst_addr;
char *src_ptr = src_addr;
*(char *)FLASH_ADR1 = FLASH_KEY1;/*FLASH_ADR1=0x90005555,FLASH_KEY1=0xAA*/
*(char *)FLASH_ADR2 = FLASH_KEY2;/*FLASH_ADR2=0x90002AAA,FLASH_KEY2=0x55*/
*(char *)FLASH_ADR1 = FLASH_KEY3;/*FLASH_KEY3=0xA0 */
*(char *)FLASH_ADR1 = FLASH_KEY3;
for (i=0;i<page_size;i++)
{
*flash_ptr++ = *src_ptr++;
}
temp = *--flash_ptr;
temp1 = *--src_ptr;
delay_msec(500);
/*while ( temp != temp1)
{
temp = *flash_ptr;
}*/
}
/*-------------------------------------------------------------------------*
* Function: flash_erase()
* Description: erase the whole flash
*-------------------------------------------------------------------------*/
void flash_erase()
{
// printf("Begin erase the Flash\n");
*(char *)FLASH_ADR1 = FLASH_KEY1;/*FLASH_ADR1=0x90005555,FLASH_KEY1=0xAA*/
*(char *)FLASH_ADR2 = FLASH_KEY2;/*FLASH_ADR2=0x90002AAA,FLASH_KEY2=0x55*/
*(char *)FLASH_ADR1 = 0x80;
*(char *)FLASH_ADR1 = 0xAA;
*(char *)FLASH_ADR2 = 0x55;
*(char *)FLASH_ADR1 = 0x10;
delay_msec(1000);
}
/*-------------------------------------------------------------------------*
* Function: sector_erase()
* Description: erase one sector;
* each block is 2k words, sector_addr is decided by A11-A17
*-------------------------------------------------------------------------*/
void sector_erase(unsigned int sector_addr)
{
// printf("Begin erase the Flash\n");
*(char *)FLASH_ADR1 = FLASH_KEY1;/*FLASH_ADR1=0x90005555,FLASH_KEY1=0xAA*/
*(char *)FLASH_ADR2 = FLASH_KEY2;/*FLASH_ADR2=0x90002AAA,FLASH_KEY2=0x55*/
*(char *)FLASH_ADR1 = 0x80;
*(char *)FLASH_ADR1 = 0xAA;
*(char *)FLASH_ADR2 = 0x55;
*(char *)sector_addr = 0x30;
delay_msec(10000);
}
/*-------------------------------------------------------------------------*
* Function: block_erase()
* Description: erase one block,
* each block is 32k words, sector_addr is decided by A15-A17
*-------------------------------------------------------------------------*/
void block_erase(unsigned int block_addr)
{
// printf("Begin erase the Flash\n");
*(char *)FLASH_ADR1 = FLASH_KEY1;/*FLASH_ADR1=0x90005555,FLASH_KEY1=0xAA*/
*(char *)FLASH_ADR2 = FLASH_KEY2;/*FLASH_ADR2=0x90002AAA,FLASH_KEY2=0x55*/
*(char *)FLASH_ADR1 = 0x80;
*(char *)FLASH_ADR1 = 0xAA;
*(char *)FLASH_ADR2 = 0x55;
*(char *)block_addr = 0x50;
delay_msec(10000);
}
/*-------------------------------------------------------------------------*
* Function: flash_product_identify()
* Argument: sel==0 return manufacture code
* sel==1 return device code
* Description: Read the product identifier
* Manufacture Code is 1F;Device Code is 35.
*-------------------------------------------------------------------------*/
int flash_product_identify(char sel)
{
int code;
//printf("Flash manufactue code identify\n");
/*Enter Product Identification Mode*/
*(char *)FLASH_ADR1 = FLASH_KEY1;/*FLASH_ADR1=0x90005555,FLASH_KEY1=0xAA*/
*(char *)FLASH_ADR2 = FLASH_KEY2;/*FLASH_ADR2=0x90002AAA,FLASH_KEY2=0x55*/
*(char *)FLASH_ADR1 = 0x90;
delay_msec(200);
/*Read Manufacture Code*/
if(sel==0)
code=(*(char *)(FLASH_START));
/*Read Device Code*/
else if(sel==1)
code=(*(char *)(FLASH_START+0x01));
else
code=0;
/*Exit Product Identification Mode*/
*(char *)FLASH_ADR1 = FLASH_KEY1;
*(char *)FLASH_ADR2 = FLASH_KEY2;
*(char *)FLASH_ADR1 = 0xF0;
delay_msec(200);
return code;
}
/*-------------------------------------------------------------------------*
* Function: flash_CFI_query()
* Argument: info_addr is the address of common flash memory interface
*
information
* Description: Read the characteristics information of the flash
* Including CFI Query Identification String,
* System Interface Information and Device Geometry Information
*-------------------------------------------------------------------------*/
int flash_CFI_query(unsigned int info_addr)
{
int code;
/*Enter Product Identification Mode*/
*(char *)FLASH_ADR1 = FLASH_KEY1;/*FLASH_ADR1=0x90005555,FLASH_KEY1=0xAA*/
*(char *)FLASH_ADR2 = FLASH_KEY2;/*FLASH_ADR2=0x90002AAA,FLASH_KEY2=0x55*/
*(char *)FLASH_ADR1 = 0x98;
delay_msec(20);
code=(*(char *)info_addr);
/*Exit Product Identification Mode*/
*(char *)FLASH_ADR1 = FLASH_KEY1;
*(char *)FLASH_ADR2 = FLASH_KEY2;
*(char *)FLASH_ADR1 = 0xF0;
delay_msec(20);
return code;
}
/* END OF FILE */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -