This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F5324驱动CC1101时SO不能拉低,一直输出高电平

Other Parts Discussed in Thread: MSP430F5324, CC1101

您好,我使用TI的MSP430F5324驱动CC1101是,使用SPI进行通信,但是CC1101的SO口一直输出高电平,SPI使用的是P4.1 P4.2 P4.3三线控制。

下面是spi的初始化代码

void spi_init(void)
{
      P4SEL |= BIT1+BIT2+BIT3;                    // P4.0,1,2,3 option select
      P4DIR |= (BIT0+BIT1+BIT3);	                // P4.0(CSn):输出,P4.1(SIMO):输出,P4.3(SMCLK):输出
      
      /********SpiInit***************/             
      UCB1CTL1 |=UCSWRST;                         // 复位
      UCB1CTL0 |=UCCKPH+UCMSB+UCMST+UCSYNC;       // 上升沿发送数据,MSB,三线主机,同步
      UCB1CTL0 &=~UCCKPL;
      UCB1CTL1 |=UCSSEL_2;                        // SMCLK
      UCB1BR0=0x02;
      UCB1BR1=0;
      UCB1CTL1 &= ~UCSWRST;                       // **Initialize USCI state machine**  
      UCB1IE |=UCRXIE;                            // Enable USCI_A0 RX interrupt

}
能否问下,CC1101的so一直不能拉低,是不是芯片坏了?但是GDO0的波形输出正常。
  • 你CC1101驱动用的什么代码?为啥只接三线?

  • 完整的接线引脚是P2.0--GDO0  P2.1--GDO2  P4.0--CS P4.1--SI P4.2--SO P4.3--CLK

  • 初始化代码如下:

    #define  GDO0      			P2IN & BIT0		//P2.0
    #define  GDO2                           P2IN & BIT1             //P2.1
    #define  SNOP      			0x3D;
    #define  CSn_1    			P4OUT |=  BIT0	          //CSn=1,不选中
    #define  CSn_0     			P4OUT &=~ BIT0	          //CSn=0,片选
    #define  Wait_CC1100_Ready()	        P4IN&BIT2                   //等待SO引脚为低
    #define  SPI_WaitSendEnd()		{ while(!(UCB1IFG&UCRXIFG));}     //等待SPI发送结
    #define  CC1100_receive_int_EN()          {P2IFG &=~BIT0; P2IE |= BIT0;}
    
    

    //初始化CC1100使用MCU的IO与SPI模块
    void    CC1100PortAndSpiInit(void)
    {
        P2SEL &=~(BIT0+BIT1);               // P2.0、P2.1为I/O口功能 P2.0<GDO0> P2.1<GDO2>
        P2DIR &=~(BIT0+BIT1);               // P2.0、P2.1为输入模式
        P2IES &=~BIT0;                      // GDO0	上升沿使标志位置位
        P2IFG &=~BIT0;                      // GDO0 中断标志位复位
        P2IE |= BIT0;                       // GDO0允许中断请求  
        
        spi_init();
        CSn_1;	                        // P4.0(CSn):输出0
        
    }
    
    //复位CC1100
    void Manual_Reset_CC1100() 
    {
        CSn_1;
        Delay_us(1);
        CSn_0 ;
        Delay_us(1);
        CSn_1;P2OUT ^= BIT6;
        Delay_us(135);P2OUT ^= BIT6;
        RESET_CC1100(); //复位CC1100
    }
    
    //复位CC1100
    unsigned char RESET_CC1100(void)
    {
        unsigned char j = 0;
        CSn_0;
        do{
            j++;
            if(200 == j) {j = 0; return 0;}
        }while(Wait_CC1100_Ready());
        //while(Wait_CC1100_Ready());
        UCB1TXBUF=CC1100_SRES;
        SPI_WaitSendEnd();
        do
        {
            j++;Delay_us(2);
            if(200 == j)
            {
                j = 0; return 0;
            }
        }while(Wait_CC1100_Ready());
        //while(Wait_CC1100_Ready());
        CSn_1;
        return 0;
    }
  • CC1101是作为slave在和MCU 通讯的,所以你的CC1101的SO没有信号,一直为高电平。如果你同时观察CLOCK是有波形的话,意味着你的CC1101输出的都是FF。

    另外,你是怎么让CC1101输出数据的?对于SPI通讯来说,SLAVE的数据是靠MASTER顶出来的。所以你要让slave输出数据,需要在MASTER发送dummy数据这样才会有clock输出,把SLAVE buffer中的数据顶出来。

  • 您好,已经解决了,是CC1101底部焊盘接地不稳定造成的,谢谢!