FM25CL64铁电存储器的问题

2019-03-23 22:16发布

用SPI读FM25CL64铁电存储器状态,为什么收到的都是发送数据。
比如发送0x05,收到的也是0x05,
另:没有将SPI设置成内部连接



#define RDSR  0x05


Uint16 FM25CL64_Read(Uint16 address);
void FM25CL64_Write_Enable(void);
void FM25CL64_Write(Uint16 address,Uint16 data);
Uint8 FM25CL64_Read_Status();
Uint16 SpiWrite(Uint16 data);
Uint16 Spi_TxReady(void);
Uint16 Spi_RxReady(void);
//函数:Init_Spi_GPIO
//变量:无
//返回值:无
//功能:设置GPIO口B组54-57
void Init_Spi_GPIO(void)
{
   EALLOW;
   //SPISIMOA端口设置
   GpioCtrlRegs.GPBMUX2.bit.GPIO54=1;
   GpioCtrlRegs.GPBQSEL2.bit.GPIO54=3;
   
   //SPISOMOIA端口设置   
   GpioCtrlRegs.GPBMUX2.bit.GPIO55=1;
   GpioCtrlRegs.GPBQSEL2.bit.GPIO55=3;
   
   //SPICLKA端口设置   
   GpioCtrlRegs.GPBMUX2.bit.GPIO56=1;
   GpioCtrlRegs.GPBQSEL2.bit.GPIO56=3;
  
   //SPISTEA端口设置  
   GpioCtrlRegs.GPBMUX2.bit.GPIO57=0;
   GpioCtrlRegs.GPBDIR.bit.GPIO57=1;
   EDIS;
}
//函数:InitSpi
//变量:无
//返回值:无
//功能:对SPI模块进行初始化
void InitSpi(void)
{
   // Initialize SPI-A:
   SpiaRegs.SPICCR.all=0x0007;//SPI软件复位
   SpiaRegs.SPICTL.all=0x0006;       //Interrupt disabled
   //SpiaRegs.SPISTS.all=0x0000;
   SpiaRegs.SPIBRR =9;           // Baud rate  30Mhz /(9 + 1) = 3MHz
   SpiaRegs.SPIPRI.all = 0x30; // free run
   SpiaRegs.SPICCR.all=0x0087;//使SPI退出复位状态
   SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
   SpiaRegs.SPICTL.bit.CLK_PHASE   = 0;//选择0模式
  
   //tbd...

}

Uint8 FM25CL64_Read_Status()
{
Uint8 status;
GpioDataRegs.GPBCLEAR.bit.GPIO57 = 1;//使能
SpiWrite(RDSR);
    status= SpiWrite(0xFF);
    GpioDataRegs.GPBSET.bit.GPIO57 = 1;//关闭使能
//判断SPI发送准备好
return status;
}
/函数:SpiWrite
//变量:Uint16 data,SPI传输的数据
//返回值:无
//功能:实现SPI传输数据的功能
Uint16 SpiWrite(Uint16 data)
{
   Uint8 ret;
   SpiaRegs.SPITXBUF = data;
   while(Spi_RxReady() == 0);
   ret = SpiaRegs.SPIRXBUF>>8;
   DELAY_US(10);
   return ret;
}
//函数:Spi_TxReady
//变量:无
//返回值:无
//功能:描述SPI具备发送的条件
Uint16 Spi_TxReady(void)
{
Uint16 in;
if(SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1)
{
  in = 0;
}
else
{
  in = 1;
}
return(in);
}
//函数:Spi_RxReady
//变量:无
//返回值:无
//功能:描述SPI具备发送的条件
Uint16 Spi_RxReady(void)
{
Uint16 im;
if(SpiaRegs.SPISTS.bit.INT_FLAG == 1)
{
  im = 1;
}
else
{
  im = 0;
}
return(im);
}

void main(void)
{
//int i,j,k;
Init_Spi_GPIO();
   InitSpi();
while(1)
{       FM25CL64_Read_Status();
  }
}



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
英尚微电子
2019-03-24 07:38
< 参考一款跟铁电存储器类似的产品叫做MRAM存储器,容量比铁电存储器大,资料共享
Everspin MRAM产品介绍.pdf (1.05 MB, 下载次数: 1) 2019-3-5 09:55 上传 点击文件名下载附件
everspin mram产品介绍

一周热门 更多>

相关问题

    相关文章