📄 k9s1208.c
字号:
#include <string.h>
#include "def.h"
#include "option.h"
#include "2410addr.h"
#define TOTAL_READ_BLOCKS 10 //num of blocks removed to sdram
#define K9F5608_IN_USE
#define DOWNLOAD_ADDR_START 0x30000000
#define NF_CMD(cmd) {rNFCMD=cmd;}
#define NF_ADDR(addr) {rNFADDR=addr;}
#define NF_nFCE_L() {rNFCONF&=~(1<<11);}
#define NF_nFCE_H() {rNFCONF|=(1<<11);}
#define NF_RSTECC() {rNFCONF|=(1<<12);}
#define NF_RDDATA() (rNFDATA)
#define NF_WRDATA(data) {rNFDATA=data;}
#define NF_WAITRB() {while(!(rNFSTAT&(1<<0)));} //wait tWB and check F_RNB pin.
// HCLK=100Mhz
#define TACLS 0 //1clk(0ns)
#define TWRPH0 3 //3clk(25ns)
#define TWRPH1 0 //1clk(10ns) //TACLS+TWRPH0+TWRPH1>=50ns
void NF_ReadPage(void);
void NF_Init(void);
void NF_Reset(void);
static volatile U8 *Sdram_Pointer;
static U32 block,page;
//******************************************************************
void K9S1208_LoadImage(void)
{
NF_Init();
Sdram_Pointer = (volatile U8 *)DOWNLOAD_ADDR_START;
for(block=1; block<1+TOTAL_READ_BLOCKS; block++)
for(page=0; page<32; page++)
NF_ReadPage();
}
void NF_ReadPage(void)
{
int i;
U32 blockPage;
U8 ecc0,ecc1,ecc2;
U8 se[16];
blockPage=(block<<5) + (page & 0x1f);
NF_RSTECC(); // Initialize ECC
NF_nFCE_L(); // Chip enable
NF_CMD(0x00); // Read command
NF_ADDR(0); // Column = 0
NF_ADDR(blockPage&0xff); //
NF_ADDR((blockPage>>8)&0xff); // Block & Page num.
#ifndef K9F5608_IN_USE
NF_ADDR((blockPage>>16)&0xff); //for k9f5608, only three adress step needed
#endif
for(i=0;i<10;i++); //wait tWB(100ns)
NF_WAITRB(); // Wait tR(max 12us)
for(i=0;i<512;i++)
{
*Sdram_Pointer++=NF_RDDATA(); // Read one page
}
ecc0=rNFECC0;
ecc1=rNFECC1;
ecc2=rNFECC2;
for(i=0;i<16;i++)
{
se[i]=NF_RDDATA(); // Read spare array
}
NF_nFCE_H();
}
void NF_Reset(void)
{
int i;
NF_nFCE_L();
NF_CMD(0xFF); //reset command
for(i=0;i<10;i++); //tWB = 100ns. //??????
NF_WAITRB(); //wait 200~500us;
NF_nFCE_H();
}
void NF_Init(void)
{
rNFCONF=(1<<15)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0);
// 1 1 1 xxx, r xxx, r xxx
// En ECCR nFCE=H tACLS tWRPH0 tWRPH1
NF_Reset();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -