Flash.c
上传用户:xhjmsc
上传日期:2019-09-13
资源大小:389k
文件大小:9k
- //Flash model HY27UF081G2M
- #include "includeH.h"
- //***********************************************************************************
- /*
- void FlashPageCopy(void)
- {
- unsigned char ucFlashSttsOverflowCnt=0;
- COMMAND_VAL=0x00; //#0X00 //00H READ1 0-527BYTE
- COMMAND_LATCH_INTO();
- //ADDRESS
- ADDRESS_VALUE=COLUMN_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=COLUMN_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
- FLASH_CON_PORT_OUT &=~ ALE;
-
- COMMAND_VAL=0X35;
- COMMAND_LATCH_INTO();
- //ATcmdDelay();
- while((FLASH_CON_PORT_IN & RB)==0);
-
- COMMAND_VAL=0x85;
- COMMAND_LATCH_INTO();
-
- //ADDRESS
- ADDRESS_VALUE=COLUMN_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=COLUMN_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
-
- FLASH_CON_PORT_OUT &=~ ALE;
-
- COMMAND_VAL=cFlashWriteInitiateCmd; //10H INITIATES PROGRAM
- COMMAND_LATCH_INTO();
-
- READ_STATUS();
- ucFlashSttsOverflowCnt=0;
- if(FLASH_STATUS==1&&(ucFlashSttsOverflowCnt++)<2)
- {
- ;
- }
- }
- */
- //***********************************************************************************
- void ZERO_ADDRESS(void)
- {
- COLUMN_ADDRESS_LOW=0X00;
- COLUMN_ADDRESS_HIGH=0X00;
- ROW_ADDRESS_LOW=0X00;
- ROW_ADDRESS_HIGH=0X00;
- }
- void ERASE_ONE_BLOCK(void)
- {
- unsigned int wGeneralCount = 0;
- //COMMAND
- Flash_Reset();
-
- COMMAND_VAL=0X60;
- COMMAND_LATCH_INTO();
-
- //ADDRESS
- /* ADDRESS_VALUE=COLUMN_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=COLUMN_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO(); */ //a bug of Sep. 15
-
- ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
- FLASH_CON_PORT_OUT &=~ ALE;
- COMMAND_VAL=0XD0;
- COMMAND_LATCH_INTO();
- //delay1ms();
-
- READ_STATUS();
- while(wGeneralCount++<0xffff) //Jan. 18, 2007
- {if (FLASH_STATUS==0) break;}
-
- }
- //***********************************************************************************
- void PROGRAM_ONE_PAGE(unsigned char ucFlashWriteData)
- {
- unsigned int wByteCount;
- unsigned char ucFlashSttsOverflowCnt=0;
- //COMMAND
- COMMAND_VAL=cFlashWriteCmd;
- COMMAND_LATCH_INTO();
-
- //ADDRESS
- ADDRESS_VALUE=0;//COLUMN_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=0;//COLUMN_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
-
- FLASH_CON_PORT_OUT &=~ ALE;
- //CALL DELAY_100US
- //for(wGeneralCnt=0;wGeneralCnt<0xff;wGeneralCnt++); //delay
-
- DATA_PORT_OUT_INITIAL;
- for(wByteCount=0;wByteCount<2112;wByteCount++)
- {
- //FLASH_WRITE_DATA=0x55;
- //WRITE_ONE_DATA();
- FLASH_CON_PORT_OUT&=~WE;
- DATA_PORT_OUT=ucFlashWriteData;
- FLASH_CON_PORT_OUT |= WE;
- }
-
- COMMAND_VAL=cFlashWriteInitiateCmd; //10H INITIATES PROGRAM
- COMMAND_LATCH_INTO();
-
- READ_STATUS();
- ucFlashSttsOverflowCnt=0;
- if(FLASH_STATUS==1&&(ucFlashSttsOverflowCnt++)<2)
- {
- ;// Dec. 02,2006
- //ERASE_ONE_BLOCK();
- //PROGRAM_ONE_PAGE();
- }
- }
- //***********************************************************************************
- //***********************************************************************************
- void PROGRAM_256_BYTE(void)
- {
- unsigned int wGeneralCnt=0;
- unsigned char ucFlashSttsOverflowCnt=0,ucRxIndex=0;
- //COMMAND
- COMMAND_VAL=0X80;
- COMMAND_LATCH_INTO();
-
- //ADDRESS
- ADDRESS_VALUE=COLUMN_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=COLUMN_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
-
- FLASH_CON_PORT_OUT &=~ ALE;
- //CALL DELAY_100US
- for(wGeneralCnt=0;wGeneralCnt<0xff;wGeneralCnt++);
- DATA_PORT_OUT_INITIAL;
- for(ucRxIndex=0;ucRxIndex<255;ucRxIndex++)
- {
- FLASH_CON_PORT_OUT&=~WE;
- DATA_PORT_OUT=aucUartRxBuf[ucRxIndex];
- FLASH_CON_PORT_OUT |= WE; //LATCH INTO ONE DATA
- }
-
- COMMAND_VAL=0X10; //10H INITIATES PROGRAM
- COMMAND_LATCH_INTO();
-
- READ_STATUS();
- ucFlashSttsOverflowCnt=0;
- if(FLASH_STATUS==1&&(ucFlashSttsOverflowCnt++)<2)
- {
- ;// Dec. 02,2006
- //ERASE_ONE_BLOCK();
- //PROGRAM_ONE_PAGE();
- }
- }
- //***********************************************************************************
- void READ_256_BYTE(void)
- {
- int wByteCnt=0;
- unsigned char ucRxCnt=0;
- //COMMAND
- Flash_Reset();
- COMMAND_VAL=0x00; //#0X00 //00H READ1 0-527BYTE
- COMMAND_LATCH_INTO();
- //ADDRESS
- ADDRESS_VALUE=COLUMN_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=COLUMN_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
- FLASH_CON_PORT_OUT &=~ ALE;
-
- COMMAND_VAL=0X30;
- COMMAND_LATCH_INTO();
- ATcmdDelay();
- while((FLASH_CON_PORT_IN & RB)==0);
-
- DATA_PORT_IN_INITIAL;
- for(wByteCnt=0,ucRxCnt=0;wByteCnt<256;wByteCnt++)
- {
- FLASH_CON_PORT_OUT &=~ RE; //RE IS LOW,ENABLE READ DATA
- aucUartRxBuf[ucRxCnt++]=DATA_PORT_IN;
- FLASH_CON_PORT_OUT |= RE;
- }
-
- }
- //***********************************************************************************
- /***********************************************************************************
- void READ_ONE_PAGE(void)
- {
- int wByteCnt=0;
- unsigned char ucRxCnt=0;
- //COMMAND
- COMMAND_VAL=0x00; //#0X00 //00H READ1 0-527BYTE
- COMMAND_LATCH_INTO();
- //ADDRESS
- ADDRESS_VALUE=COLUMN_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=COLUMN_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
- ADDRESS_LATCH_INTO();
-
- ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
- ADDRESS_LATCH_INTO();
- FLASH_CON_PORT_OUT &=~ ALE;
-
- COMMAND_VAL=0X30;
- COMMAND_LATCH_INTO();
- ATcmdDelay();
- while((FLASH_CON_PORT_IN & RB)==0);
- for(wByteCnt=0,ucRxCnt=0;wByteCnt<2048;wByteCnt++)
- {
- READ_ONE_DATA();
- aucUartRxBuf[ucRxCnt++]=FLASH_READ_DATA;
- }
- }
- ***********************************************************************************/
- //***********************************************************************************
- void READ_STATUS(void)
- {
- //CALL DELAY_50US
- while((FLASH_CON_PORT_IN & RB)==0); //FLASH_CON_PORT,RB,$ //CHECK BUSY
-
- COMMAND_VAL=0X70;
-
- COMMAND_LATCH_INTO();
-
- DATA_PORT_IN_INITIAL;
- READ_ONE_DATA(); //WHEN READY,READ STATUS
- FLASH_STATUS=FLASH_READ_DATA & 0x01; //0 OK 1 error
- //if((READ_DATA_VALUE&0x01)==0)
- // FLASH_STATUS=0; //0 OK 1 error
- }
- //***********************************************************************************/
- void FLASH_READ_ID(void)
- {
- COMMAND_VAL=0X90;
- COMMAND_LATCH_INTO();
-
- ADDRESS_VALUE=0X00;
- ADDRESS_LATCH_INTO();
- FLASH_CON_PORT_OUT &=~ ALE;
-
- DATA_PORT_IN_INITIAL;
- READ_ONE_DATA();
- while (!(FLASH_READ_DATA==0xad));
-
- READ_ONE_DATA();
- while (!(FLASH_READ_DATA==0xf1));
- READ_ONE_DATA();
- READ_ONE_DATA();
- }
- //***********************************************************************************
- void Flash_Reset(void) //flash reset
- {
- int i;
- COMMAND_VAL=0XFF; //reset command
- COMMAND_LATCH_INTO();
- for (i=0;i<3000;i++); //delay
- }
- //***********************************************************************************
- void COMMAND_LATCH_INTO(void) //FLASH CONTROL PORT
- {
-
- FLASH_CON_PORT_OUT |= CLE; //COMMAND LATCH ENABLE
- FLASH_CON_PORT_OUT &= ~(CE|WE); //CHIP ENABLE WRITE ENABLE
- DATA_PORT_OUT_INITIAL; //MCU OUTPUT,FLASH READ COMMAND
-
- DATA_PORT_OUT=COMMAND_VAL; //DATA SETUP
-
- FLASH_CON_PORT_OUT |= WE; //LATCH INTO THE COMMAND
- FLASH_CON_PORT_OUT&= ~CLE;
- }
- //********************************************************
-
- void ADDRESS_LATCH_INTO(void)
- {
- FLASH_CON_PORT_OUT |= ALE;
- FLASH_CON_PORT_OUT &=~ (CLE|WE);
- DATA_PORT_OUT_INITIAL; //MCU OUTPUT,FLASH READ ADDRESS
- DATA_PORT_OUT=ADDRESS_VALUE;
-
- FLASH_CON_PORT_OUT |= WE; //LATCH INTO THE ADDRESS
- //FLASH_CON_PORT_OUT &=~ ALE;
-
- }
- /********************************************************
- void WRITE_ONE_DATA(void)
- {
- FLASH_CON_PORT_OUT&=~WE;
- //DATA_PORT_OUT_INITIAL; //MCU OUTPUT,MCU WRITE A DATA TO FLASH
- DATA_PORT_OUT=FLASH_WRITE_DATA;
- FLASH_CON_PORT_OUT |= WE; //LATCH INTO ONE DATA
-
- }
-
- ********************************************************/
- void READ_ONE_DATA(void)
- {
- FLASH_CON_PORT_OUT &=~ RE; //RE IS LOW,ENABLE READ DATA
-
- //DATA_PORT_IN_INITIAL; //MCU INPUT,MCU READ A DATA
- FLASH_READ_DATA=DATA_PORT_IN;
- FLASH_CON_PORT_OUT |= RE;
- }