打印

STR710F的SPI接口驱动EEPROM型号为AT25128

[复制链接]
2353|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangqiqing|  楼主 | 2011-2-24 10:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STR710F的SPI接口驱动EEPROM型号为AT25128,时序也没什么问题,结果却不对,请高手指点
/**************************C文件****************************/
#include "at251.h"
//#include  "bspi.h"
/////////////////////////////////////////////////////////////////////////
  
void BSPI1_init(void)
{
  GPIO_Config(GPIO0, 0x0070, GPIO_AF_PP);// GPIO_Config(GPIO0, 0x00F0, GPIO_AF_PP); //Configure GPI00 on mode Alternate function Push Pull
  GPIO_Config(GPIO0, 0x0080, GPIO_OUT_PP);
  BSPI_Init(BSPI1);  
  BSPI_ClockDividerConfig(BSPI1, 8);  //Configure Baud rate Frequency :-->APB1/8
  BSPI_Enable(BSPI1, ENABLE);    //Enable BSPI1
  BSPI_MasterEnable(BSPI1, ENABLE);
  BSPI_ClkActiveHigh(BSPI1, ENABLE);  //Configure the clock to be active high
  BSPI_ClkFEdge(BSPI1, DISABLE);   //Enable capturing the first Data sample on the first edge of SCK
  BSPI_8bLEn(BSPI1, ENABLE);    //Set the word length to 8 bit
  BSPI_RcFifoDepth(BSPI1, 7);    //Configure the depth of receive to 5 word
}

/////////////////////////////////////////////////////////////////////////////
void AT251_init(void)
{  
   BSPI1_init();
   GPIO_BitWrite(GPIO0,0x07,1);//ss=1;
}
/////////////////////////////////////////////////////////////////////////////////////
u8 AT251_readbyte(u16 addr)
{
  u8 buf;
  GPIO_BitWrite(GPIO0,0x07,0);//ss=0;
  BSPI_WordSend(BSPI1,READ);
  AT251_AddrWrite(addr);
  buf=BSPI_WordReceive(BSPI1);
  GPIO_BitWrite(GPIO0,0x07,1);//ss=1;
  return(buf);
}
//////////////////////////////////////////////////////////////////////////////////
void AT251_CmdWrite(u8 cmd)
{  
    GPIO_BitWrite(GPIO0,0x07,0);//ss=0;
    BSPI_WordSend(BSPI1, cmd);
    GPIO_BitWrite(GPIO0,0x07,1);//ss=1;  
}
////////////////////////////////////////////////////////////////////////////////
void AT251_AddrWrite(u16 addr)
{
BSPI_WordSend(BSPI1,(u8)(addr>>8));
BSPI_WordSend(BSPI1,(u8)addr);

}
//////////////////////////////////////////////////////////////////////
void AT251_ByteWrite(u16 addr,u8 data )//指定地址写一个字节
{int i;

AT251_CmdWrite(WREN);//WRITE ENABLE
GPIO_BitWrite(GPIO0,0x07,0);//ss=0;AT251_CmdWrite(WRITE);
BSPI_WordSend(BSPI1,WRITE);
AT251_AddrWrite(addr);
BSPI_WordSend(BSPI1,data);
GPIO_BitWrite(GPIO0,0x07,1);//ss=1;
AT251_CmdWrite(WRDI );//写禁止
for(i=0;i<40;i++);

}
//////////////////////////////////////////////////////////////////////////////////
u8 CheckStatus()
{ u8 S;
  //AT251_CmdWrite(WREN);//WRITE ENABLE
  GPIO_BitWrite(GPIO0,0x07,0);//ss=0;
  BSPI_WordSend(BSPI1,RDSR);
  S=BSPI_WordReceive(BSPI1);
  GPIO_BitWrite(GPIO0,0x07,1);//ss=0;
  return S;
  
}
/////////////////////////////////////////////////////////////////////////////////////
void AT251_DataRead(u8 *buf,u16 addr1,u16 addr2,u16 lastcounts)//指定地址读取指定个数据
{
u16 j,m;
u16 dataword;
//AT251_CmdWrite(WREN);
for(j=addr1;j<addr2;j++)
  {
   GPIO_BitWrite(GPIO0,0x07,0);//ss=0;
   BSPI_WordSend(BSPI1,READ);//AT251_CmdWrite(READ);
   dataword=(j-1);//dataword=32*(j-1);
   AT251_AddrWrite(dataword);
   buf[(j-addr1)]=BSPI_WordReceive(BSPI1);
   //for(m=0;m<8;m++);
   GPIO_BitWrite(GPIO0,0x07,1);//ss=1;
  }
  
}
///////////////////////////////////////////////////////////////////////////////////////////////
u8 AT251_DataWrite(u8 *buf,u16 addr1,u16 addr2,u16 lastcounts)//指定地址读取指定个数据
{   u8 j,m ;
   u8 databyte ;
   u16 dataword ;
    for(j=addr1;j<addr2;j++)
    { databyte=CheckStatus(READY_BUSY);
      if(databyte) return(1);
      AT251_CmdWrite(WREN);
      GPIO_BitWrite(GPIO0,0x07,0);//ss=0;
      BSPI_WordSend(BSPI1,WRITE);
      dataword=(j-1);
   AT251_AddrWrite(dataword);
   BSPI_WordSend(BSPI1,buf[j-addr1]);
   //for(m=0;m<8;m++);
  
   GPIO_BitWrite(GPIO0,0x07,1);//ss=1;
    }
   
  return(0);
}
沙发
zhangqiqing|  楼主 | 2011-2-24 10:34 | 只看该作者

有人在吗,可能有点小错误,但不知在哪里,望有人帮忙

本帖最后由 zhangqiqing 于 2011-2-24 10:41 编辑

:)

使用特权

评论回复
板凳
zhangqiqing|  楼主 | 2011-2-24 10:35 | 只看该作者

请各位赐教,小弟很急啊

本帖最后由 zhangqiqing 于 2011-2-24 10:37 编辑

/**********************主函数如下:***************************/
#include "71x_lib.h"
#include "at251.h"
#include "uart.h"
#define UART2_Rx_Pin (0x0001<<13)  // TQFP 64: pin N?5  , TQFP 144 pin N?9
#define UART2_Tx_Pin (0x0001<<14)  // TQFP 64: pin N?6  , TQFP 144 pin N?10
#define UART3_Rx_Pin (0x0001<<1)   // TQFP 64: pin N?52 , TQFP 144 pin N?123
#define UART3_Tx_Pin (0x0001<<0)   // TQFP 64: pin N?53 , TQFP 144 pin N?124
#define Use_UART3
#ifdef Use_UART3
#define UARTX UART3
#define UARTX_Rx_Pin UART3_Rx_Pin
#define UARTX_Tx_Pin UART3_Tx_Pin
#endif  /*Use_UART2 */

char buf_TX[22]="aaaaaaaaaaaaaaaaaaaaa";
char buf_RX[22]="11111111111111111111\n";
void def_extclock(void);
void MY_UART_init3(void);
void Main(void)
{

int i;
#ifdef DEBUG
debug();
#endif
   
      def_extclock(); //将CKOUT 分为 48 Mhz   
      MY_UART_init3(); //UART初始化,包括管脚设置,波特率设置,及发送或接收使能等
      AT251_init();   
     
  while(1)
    {
       AT251_DataWrite((u8 *)buf_TX,1,10,0);
       or(i=0;i<50000;i++);      
       AT251_DataRead((u8 *)buf_RX,1,10,0);
       UART_DataSend(UARTX, (u8 *)buf_RX,20);
     }
}

使用特权

评论回复
地板
smttiepian| | 2011-2-24 10:48 | 只看该作者
:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

12

帖子

1

粉丝