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.

[参考译文] MSP430FR2433:与 PN532进行 SPI 通信

Guru**** 2540720 points
Other Parts Discussed in Thread: MSP430FR2433

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1051684/msp430fr2433-spi-communication-to-pn532

器件型号:MSP430FR2433

您好、e2e、

我在尝试通过 SPI 与 MSP430FR2433和 PN532通信时遇到问题。 问题是、我想获取 PN532的版本、为此、我必须向 PN532发送以下命令:{0X00、0X00、0XFF、0X020XFE、0XD4,0X02,0X2A、0x00}。 发送该命令后,您应该会收到 PN532的响应,该响应应如下所示:[00 00 FF 00 FF 00]
和[00 00 FF D5 03 32 01 06 07 E8]。

问题是我设法很好地发送命令、但我始终接收到0xFF。。 我不知道故障会发生在哪里。

#include "nfc.h"
#include "msp430.h"


unsigned char RXData =0;
unsigned char TXData =0;


unsigned char nfc_buff[NFC_CMD_BUF_LEN];
static const unsigned char version_buff[35] = {0X00,0X00,0XFF,0X02,0XFE,0XD4,0X02,0X2A,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};

void Configuracion_SPI_B(void);
unsigned int get_version(void);
void PIN_config(void);



unsigned int get_version(void);

int main()
{
   WDTCTL = WDTPW | WDTHOLD;

   PIN_config();

   Configuracion_SPI_B();

   PM5CTL0 &= ~LOCKLPM5;

   __enable_interrupt();

       while(1)
        {
           get_version();

while(1);

        }
}



void Configuracion_SPI_B(void)
{
    UCB0CTLW0 |= UCSWRST;
    UCB0CTLW0 |= UCMST|UCSYNC|UCCKPL|UCMSB|UCMODE_1|UCSTEM;
    UCB0CTLW0 |= UCSSEL__SMCLK;
    UCB0CTLW0 &= ~UCSWRST;

    P1SEL0 |= BIT4 | BIT5 | BIT6 | BIT7 | BIT3 | BIT2 | BIT1 | BIT0;
}

unsigned int get_version(void)
{

    /*ENVIAR COMANDO*/
       unsigned char m;
       for(m=0;m<35;m++)
         {
           TXData =version_buff[m];

               UCB0IE |= UCTXIE;


               __bis_SR_register(LPM3_bits);

               nfc_buff[m] = RXData ;
         }
return 1;

}



#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_B0_VECTOR
__interrupt void USCI_B0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_B0_VECTOR))) USCI_A0_ISR (void)
#else
#error Compiler not supported!
#endif
{
  switch(__even_in_range(UCB0IV,USCI_SPI_UCTXIFG))
  {
    case USCI_NONE: break;
    case USCI_SPI_UCRXIFG:
           RXData = UCB0RXBUF;
           UCB0IFG &= ~UCRXIFG;
           __bic_SR_register_on_exit(LPM3_bits);
           break;
    case USCI_SPI_UCTXIFG:
          UCB0TXBUF = TXData;
          UCB0IE &= ~UCTXIE;
          UCB0IE |= UCRXIE;

          break;
    default: break;
  }
}


void PIN_config(void)
{

       P1DIR|=0xF7; // Registro para indicar si el pin del puerto 2 es entrada o salida. 0=entrada    1=salida.

       P1SEL0 |= BIT3 | BIT2 | BIT1 | BIT0;

       P1REN |= 0x08;


       P1OUT |= 0x08;


}