📄 flash.c
字号:
/*C*************************************************
name : flash_drv.c
author : nauy
date : 7/05/07
***************************************************/
#include "flash.h"
Byte flash_sector =0;
Byte flash_page =0;
Byte flash_block =0;
Byte flash_zone =0;
NF_CS_OFF;
Byte nf_sector_addr[3]={0,0,0};
void Nf_send_command(command)
{ACC=NF_CMD_LATCH_ENABLE_ADD;
P2=ACC;
ACC=command;
P0=ACC;
}
void Nf_send_address(address)
{ACC=NF_ADD_LATCH_ENABLE_ADD;
P2=ACC;
ACC=address;
P0=ACC;
}
void Nf_write_open_B_area(address_sector, nb_byte)
{
Nf_send_command (NF_READ_B_AREA_CMD);
Nf_send_command (NF_SEQUENTIAL_DATA_INPUT_CMD);
Nf_send_address ( nb_byte );
Nf_send_address ( ((Byte*)&address_sector)[3] );
Nf_send_address ( ((Byte*)&address_sector)[2] );
Nf_send_address ( ((Byte*)&address_sector)[1] );
Nf_send_command (NF_READ_B_AREA_CMD);
}
void Nf_write_open_A_area(address_sector, nb_byte)
{
Nf_send_command (NF_READ_A_AREA_CMD);
Nf_send_command (NF_SEQUENTIAL_DATA_INPUT_CMD);
Nf_send_address ( nb_byte );
Nf_send_address ( ((Byte*)&address_sector)[3] );
Nf_send_address ( ((Byte*)&address_sector)[2] );
Nf_send_address ( ((Byte*)&address_sector)[1] );
Nf_send_command (NF_READ_A_AREA_CMD);
}
void Nf_write_open_C_area(address_sector, nb_byte)
{
Nf_send_command (NF_READ_C_AREA_CMD);
Nf_send_command (NF_SEQUENTIAL_DATA_INPUT_CMD);
Nf_send_address ( nb_byte );
Nf_send_address ( ((Byte*)&address_sector)[3] );
Nf_send_address ( ((Byte*)&address_sector)[2] );
Nf_send_address ( ((Byte*)&address_sector)[1] );
Nf_send_command (NF_READ_C_AREA_CMD);
}
void Nf_read_open_A_area(address_sector, nb_byte)
{
Nf_send_command (NF_READ_A_AREA_CMD);
Nf_send_address ( nb_byte );
Nf_send_address ( ((Byte*)&address_sector)[3] );
Nf_send_address ( ((Byte*)&address_sector)[2] );
Nf_send_address ( ((Byte*)&address_sector)[1] );
Nf_wait_busy;
}
void Nf_read_open_B_area(address_sector, nb_byte)
{
Nf_send_command (NF_READ_B_AREA_CMD);
Nf_send_address ( nb_byte );
Nf_send_address ( ((Byte*)&address_sector)[3] );
Nf_send_address ( ((Byte*)&address_sector)[2] );
Nf_send_address ( ((Byte*)&address_sector)[1] );
Nf_wait_busy;
}
void Nf_read_open_C_area(address_sector, nb_byte)
{
Nf_send_command (NF_READ_C_AREA_CMD);
Nf_send_address ( nb_byte );
Nf_send_address ( ((Byte*)&address_sector)[3] );
Nf_send_address ( ((Byte*)&address_sector)[2] );
Nf_send_address ( ((Byte*)&address_sector)[1] );
Nf_wait_busy;
}
int flash_write_address()
{
//
Nf_CS_ON;
if(flash_sector<256)
Nf_write_open_A_area(nf_sector_addr,flash_sector);
else if(flash_sector<512)
Nf_write_open_B_area(nf_sector_addr,flash_sector);
else if(flash_sector<528)
Nf_write_open_C_area(nf_sector_addr,flash_sector);
//
flash_sector++;
//
if(flash_sector==528)
{
flash_page++;
flash_sector=0;
}
if(flash_page==32)
{
flash_sector=0;
flash_page=0;
flash_block++;
}
if(flash_block==1024)
{
flash_sector=0;
flash_page=0;
flash_block=0;
flash_zone++;
}
if(flash_zone>4)
return(FALSE);
return(TRUE);
//
nf_sector_addr[3]=flash_page;
nf_sector_addr[2]=flash_block;
nf_sector_addr[1]=flash_zone;
}
void flash_write(Uchar idata *p)
{
Nf_CS_ON;
flash_write_address();
Nf_send_command(NF_SEQUENTIAL_DATA_INPUT_CMD);
Nf_wait_busy;
ACC=NF_ADDRESS_CMD_DATA;
P2=ACC;
Nf_wait_busy;
ACC=*p;
P0=ACC;
Nf_send_command(NF_PAGE_PROGRAM_CMD);
Nf_wait_busy;
Nf_CS_OFF;
}
int flash_read_address()
{
//
Nf_CS_ON;
if(flash_sector<256)
Nf_read_open_A_area(nf_sector_addr,flash_sector);
else if (flash_sector>256)
Nf_read_open_B_area(nf_sector_addr,flash_sector);
else if (flash_sector<528)
Nf_read_open_C_area(nf_sector_addr,flash_sector);
//
flash_sector++;
//
if(flash_sector==528)
{
flash_page++;
flash_sector=0;
}
if(flash_page==32)
{
flash_sector=0;
flash_page=0;
flash_block++;
}
if(flash_block==1024)
{
flash_sector=0;
flash_page=0;
flash_block=0;
flash_zone++;
}
if(flash_zone>4)
return(FALSE);
return(TRUE);
//
nf_sector_addr[3]=flash_page;
nf_sector_addr[2]=flash_block;
nf_sector_addr[1]=flash_zone;
}
void flash_read(Uchar idata *p)
{
Nf_CS_ON;
flash_read_address();
ACC=NF_ADDRESS_CMD_DATA;
P2=ACC;
while(!NF_RD_BUSY);
ACC=P0;
*p=ACC;
while(!NF_RD_BUSY);
Nf_CS_OFF;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -