首页 flash初始化子程序

flash初始化子程序

举报
开通vip

flash初始化子程序/***********************************************************************************************   Filename    :   flash.c*   Description  :   flash数据读.*   Author     :   ldm*   Date      :   2013-11-29**********************************************************...

flash初始化子程序
/***********************************************************************************************   Filename    :   flash.c*   Description  :   flash数据读.*   Author     :   ldm*   Date      :   2013-11-29***********************************************************************************************/#include"doData.h"#include"main.h"#include"flash.h"#include"gprs.h"#include"PubUse.h"#include"Structure.h"//#include"timeapp.h"#include#include"hal_uart.h"#include"hal_timer.h"#include//==============================================#defineFLASH_SPI_PAGESIZE   0x100#defineFLASH_SPI_SECTORSZIE  0x1000#defineFLASH_SPI_HIGHT_ADDR   0x1000000externUPLOADSTATE_u_gcUpload;externTESTSTATE_u_gctest;externuint32addr_flash;//---------------------------------------------#pragmaudatabank3=0x300uint8SpiCheckBuf[256];#pragmaudataexternuint8buf0[256];externuint8DATABuf[GPRS_UART_BUF_SIZE];externvoiddelay_1us(uint16i);externvoiddelay_1ms(uint16i);/*********************************************************************************************************************************************************************************************/struct  bit_def{char  b0:1;char  b1:1;char  b2:1;char  b3:1;char  b4:1;char  b5:1;char  b6:1;char  b7:1;};union  byte_def{struct  bit_defbit1;char  byte;};/***************************************************************************************Functionname:voidsleep_Flashcom(void);**Descriptions: invaildFlashcommunication.**inputparameters:none.**outputargument: none**Note:          *************************************************************************************/voidsleep_PhoFlashcom(void) //无效SPI通信{PhoDataPortIn;SclkToPhoPortIn;      //时钟脚输入状态SicToPhoPortIn;        //数字脚输入状态PhoFlashCs_in;        //选择脚输入ReadPho_off;        //读拍照模块信号输出无效}voidsleep_RecFlashcom(void) //无效SPI通信{RecDataPortIn;SclkToRecPortIn;      //时钟脚输入状态SicToRecPortIn;        //数字脚输入状态  RecFlashCs_in;        //选择脚输入}/***************************************************************************************Functionname:ready_PhoFlashcomRead(void);**Descriptions: readyFlashcommunication.**inputparameters:none.**outputargument: none**Note: SPI操作准备         *************************************************************************************/voidready_PhoFlashcomRead(void)  //SPI操作前的准备{PhoFlashCs_out;      //CS控制脚输出SclkToPhoPortOut;    //时钟脚输出状态SicToPhoPortOut;    //数字脚输出状态PhoFlashCs_inactive;  //CS控制脚无效SclkToPho_off;      //拉低芯片时钟线PhoDataPortIn;      //拍照数据口输入}voidready_RecFlashcomRead(void)  //SPI操作前的准备{RecFlashCs_out;      //CS控制脚输出SclkToRecPortOut;    //时钟脚输出状态SicToRecPortOut;    //数字脚输出状态RecFlashCs_inactive;  //CS控制脚无效SclkToRec_off;      //拉低芯片时钟线RecDataPortIn;      //录音数据口输入}/***************************************************************************************Functionname:voidready_PhoFlashcomWrite(void);**Descriptions: readyFlashcommunication.**inputparameters:none.**outputargument: none**Note: SPI操作准备         *************************************************************************************/voidready_PhoFlashcomWrite(void)  //SPI操作前的准备{PhoFlashCs_out;      //CS控制脚输出SclkToPhoPortOut;    //时钟脚输出状态SicToPhoPortOut;    //数字脚输出状态PhoFlashCs_inactive;  //CS控制脚无效//  SicToPho_off;      //数字脚低SclkToPho_off;      //拉低芯片时钟线PhoDataPortOut;      //拍照数据口输出}voidready_RecFlashcomWrite(void)  //SPI操作前的准备{RecFlashCs_out;      //CS控制脚输出SclkToRecPortOut;    //时钟脚输出状态SicToRecPortOut;    //数字脚输出状态RecFlashCs_inactive;  //CS控制脚无效//  SicToRec_off;      //数字脚低SclkToRec_off;      //拉低芯片时钟线RecDataPortOut;      //拍照数据口输出}/***************************************************************************************Functionname:uint8read_1bytePhoFlash(void);**Descriptions: getbytefromFlashoutput            **inputparameters: none                    **outputargument: returntheobtanedbytewhichtypeisuint8**Note:          *************************************************************************************/uint8read_1bytePhoFlash(void)    //从Flash读1字节数据{staticuint8i;ClrWdt();PhoDataPortIn;      //拍照数据口输入SclkToPho_on;      //拉高芯片时钟线delay_1us(5);i=PhoDataPort;SclkToPho_off;      //拉低芯片时钟线delay_1us(5);returni;}uint8read_1byteRecFlash(void)    //从Flash读1字节数据{staticuint8i;ClrWdt();RecDataPortIn;      //拍照数据口输入SclkToRec_on;      //拉高芯片时钟线delay_1us(5);i=RecDataPort;SclkToRec_off;      //拉低芯片时钟线delay_1us(5);returni;}/***************************************************************************************Functionname:write_1bytePhoFlash(uint8PB_data);**Descriptions: writeonebytetotheFlash            **inputparameters: PB_data:thedatareadytobewrite                    **outputargument: none.//**Note: PB_data:待写数据         *************************************************************************************/voidwrite_1bytePhoFlash(uint8PB_data)      //写1字节数据到Flash,SPI的写操作{uint8i;unionbyte_defLUB_data;LUB_data.byte=PB_data;     //待写数据for(i=0;i<8;i){SicToPho=LUB_;   //发送字节数据的高位delay_1us(5);      SclkToPho_on;          //拉高芯片时钟线,单片机发送数据LUB_data.byte<<=1;       //取下一个位delay_1us(5);      SclkToPho_off;          //拉低芯片时钟线,Flash接收数据delay_1us(5);          //us_delay(20);}delay_1us(10);          ClrWdt();}voidwrite_1byteRecFlash(uint8PB_data)      //写1字节数据到Flash,SPI的写操作{uint8i;unionbyte_defLUB_data;LUB_data.byte=PB_data;     //待写数据for(i=0;i<8;i){SicToRec=LUB_;   //发送字节数据的高位delay_1us(5);      SclkToRec_on;          //拉高芯片时钟线,单片机发送数据LUB_data.byte<<=1;       //取下一个位delay_1us(5);      SclkToRec_off;          //拉低芯片时钟线,Flash接收数据delay_1us(5);          //us_delay(20);}delay_1us(10);          ClrWdt();}/***************************************************************************************Functionname: Flash_SendByte(uint8byte);**Descriptions: 发送一个字节到FLASH           **inputparameters:                    **outputargument: //**Note:  /*************************************************************************************/voidFlash_SendBytePho(uint8byte){ready_PhoFlashcomWrite();  //对Flash写操作前的准备delay_1us(5);        //延时10us;PhoFlashCs_active;      //CS控制脚低,有效delay_1us(5);        //延时10us;write_1bytePhoFlash(byte);delay_1us(5);        //延时10us;PhoFlashCs_inactive;    //CS控制脚高,无效delay_1us(5);        //延时10us;sleep_PhoFlashcom();     //无效SPI通信delay_1us(5);        //延时10us;ClrWdt();}voidFlash_SendByteRec(uint8byte){ready_RecFlashcomWrite();  //对Flash写操作前的准备delay_1us(5);        //延时10us;RecFlashCs_active;      //CS控制脚低,有效delay_1us(5);        //延时10us;write_1byteRecFlash(byte);delay_1us(5);        //延时10us;RecFlashCs_inactive;    //CS控制脚高,无效delay_1us(5);        //延时10us;sleep_RecFlashcom();     //无效SPI通信delay_1us(5);        //延时10us;ClrWdt();}/**************************************************************************************@brief ReadsablockofdatafromtheFLASH.*@param pBuffer:pointertothebufferthatreceivesthedatareadfromtheFLASH.*@param ReadAddr:FLASH'sinternaladdresstoreadfrom.*@param NumByteToRead:numberofbytestoreadfromtheFLASH.*@retvalNone/*************************************************************************************/uint8Flash_ReadPhoBuffer(uint32ReadAddr,uint8*pBuffer,uint16NumByteToRead){uint8p;uint8HightAddr=0;uint16i=0;uint16pp=0;_;if(ReadAddr>=FLASH_SPI_HIGHT_ADDR){HightAddr=1;}Flash_SendBytePho(FLASH_CMD_WREN);Flash_SendBytePho(FLASH_CMD_PARALLEL);  //并口模式ready_PhoFlashcomRead();        //SPI操作前准备delay_1us(5);              //延时10us;PhoFlashCs_active;            //CS控制脚低,有效delay_1us(5);              //延时10us;write_1bytePhoFlash(FLASH_CMD_READ);/*!>24);}write_1bytePhoFlash((ReadAddr&0xFF0000)>>16);/*!>8);  /*!=FLASH_SPI_HIGHT_ADDR){HightAddr=1;}Flash_SendByteRec(FLASH_CMD_WREN);Flash_SendByteRec(FLASH_CMD_PARALLEL);  //并口模式ready_RecFlashcomRead();        //SPI操作前准备delay_1us(5);              //延时10us;RecFlashCs_active;            //CS控制脚低,有效delay_1us(5);              //延时10us;write_1byteRecFlash(FLASH_CMD_READ);/*!>24);}write_1byteRecFlash((ReadAddr&0xFF0000)>>16);/*!>8);  /*!>24);  }write_1byteRecFlash((WriteAddr&0xFF0000)>>16); /*!>8);  /*!Flash_PAGESIZE*/{while(NumOfPage--){if(Flash_WritePage(pBuffer,WriteAddr,FLASH_SPI_PAGESIZE)==0)return0;WriteAddr= FLASH_SPI_PAGESIZE;pBuffer=FLASH_SPI_PAGESIZE;}if(NumOfSingle!=0){if(Flash_WritePage(pBuffer,WriteAddr,NumOfSingle)==0)return0;}}}else/*!count)/*!<(NumByteToWriteWriteAddr)>Flash_PAGESIZE*/{temp=NumOfSingle-count;if(Flash_WritePage(pBuffer,WriteAddr,count)==0)return0;WriteAddr= count;pBuffer=count;if(Flash_WritePage(pBuffer,WriteAddr,temp)==0)return0;}else{if(Flash_WritePage(pBuffer,WriteAddr,NumByteToWrite)==0)return0;}}else/*!Flash_PAGESIZE*/{NumByteToWrite-=count;NumOfPage= NumByteToWrite/FLASH_SPI_PAGESIZE;NumOfSingle=NumByteToWrite%FLASH_SPI_PAGESIZE;if(Flash_WritePage(pBuffer,WriteAddr,count)==0)return0;WriteAddr= count;pBuffer=count;while(NumOfPage--){if(Flash_WritePage(pBuffer,WriteAddr,FLASH_SPI_PAGESIZE)==0)return0;WriteAddr= FLASH_SPI_PAGESIZE;pBuffer=FLASH_SPI_PAGESIZE;}if(NumOfSingle!=0){if(Flash_WritePage(pBuffer,WriteAddr,NumOfSingle)==0)return0;}}}return1;}/**************************************************************************************@brief PollsthestatusoftheWriteInProgress(WIP)flagintheFLASH's*    statusregisterandloopuntilwriteopertaionhascompleted.*@param None*@retvalNone/*************************************************************************************/uint8Flash_WaitForWriteEnd(void){uint8rst=0;//uint32CurTick;/*!=FLASH_SPI_HIGHT_ADDR)    //地址大于FLASH容量{HightAddr=1;//   if(Flash_Enter4Mode()==0)return0;}/*!>24);  }/*!>16);/*!>8); /*!=EraseAddrEnd)_;if(addr_flash>=0x400000)_;//    EraseFlashTime=120;            //擦除一个扇区1.2S}    }/***************************************************************************************Functionname:erase_flash(void);**Descriptions:flsah内存检测,是否擦除干净**inputparameters:none.**outputargument: none**Note:         *************************************************************************************/voidflash_erase_test(void){uint16i,x;uint8p;addr_flash=0;//  for(i=0;i<255;i)buf0[i]=i;//  Flash_WritePage(buf0,0,256);for(x=0;x<100;x){_;if(Flash_ReadRecBuffer(addr_flash,SpiCheckBuf,256)==0);for(i=0;i<256;i){if(0xff!=SpiCheckBuf[i]){_;while(addr_flash<0x400000){if(Flash_EraseSector(addr_flash)==1);  //按扇区擦除addr_flash=0x10000;WdtOut=~WdtOut;}_;return;}                                                                                                                     }addr_flash=256;}_;
本文档为【flash初始化子程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_654168
暂无简介~
格式:doc
大小:74KB
软件:Word
页数:45
分类:
上传时间:2022-08-05
浏览量:0