wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

專注電子技術學習與研究
當前位置:單片機教程網 >> STM32 >> 瀏覽文章

STM32單片機AT45DB642D驅動程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2014年08月21日   【字體:

 /*******************************************************************************

* 51hei版權所有,未經允許,不得發表及作為它用!
* File Name          : AT45DB642D.c
* Author             : XiaoShm
* Version            : V1.0
* Date               : 8/29/2012
* Description
* Last Modefly Date : 8/31/2012
*******************************************************************************/
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "InitDevice.h"
#include"at45db642d.h"
 
//AT45DB有兩個緩沖區Buffer1和Buffer2 (SRAM),此處只使用buffer1
/******************************
*opcode-操作碼
******************************/
//讀取狀態的操作碼
#define Status_Register_Opcode   0xD7
//讀取ID的操作碼
#define Device_ID_Opcode         0x9F
//Write to buffer
#define Write_Data_to_Buffer1   0x84//0x84,0x87
//Write buffer to page
#define Write_Buffer1_to_Page_whin_Erase   0x83
//Continuous Array Read
#define Continuous_Array_Read_Command   0xe8//0x03//0x0b//0xe8
#define Deep_Power_Down 0xb9
#define Resume_from_Deep_Power_Down 0xab
#define Main_MemoryPage_to_Buffer1_Transfer 0x53
#define Auto_Page_Rewrite_through_Buffer1 0x58
#define Main_Memory_Page_Pro_Through_Buff1 0x82
 
#define DF_FullSize 0x7fffff//8M byte
#define DF_PageSize 0x400//頁大小
 
#ifdef TEST_AT45DB
#define TESTBASE 0X2000
u32 TestAddr = TESTBASE;
u8 TestBuffer[256] ={0};
#endif
//======================================================================
//函數名稱:DF_SpiRxByte(void)
//輸入:
//輸出:
//函數功能:通過SPI接從AT45DB讀一字節數據
//======================================================================
u8 DF_SpiRxByte(void)
{
u8 i = 0, rdat = 0; 
for(i = 0; i < 8; i ++)
{
rdat <<= 1;
GPIO_SetBits(GPIOC, FSCK);
if(GPIO_ReadInputDataBit(GPIOC, FSDO))
{
rdat |= 0x01;
}
GPIO_ResetBits(GPIOC, FSCK);
}
return rdat;
}
//======================================================================
//函數名稱:DF_SpiTxByte(u8 dat) 
//輸入:data待寫入的數據
//輸出:
//函數功能:通過SPI接口向AT45DB寫入一字節數據
//======================================================================
void DF_SpiTxByte(u8 dat) 
  u8 i = 0, sdat = 0; 
sdat = dat;
for(i = 0; i < 8; i ++)
{
if(sdat & 0x80)
{
GPIO_SetBits(GPIOC, FSDI);
}
else
{
GPIO_ResetBits(GPIOC, FSDI);
}
GPIO_SetBits(GPIOC, FSCK);
sdat <<= 1;
GPIO_ResetBits(GPIOC, FSCK);
}
}
//======================================================================
//函數名稱:Enable_DFLASH(void)
//輸入:
//輸出:
//函數功能:使能FLASH(低電平使能)
//======================================================================
void Enable_DFLASH(void)
{
    u8 i = 5;
 
  GPIO_ResetBits(GPIOC, FCS);
  while(i --);
}
//======================================================================
//函數名稱:Disable_DFLASH(void)
//輸入:
//輸出:
//函數功能:禁止FLASH(高電平禁止)
//======================================================================
void Disable_DFLASH(void)
{
  u8 i = 5;
  GPIO_SetBits(GPIOC, FCS);
  while(i --); //延長上一次高電平時間
}
//=========================================================================================
//*Status Register Format:                                   *
//*   -----------------------------------------------------------------------  
//* bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 *
//* -------- -------- -------- -------- -------- -------- -------- -------- *
//* RDY/BUSY COMP   0     1     1     1     X     X   *
//*   ----------------------------------------------------------------------- * 
//* bit7 - 忙標記,0為忙1為不忙。                               * 
//*       當Status Register的位0移出之后,接下來的時鐘脈沖序列將使SPI器件繼續*
//*       將最新的狀態字節送出。                               */ 
//* bit6 - 標記最近一次Main Memory Page和Buffer的比較結果,0相同,1不同。   *
//* bit5                                               * 
//* bit4                                               * 
//* bit3                                               *
//* bit2 - 這4位用來標記器件密度,對于AT45DB041B,這4位應該是0111,一共能標記 
//*       16種不同密度的器件。                               
//* bit1                                               
//* bit0 - 這2位暫時無效                                     
//=======================================================================================
u8 DF_ReadStatus(void)
    u8 i = 0;       
    Enable_DFLASH();   
    DF_SpiTxByte(Status_Register_Opcode);
i = DF_SpiRxByte();/////////////////****************//////////////////
    Disable_DFLASH();
    return i;   
}
//======================================================================
//函數名稱:DF_Check_Busy_State(void)
//輸入:
//輸出:
//函數功能:讀取FLASH忙標志位(最多判斷255次,不行還是返回且返回0)
//======================================================================
u8 DF_Check_Busy_State(void)
{
  u8 state = 0;
  u8 i = 255;
  while(i)
  {
        state = DF_ReadStatus();
  if(state & 0x80) break; //讀取的最高位0時器件忙
  --i;
DelayNInstruct(100);
  }
  return i;
}
//************************************************************
//*讀取FLASH的頁大小
//*返回1表示每一頁的大小為1024 bytes,否則為1056 bytes
//************************************************************
u8 DF_Check_Page_Size(void)
{
  u8 Page_Size = 0;
  Page_Size = DF_ReadStatus();
  if(Page_Size & 0x01) return 1;
  return 0;
}
//======================================================================
//函數名稱:DF_Deep_Power_Down(void)
//輸入:
//輸出:
//函數功能:使FLASH進入DeepPowerDown模式
//======================================================================
void DF_Deep_Power_Down(void)
{
Enable_DFLASH();   
DF_SpiTxByte(Deep_Power_Down);
Disable_DFLASH();
}
//======================================================================
//函數名稱:DFLASH_Resume_from_Deep_Power_Down(void)
//輸入:
//輸出:
//函數功能:將FLASH從DeepPowerDown模式喚醒
//======================================================================
void DF_Resume_from_Deep_Power_Down(void)
{
Enable_DFLASH();   
DF_SpiTxByte(Resume_from_Deep_Power_Down);
Disable_DFLASH();
}
//************************************************************
//*配置FLASH頁大小為1024bytes
//************************************************************
void DF_Configer_Binary_Page_Size(void)
{
u8 i = 0, j = 0;
u8 Power_of_Two_Page_Size_Command[4]={0x3d,0x2a,0x80,0xa6};
while(j < 5)
{
if(!DF_Check_Page_Size())
{//如果頁大小為1056 bytes,則配置為1024 bytes
DF_Check_Busy_State();
  Enable_DFLASH();
  for(i=0;i<4;i++)
  {
  DF_SpiTxByte(Power_of_Two_Page_Size_Command[i]);//
  }
 
  Disable_DFLASH();
DelayNmsTime(10);
DF_Check_Busy_State();
DelayNmsTime(5);
DF_Deep_Power_Down();
DelayNmsTime(5);
DF_Resume_from_Deep_Power_Down();
DelayNmsTime(1);
}
else
{//已經為1024則不用再配置
break;
}
j ++;
}
}
//************************************************************
//*使能扇區保護
//************************************************************
void DF_Enable_Sector_Protection(void)
{
  u8 Enable_Sector_Protection_Command[4]={0x3D,0x2A,0x7F,0xA9}; //使能扇區保護操作碼
  u8 i;
 
  DF_Check_Busy_State();
  Enable_DFLASH();
  for(i=0;i<4;i++)
  {
  DF_SpiTxByte(Enable_Sector_Protection_Command[i]);//寫使能扇區保護操作碼
  }
  Disable_DFLASH();
}
//======================================================================
//函數名稱:
//輸入:
//輸出:
//函數功能:禁止扇區保護
//======================================================================
void DF_Disable_Sector_Protection(void)
{
  u8 Disable_Sector_Protection_Command[4]={0x3D,0x2A,0x7F,0x9A};//禁止扇區保護操作碼
  u8 i;
 
  DF_Check_Busy_State();
  Enable_DFLASH();
  for(i=0;i<4;i++)
  {
      DF_SpiTxByte(Disable_Sector_Protection_Command[i]);//寫禁止扇區保護操作碼
  }
  Disable_DFLASH();
}
//======================================================================
//函數名稱:
//輸入:各扇區保護字0---unprotected 0xff---protected,32byte refer to 32 sector
//輸出:
//函數功能:設置扇區保護  注意:會改變BUFFER1中的內容
//======================================================================
void DF_Program_Sector_Protection_Register(u8 *Sector_Protection_Register)
{
  u8 Program_Sector_Protection_Command[4]={0x3D,0x2A,0x7F,0xFC};//設置扇區保護操作碼
  u8 i;
 
  DF_Check_Busy_State();
  Enable_DFLASH();
  for(i=0;i<4;i++)
  {
      DF_SpiTxByte(Program_Sector_Protection_Command[i]);//寫設置扇區保護操作碼
  }
  for(i=0;i<32;i++)
  {
      DF_SpiTxByte(Sector_Protection_Register[i]);//寫設置扇區保護數據
  }
  Disable_DFLASH();
}
 
//======================================================================
//函數名稱:
//輸入:
//輸出:
//函數功能:讀取扇區保護寄存器內容(返回32個字節,對應32個扇區的情況)
//======================================================================
void DF_Read_Sector_Protection_Register(u8 *Sector_Protection_Register)
{
  u8 Read_Sector_Protection_Register_Command[4]={0x32,0,0,0};
  u8 i;
  DF_Check_Busy_State();
  Enable_DFLASH();
 
  for(i=0;i<4;i++)//write
  {
    DF_SpiTxByte(Read_Sector_Protection_Register_Command[i]);
  }
  for(i=0;i<32;i++)//read
  {
    Sector_Protection_Register[i] = DF_SpiRxByte();
  }
  Disable_DFLASH();
}
//************************************************************
//*取消所有扇區保護
//*返回1表示成功取消扇區所以保護
//************************************************************
u8 DF_Cancel_Sector_Protection(void)
{
  u8 Sector_Protection_Register_for_Write[32]={0,0,0,0,0,0,0,0};//寫入0為去保護
  u8 Sector_Protection_Register_for_Read[32]={1,1,1,1,1,1,1,1};//防止默認值為0
  u16 i;
  u8 j=1;
  //使能扇區保護
  DF_Enable_Sector_Protection();
  //設置扇區保護
 
  DF_Program_Sector_Protection_Register(Sector_Protection_Register_for_Write);
  //讀取扇區保護寄存器內容
  DF_Read_Sector_Protection_Register(Sector_Protection_Register_for_Read);
  //判斷扇區保護寄存器內容
  for(i=0;i<8;i++)
  {
    if(Sector_Protection_Register_for_Read[i] != 0) j++;
  }
  //禁止扇區保護
  DF_Disable_Sector_Protection();
 
  return j;
}
//=============================================================================
//函數名稱:DF_ContinusArrayRead(UIN32 readaddr,u8 *readbuff,u16 len)
//輸入:readaddr指定數據在FLASH中的存儲地址,指定數據的首地址,指定數據的長度 
//輸出:readbuf指定數據暫存區的首地址
//函數功能:從FLASH主存readaddr地址處連續讀取len字節數據
//=============================================================================
void DF_ContinusArrayRead(u32 readaddr,u8 *readbuff,u16 len)
{
    u16 i;
    DF_Check_Busy_State();
    Enable_DFLASH();
    DF_SpiTxByte(Continuous_Array_Read_Command); 
    DF_SpiTxByte((u8)((readaddr >> 16) & 0xff)); 
    DF_SpiTxByte((u8)((readaddr >> 8) & 0xff)); 
    DF_SpiTxByte((u8)(readaddr & 0xff)); 
 
    for(i = 0 ; i < 4 ; i ++)
    {
        DF_SpiTxByte(0x00);
    }
    for(i = 0 ; i < len ; i ++)
    {
        readbuff[i] = DF_SpiRxByte();
    }
    Disable_DFLASH();
}
//=============================================================================
//函數名稱:DF_BufferWrite(u8 bufferaddr,u8 *writebuff,u16 len)
//輸入:BUFFER中的起始地址, 待存數據的頭指針,待存數據的長度1~1024
//輸出:
//函數功能:將指定數據寫入從某個地址(0~1023)開始的BUFFER1中
//=============================================================================
void DF_BufferWrite(u16 bufferaddr,u8 *writebuff,u16 len)
{
    u16 i;
    DF_Check_Busy_State();
    Enable_DFLASH();
    DF_SpiTxByte(Write_Data_to_Buffer1); 
    DF_SpiTxByte(0x00);
    DF_SpiTxByte((u8)((bufferaddr >> 8) & 0x03));
    DF_SpiTxByte((u8)(bufferaddr & 0xff)); 
    for(i = 0 ; i < len ; i ++ )
    {
         DF_SpiTxByte(writebuff[i]); 
    }
    Disable_DFLASH();   
}
//=============================================================================
//函數名稱:DF_BufferToMainMemoryWithErase(u16 pageaddr,u8 buffaddr,u8 *writebuff,u16 len)
//輸入:BUFFER中的起始地址, 待存數據的頭指針,待存數據的長度1~1024
//輸出:
//函數功能:將指定數據寫入從某個地址(0~1023)開始的BUFFER1中:包含2個動作,首先將
//指定數據寫入到BUFFER 1中,其中可以指定BUFFER中的起始寫入地址,此寫入動作不影響
//BUFFER中其它地址中的數據,然后再將BUFFER中的整個數據寫入到某指定頁中(帶預擦除)。                                      
//=============================================================================
void DF_BufferToMainMemoryWithErase(u16 pageaddr,u16 buffaddr,u8 *writebuff,u16 len)
{
    DF_BufferWrite(buffaddr,writebuff,len);
DF_Check_Busy_State();
    Enable_DFLASH();
    DF_SpiTxByte(Write_Buffer1_to_Page_whin_Erase); 
    DF_SpiTxByte((u8)((pageaddr >> 8) & 0x7f)); 
    DF_SpiTxByte((u8)(pageaddr & 0xfc)); 
    DF_SpiTxByte(0x00);
DelayNmsTime(40);
    Disable_DFLASH();
}
//======================================================================
//函數名稱:DF_MainMemoryPageProgramThroughBuffer(u32 writeaddr, u8 *writebuff, u16 len)
//輸入:riteaddr---待寫入地址,writebuff數據指針,len數據長度
//輸出:
//函數功能:通過BUF1寫主存,包含動作:先將1-1024字節數據寫入BUF1,然后進行
//BUF1到主存的帶擦除編程
//==================================================================
void DF_MainMemoryPageProgramThroughBuffer(u32 writeaddr, u8 *writebuff, u16 len)
{
u16 i = 0;
DF_Check_Busy_State();
Enable_DFLASH();
DF_SpiTxByte(Main_Memory_Page_Pro_Through_Buff1); 
    DF_SpiTxByte((u8)((writeaddr >> 16) & 0xff));
    DF_SpiTxByte((u8)((writeaddr >> 8) & 0xff));
    DF_SpiTxByte((u8)(writeaddr & 0xff)); 
    for(i = 0 ; i < len ; i ++ )
    {
         DF_SpiTxByte(writebuff[i]); 
    }
DelayNmsTime(40);
Disable_DFLASH();
 
}
//========================================================================================
//函數名稱:DF_MainMemoryPagetoBufferTransfer(u16 pageaddr)
//輸入:pageaddr
//輸出:
//函數功能:
//==========================================================================================
void DF_MainMemoryPagetoBufferTransfer(u16 pageaddr)
{
DF_Check_Busy_State();
Enable_DFLASH();
DF_SpiTxByte(Main_MemoryPage_to_Buffer1_Transfer); 
    DF_SpiTxByte((u8)((pageaddr >> 8) & 0x7f));
    DF_SpiTxByte((u8)(pageaddr & 0xfc));
    DF_SpiTxByte(0x00); 
Disable_DFLASH();
}
//========================================================================================
//函數名稱:
//輸入:
//輸出:
//函數功能:
//==========================================================================================
void DF_AutoPageRewriteThroughBuffer(u16 pageaddr)
{
DF_Check_Busy_State();
Enable_DFLASH();
DF_SpiTxByte(Auto_Page_Rewrite_through_Buffer1); 
    DF_SpiTxByte((u8)((pageaddr >> 8) & 0x7f));
    DF_SpiTxByte((u8)(pageaddr & 0xfc));
    DF_SpiTxByte(0x00); 
Disable_DFLASH();
 
DelayNmsTime(18);
}
//=========================================================================================
//函數名稱:DF_Chip_Erase(void)
//輸入:
//輸出:
//函數功能:整片擦除FLASH全部內容
//==========================================================================================
void DF_Chip_Erase(void)
{
  u8 Chip_Erase_Command[4] = {0xC7,0x94,0x80,0x9A};//整片擦除操作碼
  u8 i;
  DF_Check_Busy_State();
  Enable_DFLASH();
  for(i = 0 ; i < 4 ; i ++)
  {
    DF_SpiTxByte(Chip_Erase_Command[i]);
}
  Disable_DFLASH();
}
//=========================================================================================
//函數名稱:
//輸入:
//輸出:
//函數功能:讀取制造ID,確認是否有DATAFLASH存在,存在返回1,否則返回0
//==========================================================================================
u8 DF_ReadManufactureIDInformation(void)
{
u8 i = 0;
u8 Idbuff[4] = {0};
DF_Check_Busy_State();
    Enable_DFLASH();
    DF_SpiTxByte(Device_ID_Opcode); 
    for(i = 0 ; i < 4 ; i ++)
    {
        Idbuff[i] = DF_SpiRxByte();
    }
    Disable_DFLASH();
if((Idbuff[0] == 0x1f) && (Idbuff[1] == 0x28))
{
return 1;
}
else
{
return 0;
}
}
//=========================================================================================
//函數名稱:
//輸入:
//輸出:
//函數功能:初始化DataFlash,檢查制造ID,配置為1024字節每page,禁止扇區保護
//==========================================================================================
void DF_Init(void)
{
u8 i = 0;
GPIO_SetBits(GPIOC, FCS);
GPIO_ResetBits(GPIOC, FSCK);//AT45DB選擇SPI方式0
GPIO_ResetBits(GPIOC, FSDI);
 
i = DF_Check_Busy_State();
if(DF_ReadManufactureIDInformation())
{
DF_Configer_Binary_Page_Size();
i = DF_Cancel_Sector_Protection();
}
else
{//未檢測到DF,則給出提示報警信息
i = 0;
while(i < 50)
{
i ++;
}
BeepTim = 100;
}
}
 
//=========================================================================================
//函數名稱:SaveDataToFlash(u32 *pBuffer, u32 cnt, u32 addr)
//輸入:pBuffer-數據緩沖區首址,cnt-寫入字節數,WriteAddr-保存地址
//輸出:保存成功與否
//函數功能:將任意字節(小于0X800000)數據保存入FLASH任意地址
//==========================================================================================
u8 SaveDataToFlash(u8 *pBuffer, u32 sizlen, u32 WriteAddr)
{
u32 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0;
u16 paddr = 0;
if(WriteAddr + sizlen >= DF_FullSize) 
{//如果 超出地址
return 0;
}
  Addr = WriteAddr % DF_PageSize;
  count = DF_PageSize - Addr;
  NumOfPage =  sizlen / DF_PageSize;
  NumOfSingle = sizlen % DF_PageSize;
/* If WriteAddr is DF_PageSize aligned  */
  if(Addr == 0) 
  {//地址為整頁起始地址
    /* If sizlen < DF_PageSize */
    if(NumOfPage == 0) 
    {//不夠一頁
      paddr = (u16)((WriteAddr >> 8) & 0xfffc);//查找頁地址
DF_MainMemoryPagetoBufferTransfer(paddr);
DF_MainMemoryPageProgramThroughBuffer(WriteAddr,pBuffer,NumOfSingle);
DF_AutoPageRewriteThroughBuffer(paddr);
    }
    /* If sizlen > DF_PageSize */
    else  
    {//超出一頁
      while(NumOfPage--)
      {//先寫整頁
        paddr = (u16)((WriteAddr >> 8) & 0xfffc);//查找頁地址
DF_MainMemoryPagetoBufferTransfer(paddr);
DF_MainMemoryPageProgramThroughBuffer(WriteAddr,pBuffer,DF_PageSize);
DF_AutoPageRewriteThroughBuffer(paddr);
        WriteAddr +=  DF_PageSize;
        pBuffer += DF_PageSize;
      }//再寫余下部分
      if(NumOfSingle!=0)
      {
        paddr = (u16)((WriteAddr >> 8) & 0xfffc);//查找頁地址
DF_MainMemoryPagetoBufferTransfer(paddr);
DF_MainMemoryPageProgramThroughBuffer(WriteAddr,pBuffer,NumOfSingle);
DF_AutoPageRewriteThroughBuffer(paddr);
      }
    }
  }
  /* If WriteAddr is not DF_PageSize aligned  */
  else 
  {//起始地址非整頁地址
    /* If sizlen < DF_PageSize */
    if(NumOfPage== 0) 
    {//不超過一頁
if(NumOfSingle > count)
{//產生跨頁
paddr = (u16)((WriteAddr >> 8) & 0xfffc);//查找頁地址
DF_MainMemoryPagetoBufferTransfer(paddr);
DF_MainMemoryPageProgramThroughBuffer(WriteAddr,pBuffer,count);
DF_AutoPageRewriteThroughBuffer(paddr);
NumOfSingle -= count;
WriteAddr += count;
pBuffer += count;
  paddr = (u16)((WriteAddr >> 8) & 0xfffc);//查找頁地址
DF_MainMemoryPagetoBufferTransfer(paddr);
DF_MainMemoryPageProgramThroughBuffer(WriteAddr,pBuffer,NumOfSingle);
DF_AutoPageRewriteThroughBuffer(paddr);
}
else
{//不產生跨頁
      paddr = (u16)((WriteAddr >> 8) & 0xfffc);//查找頁地址
DF_MainMemoryPagetoBufferTransfer(paddr);
DF_MainMemoryPageProgramThroughBuffer(WriteAddr,pBuffer,NumOfSingle);
DF_AutoPageRewriteThroughBuffer(paddr);
}
    }
    /* If sizlen > DF_PageSize */
    else
    {//超過一頁
      sizlen -= count;
      NumOfPage =  sizlen / DF_PageSize;
      NumOfSingle = sizlen % DF_PageSize;
if(count != 0)
      {  
        paddr = (u16)((WriteAddr >> 8) & 0xfffc);//查找頁地址
DF_MainMemoryPagetoBufferTransfer(paddr);
DF_MainMemoryPageProgramThroughBuffer(WriteAddr,pBuffer,count);
DF_AutoPageRewriteThroughBuffer(paddr);
        WriteAddr += count;
        pBuffer += count;
     
      while(NumOfPage--)
      {
        paddr = (u16)((WriteAddr >> 8) & 0xfffc);//查找頁地址
DF_MainMemoryPagetoBufferTransfer(paddr);
DF_MainMemoryPageProgramThroughBuffer(WriteAddr,pBuffer,DF_PageSize);
DF_AutoPageRewriteThroughBuffer(paddr);
        WriteAddr +=  DF_PageSize;
        pBuffer += DF_PageSize;  
      }
      if(NumOfSingle != 0)
      {
        paddr = (u16)((WriteAddr >> 8) & 0xfffc);//查找頁地址
DF_MainMemoryPagetoBufferTransfer(paddr);
DF_MainMemoryPageProgramThroughBuffer(WriteAddr,pBuffer,NumOfSingle);
DF_AutoPageRewriteThroughBuffer(paddr);
      }
      }
  }
return 1;
}
//=========================================================================================
//函數名稱:GetFlashData(u32 readdr, u8 *pBuffer, u16 sizlen)
//輸入:readdr-讀取地址,pBuffer-讀取數據緩存地址,sizlen-數據字節數
//輸出:
//函數功能:從FLASH任意(0-0X7FFFFF)地址讀取任意字節(0-65535)數據
//==========================================================================================
u8 GetFlashData(u32 readdr, u8 *pBuffer, u16 sizlen)
{
if(readdr + sizlen >= DF_FullSize) 
{//如果 超出地址
return 0;
}
DF_ContinusArrayRead(readdr,pBuffer,sizlen);
 
return 1;
}
//=========================================================================================
//函數名稱:
//輸入:
//輸出:
//函數功能:測試讀寫DATAFLASH
//==========================================================================================
void Test_At45db642d(void)
{
#ifdef TEST_AT45DB
 
u16 paddr = 0;
u8 i = 0;
    if(TestAddr < TESTBASE + 0x2000)
{
for(i = 0; i < 32; i ++)
{
TestBuffer[i] = i;
}
paddr = (u16)((TestAddr >> 8) & 0xfffc);
DF_MainMemoryPagetoBufferTransfer(paddr);
DF_MainMemoryPageProgramThroughBuffer(TestAddr,TestBuffer,32);
 
DF_AutoPageRewriteThroughBuffer(paddr);
  for(i = 0; i < 250; i ++)
{
TestBuffer[i] = 0;
}
DF_ContinusArrayRead(TestAddr-32,TestBuffer,96);
TestAddr += 32;
}
#endif
}
 
 
關閉窗口

相關文章

国产精品毛片在线看| 最新69国产成人精品视频免费| 六月丁香综合| 激情小说一区| 欧美男男video| 四虎成人在线视频| 天堂在线资源网| 久久精品波多野结衣| 亚洲成人天堂网| 日本高清不卡三区| 国产精品国语对白| 亚洲天堂网在线观看| 欧美性猛交xxxxx免费看| 99精品视频中文字幕| 亚洲精品免费观看| 亚洲国产合集| 浪潮色综合久久天堂| 超碰在线国产| 欧美成人影院在线播放| 欧美疯狂爱爱xxxxbbbb| 99久久国产免费| 欧美不卡视频在线观看| a级大片在线观看| 午夜久久久精品| 欧美一区二区视频在线播放| 国产精品二区三区四区| 青青久久aⅴ北条麻妃| 亚洲欧美一区二区激情| 欧美乱妇23p| 亚洲在线观看免费视频| 国产日韩精品久久久| 国产一区二区三区免费看 | 亚洲视频导航| 91超碰在线电影| 情事1991在线| av在线这里只有精品| 99精品视频免费全部在线| 久久最新网址| 国产精品香蕉| 欧美经典影片视频网站| 国产精品麻豆成人av电影艾秋| 久久av色综合| 午夜在线激情影院| 麻豆tv入口在线看| 国产大学生校花援交在线播放| 中文日本高清免费| 国产夫妻视频| 99热在线看| 免费黄漫在线观看| 99久久99热久久精品免费看| 男人的天堂视频网站| 成人免费公开视频| 亚洲av无码国产精品永久一区| 自拍偷拍福利视频| 自拍偷拍第八页| 在线观看xxxx| 99热这里只有精品在线观看| 中文字幕一区2区3区| 中文字幕一区二区人妻视频| 日本少妇性生活| 久久久久久欧美精品se一二三四| 99热这里只有精品4| 综合 欧美 亚洲日本| 91麻豆精品国产91久久综合| 青青青视频在线播放| 国产真人真事毛片视频| 五月婷婷综合激情网| 亚洲伦理一区二区三区| 欧美三级日本三级| 久久精品久久精品久久| 天天操天天干视频| 夜夜躁日日躁狠狠久久av| 日本黄色中文字幕| 在线视频 中文字幕| 国产精品-色哟哟| 国产美女永久免费| 人成网站在线观看| 四虎国产成人免费观看| 成人欧美视频在线观看播放| 免费色视频在线观看| 色琪琪原网站亚洲香蕉| 最大av网站| 国产人成在线视频| 黄色av网站在线播放| 国产www视频在线观看| 在线免费看h| 五十路在线视频| 中文字幕av高清片| 在免费jizzjizz在线视频| 美女三级福利视频| 欧美12一14sex性hd| 波多野结衣一区二区| a级网站在线播放| 日韩毛片免费观看| 国产视频一区二区在线播放| 亚洲最好看的视频| 91精品国偷自产在线电影| 亚洲二区精品| 国产精品一区二区在线观看不卡| 91亚洲精品乱码久久久久久蜜桃 | 国产成人av在线播放| 国产精品扒开腿做爽爽爽的视频| 超碰97人人人人人蜜桃| 在线看成人av电影| 国产福利视频在线播放| 亚洲日本久久久| 久久高清无码视频| 国产黄色美女视频| 国产bdsm视频| 一本一道dvd在线观看免费视频| 成人在线观看黄色| av有声小说一区二区三区| 欧美91在线| 亚洲精选国产| 成人午夜激情在线| 亚洲一区二区av电影| 欧美不卡在线视频| 欧美极品美女视频网站在线观看免费| 91免费电影网站| 蜜臀在线免费观看| 久久久久久久久久久影视| 天天鲁一鲁摸一摸爽一爽| 国产农村老头老太视频| www.91在线播放| 日韩资源在线| 黑人一区二区三区| 91成人观看| av成人动漫在线观看| 五月婷婷综合网| 国产一区二区欧美日韩| 国产精品丝袜视频| 国风产精品一区二区| 国产精品一区二区无码对白| 久久久久一区二区| 黄色一级片播放| 性猛交ⅹxxx富婆video| 国产九色91回来了| 一个人看的www在线免费观看 | 国语精品一区| 91理论电影在线观看| 欧美日韩aaa| 亚州av一区二区| 中文精品一区二区三区 | 7799国产精品久久久久99| 日韩欧美在线番号| 日韩在线激情| 麻豆久久婷婷| 亚洲成人黄色影院| www日韩中文字幕在线看| 国产91视觉| www.夜夜爽| av毛片在线免费观看| 四色最新网址| 精精国产xxx在线视频app| 日本不卡电影| 26uuu成人网一区二区三区| 欧美日韩色一区| 欧美在线欧美在线| 日韩在线观看a| 久久高清内射无套| 国产又爽又黄免费视频| 免费av网站在线观看| 亚洲瘦老头同性70tv| 成人免费视频一区| 日韩欧美激情一区| av蓝导航精品导航| 日韩久久久久久久久久久| 中文字幕在线网址| 黄色av免费| 亚洲国产一区二区三区网站| 国产在线精品免费av| 欧美在线播放高清精品| 国产激情视频一区| 成人精品视频一区二区| 黄色在线免费观看| 污视频网站免费| 欧美一级网址| 国产在线精品免费av| 欧美一区二区三区视频| 91久久嫩草影院一区二区| 想看黄色一级片| 精品人妻一区二区三区含羞草 | 视频国产在线观看| 成人日韩视频| 粉嫩在线一区二区三区视频| 日韩欧美亚洲另类制服综合在线| 5566av亚洲| 人妻 日韩 欧美 综合 制服| 韩国av电影在线观看| www免费网站在线观看| 波多野结衣一区| 亚洲精品乱码久久久久久久久| 欧美巨乳美女视频| 国产视频一视频二| 91久久精品无码一区二区| 毛片在线播放网址| 天天做天天爱天天综合网2021| 亚洲乱码一区二区三区在线观看| 色综合久久88色综合天天看泰| 亚洲 自拍 另类小说综合图区| 羞羞影院体验区| 久久国产情侣| 国产一区日韩| 亚洲一二三区在线观看| 日韩av免费看网站| 制服.丝袜.亚洲.中文.综合懂| 日本一区二区免费不卡| 国产乱码在线| 久久99九九99精品| 日韩精品免费在线播放| 四虎免费在线观看视频| 亚洲成人av影片| 美女欧美视频在线观看免费 | 亚洲成人久久网| 亚洲日本无吗高清不卡| www.国产成人| 四虎影院在线域名免费观看| 欧美精品日本| 日韩一区二区三区在线观看| 天堂√在线观看一区二区| 国产无码精品久久久| 91成人福利在线观看| 日本午夜一区| 在线看一区二区| 免费试看一区| 秋霞精品一区二区三区| 成年人视频在线免费观看| 美女久久网站| 亚洲图片在区色| 国产精品69页| 免费精品国产自产拍观看| 国产精品免费精品自在线观看| 久久奇米777| 国产91久久婷婷一区二区| 在线精品一区二区三区| wwwxx在线观看| 日产精品一区二区| 欧美精品免费视频| 日本丰满大乳奶| 精品久久久久中文慕人妻| 女人让男人操自己视频在线观看 | 成人免费视频久久| 亚洲精品久久久北条麻妃| 日韩中文在线| 亚洲高清免费视频| 精品一区二区久久久久久久网站| 奇米影视第四色777| 在线免费观看黄色av| 国产综合一区二区| 久久久久久久激情视频| 亚洲天堂av网站| 97碰碰碰免费公开在线视频| 黄色亚洲大片免费在线观看| 日韩精品视频免费专区在线播放| 无码人妻精品一区二区三区66| 欧美另类videos粗暴黑人| 欧美高清视频看片在线观看| 在线观看av一区| www.夜夜爱| 欧美三级黄视频| 美女精品一区最新中文字幕一区二区三区| 欧美日韩在线第一页| 亚洲人成77777| 色综合视频在线| 亚洲国产中文在线| 在线观看国产精品网站| 男人添女荫道口图片| 精品国产福利一区二区在线| 深爱激情综合网| 亚洲国产精品久久久久秋霞不卡 | 久久精品二区亚洲w码| 九九热精品视频在线播放| 国产黄色网址在线观看| 中文字幕高清在线| 国产精品77777竹菊影视小说| 国产精品高清在线观看| 日本在线视频中文字幕| 51精品在线| 亚洲午夜免费视频| 激情图片qvod| xxxx性欧美黑人| 一区在线视频观看| 九色精品免费永久在线| 黑人狂躁日本娇小| 日本在线观看大片免费视频| 中文字幕一区二区三区不卡在线| 日韩高清av| 四虎成人免费观看在线网址| 成人激情开心网| 一区二区在线视频播放| 中文字幕 自拍| 久操视频在线| 亚洲激情综合网| 国产精品第157页| 成年人网站免费观看| 亚洲欧美大片| 国产91在线播放| 成人黄色片在线观看| 中文字幕亚洲在线观看| 亚洲加勒比久久88色综合| 国产成人av片| 91电影在线播放| 亚洲欧美色综合| www.av毛片| 成人xxx免费视频播放| 精品一区二区影视| 成人高清在线观看| 日韩专区第一页| 你懂的国产精品| 欧美在线性视频| 国产精品玖玖玖| 动漫成人在线观看| aa级大片欧美| 日韩精品久久久毛片一区二区| 欧美jizzhd欧美精品巨大| 亚洲伦伦在线| 成人免费视频a| 高h震动喷水双性1v1| 婷婷综合五月| 日韩av大片在线| 亚洲第一天堂在线观看| 国产精品99在线观看| 欧美成人亚洲成人日韩成人| 欧美一区二区激情视频| 精品国内亚洲2022精品成人| 国产亚洲精品一区二区| 久久久久久久久久网站| 成人av在线播放| 亚洲欧美一区二区精品久久久| 午夜剧场免费在线观看| 在线高清欧美| 国产午夜精品全部视频在线播放| 免费一级肉体全黄毛片| 精品国产一区二区三区性色av| 亚洲精品网站在线播放gif| 久久国产高清视频| 日韩中文字幕在线一区| 久久亚洲私人国产精品va| 成人h动漫精品一区二区下载| 欧美男男gaytwinkfreevideos| 欧美激情一区二区三区成人 | av资源在线免费观看| 欧美成人家庭影院| 最近2019中文字幕在线高清| 黄色片中文字幕| 91亚洲国产成人久久精品| 国产精品精品一区二区三区午夜版 | 国产精品88久久久久久妇女| 国产一级电影网| 亚洲欧洲精品天堂一级| 国产xxxxx视频| 久久bbxx| 精品sm在线观看| 日韩欧美一区二区一幕| 国产毛片一区二区三区| 国产精品ⅴa在线观看h| 亚洲精品久久久成人| 国产精品一区二区果冻传媒| 在线精品亚洲一区二区| 蜜桃专区在线| 色婷婷综合久久久| 天天干天天操天天拍| 国产精品极品在线观看| 欧美激情一二三| 经典三级一区二区三区视频| 精品一区二区三区在线播放 | 日本黄色三级视频| 日精品一区二区| 一区二区91美女张开腿让人桶| 国产香蕉视频在线| 玖玖玖免费嫩草在线影院一区| 韩国福利视频一区| 一本大道久久a久久精品| 国产69精品久久99不卡| 国产特级黄色大片| 羞羞视频在线观看不卡| 精品视频在线导航| 在线视频播放大全| 蜜桃视频在线观看一区二区| 日韩欧美猛交xxxxx无码| 亚洲成a人v欧美综合天堂麻豆| 欧美成人精精品一区二区频| 国产suv精品一区二区33| 国产亚洲在线观看| 国产奶头好大揉着好爽视频| 日本在线观看视频| 精品在线欧美视频| 99国产精品久久久久99打野战| 久久精品国产亚洲一区二区三区| 日本欧美黄色片| 麻豆视频在线看| 欧美激情成人在线视频| 国产丝袜美女| 伊人夜夜躁av伊人久久| 国产99在线 | 亚洲| 欧美亚洲在线日韩| 精品国产91亚洲一区二区三区www| 中文字幕第12页| 日韩精品专区在线| 国产黄色一区二区|