📄 main.c
字号:
#include <reg51.h>
#include "mcu_def.h"
#include "sd_reg.h"
#define FL_ALE_SET() DPL = FL_CTRL0; DPH = 0x42; PIOP = 0x87;
#define FL_ALE_CLR() DPL = FL_CTRL0; DPH = 0x42; PIOP = 0x47;
sfr PIOP = 0x98;
sbit psw1 = PSW^1;
void wait_rb(void);
void fl_cmd(unsigned char cmd);
volatile unsigned char xdata fl_data _at_ 0x7f00;
volatile unsigned char xdata ff_data _at_ 0x8f00;
//flash reg
volatile unsigned char xdata fl_CTRL0 _at_ 0x4200;
volatile unsigned char xdata fl_CTRL1 _at_ 0x4201;
//dma2
volatile unsigned char xdata dma2_LEN0 _at_ 0x4010;
volatile unsigned char xdata dma2_LEN1 _at_ 0x4011;
volatile unsigned char xdata dma2_A0 _at_ 0x4012;
volatile unsigned char xdata dma2_A1 _at_ 0x4013;
volatile unsigned char xdata flash_LOG_A0 _at_ 0x4208;
volatile unsigned char xdata flash_LOG_A1 _at_ 0x4209;
volatile unsigned char xdata flash_LOG_A2 _at_ 0x420a;
volatile unsigned char xdata flash_LOG_A3 _at_ 0x420b;
volatile unsigned char xdata flash_LOG_A4 _at_ 0x420c;
volatile unsigned char xdata flash_LOG_A5 _at_ 0x420d;
volatile unsigned char xdata *p;
int i;
main()
{
unsigned char n1,n2,n3,n4,n5,status,ram_data;
for (i=0,p = 0; i<512; i++,p++)
*p = i + 1;
for (i=0,p = 0; i<512; i++,p++)
{
ram_data = *p;
i = i;
}
fl_CTRL1 = 0x0c;
fl_CTRL0 = 0x3e;
wait_rb();
//read ID
fl_cmd(0x90);
FL_ALE_SET();
fl_data = 0X00;
FL_ALE_CLR();
ff_data = 0x00;
n1 = fl_data;
ff_data = 0x00;
n2 = fl_data;
ff_data = 0x00;
n3 = fl_data;
ff_data = 0x00;
n4 = fl_data;
ff_data = 0x00;
n5 = fl_data;
//ERASE FLASH
fl_cmd(0x60);
FL_ALE_SET();
fl_data = 0X00; //ROW ADDR1
ff_data = 0x00;
fl_data = 0X00; //ROW ADDR2
ff_data = 0x00;
fl_data = 0X00; //ROW ADDR3
ff_data = 0x00;
FL_ALE_CLR();
fl_cmd(0xD0);
wait_rb();
//read status
fl_cmd(0x70);
status = fl_data;
flash_LOG_A0 = 0x11;
flash_LOG_A1 = 0x22;
flash_LOG_A2 = 0x33;
flash_LOG_A3 = 0x44;
flash_LOG_A4 = 0x55;
flash_LOG_A5 = 0x66;
//write flash
fl_cmd(0x80);
FL_ALE_SET();
fl_data = 0X00; //column ADDR1
ff_data = 0x00;
fl_data = 0X00; //column ADDR2
ff_data = 0x00;
fl_data = 0X00; //ROW ADDR1
ff_data = 0x00;
fl_data = 0X00; //ROW ADDR2
ff_data = 0x00;
fl_data = 0X00; //ROW ADDR3
ff_data = 0x00;
FL_ALE_CLR();
DPL = FL_CTRL1;
DPH = 0x42;
PIOP = RW_ECC_set;
DPL = FL_CTRL1;
DPH = 0x42;
PIOP = CAL_LOG_set;
dma2_LEN0 = 0x80;
dma2_LEN1 = 0;
dma2_A0 = 0;
dma2_A1 = 0;
DPL = DMA2CTRL;
DPH = 0x40;
PIOP = DMA_SEND_set;
DPL = DMA2CTRL;
DPH = 0x40;
PIOP = DMA_START_set;
//ecc control
DPL = ECC_CTRL;
DPH = 0x42;
PIOP = ECC_CLR_set;
DPL = ECC_CTRL;
DPH = 0x42;
PIOP = ECC_GEN_set;
//start flash write
DPL = FL_CTRL0;
DPH = 0x42;
PIOP = FL_WRN_clr;
//wait for DMA done
DPL = DMA2STATUS;
DPH = 0x40;
PIOP = DMA_DONE_test;
while (!psw1)
PIOP = DMA_DONE_test;
//wait for flash-write done
DPL = FL_STATUS;
DPH = 0x42;
PIOP = RW_DONE_test;
while (!psw1)
PIOP = RW_DONE_test;
//stop flash write
DPL = FL_CTRL0;
DPH = 0x42;
PIOP = FL_WRN_set;
DPL = ECC_CTRL;
DPH = 0x42;
PIOP = ECC_GEN_clr;
fl_cmd(0x10);
wait_rb();
fl_cmd(0x70);
status = fl_data;
for (i=0; i<512; i++);
//read flash
fl_cmd(0x00);
FL_ALE_SET();
fl_data = 0X00; //column ADDR1
ff_data = 0x00;
fl_data = 0X00; //column ADDR2
ff_data = 0x00;
fl_data = 0X00; //ROW ADDR1
ff_data = 0x00;
fl_data = 0X00; //ROW ADDR2
ff_data = 0x00;
fl_data = 0X00; //ROW ADDR3
ff_data = 0x00;
FL_ALE_CLR();
fl_cmd(0x30);
wait_rb();
dma2_LEN0 = 0x80;
dma2_LEN1 = 0;
dma2_A0 = 0x90;
dma2_A1 = 0;
DPL = DMA2CTRL;
DPH = 0x40;
PIOP = DMA_SEND_clr;
DPL = DMA2CTRL;
DPH = 0x40;
PIOP = DMA_START_set;
//ecc control
DPL = ECC_CTRL;
DPH = 0x42;
PIOP = ECC_CLR_set;
DPL = ECC_CTRL;
DPH = 0x42;
PIOP = ECC_DEC_set;
//start flash write
DPL = FL_CTRL0;
DPH = 0x42;
PIOP = FL_RDN_clr;
//wait for DMA done
DPL = DMA2STATUS;
DPH = 0x40;
PIOP = DMA_DONE_test;
while (!psw1)
PIOP = DMA_DONE_test;
//wait for flash-write done
DPL = FL_STATUS;
DPH = 0x42;
PIOP = RW_DONE_test;
while (!psw1)
PIOP = RW_DONE_test;
//stop flash write
DPL = FL_CTRL0;
DPH = 0x42;
PIOP = FL_RDN_set;
DPL = ECC_CTRL;
DPH = 0x42;
PIOP = ECC_DEC_clr;
for (i=0,p = 0x0090; i<512; i++,p++)
{
ram_data = *p;
i = i;
}
while(1);
}
void wait_rb(void)
{
DPL = FL_STATUS;
DPH = 0x42;
PIOP = FL_RB0_test;
while (!psw1)
PIOP = FL_RB0_test;
}
void fl_cmd(unsigned char cmd)
{
DPL = FL_CTRL0;
DPH = 0x42;
PIOP = FL_CLE_set;
fl_data = cmd;
DPL = FL_CTRL0;
DPH = 0x42;
PIOP = FL_CLE_clr;
}
/*
void fl_ale_set(void)
{
DPL = FL_CTRL0;
DPH = 0x42;
PIOP = FL_CLE_set;
}
void fl_ale_clr(void)
{
DPL = FL_CTRL0;
DPH = 0x42;
PIOP = FL_ALE_clr;
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -