MSP430F47187和SST25VF080B的SPI通信有问题,主控芯片发送的时序正确,但是一直是FF

2019-03-24 09:03发布

void Init_CLK(void)
{
  unsigned int i;

  FLL_CTL0 |= XCAP10PF;                     // Set load capacitance
  FLL_CTL1 &= ~XT2OFF;                      // 打开 XT2

  do
  {                   // 清除OSCFault标志
    IFG1 &= ~OFIFG;
    for(i = 0x20; i > 0; i--);
  }
  while((IFG1 & OFIFG) == OFIFG);//如果OSCFault =1

  FLL_CTL1 = SELS;                          // Select SMCLK source as XT2CLK
  FLL_CTL2 |= XT2S_2;       //XT2频率范围选择为3~16MHz
  FLL_CTL1 += SELM_XT2;   //MCLK的时钟源为XT2CLK
  return;
}

void delayus(uint x)
{
  uint a;
  for(a=0;a<x;a++);
//   for(b=4;b>0;b--);   //之前没有
}
void delayms(uint y)
{
  uint a,b;
  for(a=0;a<y;a++)
    for(b=800;b>0;b--);  //b=800  3200
}

//***************************************************************************//
//                                                                             //
//函数:void Init_SSTSPI(void)                                               //
//说明: 初始化SPI接口,P1.3:CE,P2.1:SIMO,P2.2:SOMI,P2.3:CLK                  //
//                                                                             //
//***************************************************************************//
void Init_SSTSPI(void)
{  
  P2SEL = 0x0E;         //setup P2 for SPI mode
  P1DIR |= BIT3 + BIT7;
  P1OUT |= BIT3 + BIT7; //STE = 1
  //P2REN |= 0x01;
  UCB1CTL0 = UCMSB + UCMST  + UCSYNC;  //Polarity,Master,8-bit, 3-Pin SPI
  UCB1CTL1 = UCSSEL1 + UCSWRST;  //SMCLK,UCSSEL1

  UCB1BR0 = 0x04; //setup baud rate,2M
  UCB1BR1 = 0x00;//
  UCB1CTL1 &= ~UCSWRST;  //SPI Enable
}

//***************************************************************************//
//                                                                             //
//函数:void SSTSPI_SendByte(unsigned long, unsigned char)                      //
//说明: SPI发送一个数据                                                       //
//参数:                                                                     //
//                                                                             //
//***************************************************************************//
void SSTSPI_SendByte(uchar byte)   
{
  while((UC1IFG & UCB1TXIFG)==0);
  UCB1TXBUF = byte ;                       
  delayus(1);
}

//***************************************************************************//
//                                                                             //
//函数:void SSTSPI_SendByte(unsigned long, unsigned char)                      //
//说明: SPI发送一个数据                                                       //
//参数:                                                                     //
//                                                                             //
//***************************************************************************//
uchar SSTSPI_ReciveByte(void)   
{
  uchar data=0;
  while((UC1IFG & UCB1RXIFG)==0); //等待发送完成
  data = UCB1RXBUF;
  return data;
}

//***************************************************************************//
//                                                                             //
//函数:void Read_JEDECID(char *)                                            //
//说明: 读取SST25VF016B器件ID                                                      //
//                                                                             //
//***************************************************************************//
uchar Read_JEDECID(void)
{
  uchar data = 0;
  P1OUT &= ~BIT3;
  SSTSPI_SendByte(0x9F); // 读JEDEC ID
  SSTSPI_SendByte(0xFF);
  data = SSTSPI_ReciveByte();
  //SSTSPI_SendByte(0xFF);
  //*(data+1) = SSTSPI_ReciveByte();
  //SSTSPI_SendByte(0xFF);
  //*(data+2)  = SSTSPI_ReciveByte();
  //delayus(1);
  P1OUT |= BIT3;
  return data;
}

/********************Main********************/
void main(void)
{
  uchar a=0;

  WDTCTL = WDTPW + WDTHOLD; //关闭看门狗

  Init_CLK();               //初始化时钟
  Init_SSTSPI();              //初始化SPI
  delayms(100);             //延时

  a = Read_JEDECID();
}
以上是我的程序,查看了也没发现问题,SOMI线的时序是像下面这张图一样的,黄 {MOD}的是SOMI线,蓝 {MOD}的是SCLK线


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
summerszcy
1楼-- · 2019-03-24 12:17
< SOMI信号线一直处于抖动状态,硬件结构部分已经加了3.3V上拉
电子微创意
2楼-- · 2019-03-24 17:37
< :TI_MSP430_内容页_SA7 --> 要注意SPI极性是否与器件要求的一致

一周热门 更多>

相关问题

    相关文章