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.

[参考译文] MSP430FR6877:SPI 环回残桩

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/938071/msp430fr6877-spi-loopback-stucks

器件型号:MSP430FR6877

我与 MFRC522之间的 SPI 通信存在问题、因此我尝试使用 SPI 监听模式来测试配置、但当我这么做时、SPI 残桩在等待 从未设置的 UCRXIFG。 是否应在监听模式下设置它?

我的初始化代码:

//初始化主
EUSCI_B_SPI_initMasterParam param ={0};
param.selectClockSource = EUSCI_B_SPI_CLOCKSOURCE_SMCLK;
param.SourceClockFrequency = CS_getSMCLK ();
param.desiredSpiClock = 4000000;
param.msbFirst = EUSCI_B_SPI_MSB_FIRST;
param.clockPhase = eUSCI_B_SPI_PHASE_DATA_COPEDULGE_ONFIRST_CHANGE_ON_NEXT;
param.clock极 性= eUSCI_B_SPI_CLOCKPOLAR_INACT_LOW;
param.spiMode = eUSCI_B_SPI_3Pin;
eUSCI_B_SPI_initMaster (eUSCI_B1);param_B1和 param_B1基本值;param_B1
UCB1STATW |= UCLISTEN;
//启用 SPI 模块
EUSCI_B_SPI_ENABLE (EUSCI_B1_BASE); 

我的测试代码:

unsigned char ByteCount=0、dumm=0、workingaddr= addr;

P9OUT &=~μ F 引脚;//CS

//__delay_cycles (10);

UCB1IFG &=~UCRXIFG;
EUSCI_B_SPI_transmitData (EUSCI_B1_base、addr);
while (!(UCB1IFG & UCRXIFG));
虚拟= EUSCI_B_SPI_receiveData (EUSCI_B1_BASE);

while (ByteCount < len)
{ workingaddr += inc;
UCB1IFG &=~UCRXIFG;
eUSCI_B_SPI_transmitData (eUSCI_B1_base、workingaddr);
while (!(UCB1IFG & UCRXIFG));
DATA[ByteCount]= EUSCI_B_SPI_receiveData (EUSCI_B1_BASE);
ByteCount++;
}

//__delay_cycles (10);

P9OUT |=引脚;//CS 

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

    我将此代码放在 FR6989 Launchpad 上、运行正常。 如果启用了 SPI 时钟、则每个 Tx 都应获得一个 RXIFG、无论是否启用 UCLISTEN。 我没有看到 FR6877的任何相关勘误表、因此我希望它的行为相同。

    我们必须采取不同的行动。

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

    回送模式似乎在仿真器上不起作用、当我在硬件上尝试时、它起作用。

    但是、有人能为我 提供 MFRC522帮助、SOMI 线始终处于高电平。

    在开始与其通信之前、我升高其复位引脚、但我不确定是什么问题?

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

    您使用的是什么板? 具体而言、I2C 和 EA 引脚是如何设置的? 如果 SOMI 始终为高电平、则会与 I2C_EA=0 (UART-Tx)保持一致。 [参考数据表(文档112139修订版3.9)表5]。

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

    很抱歉未显示详细信息。

    我在  SPI 3引脚模式下使用 MSP4306877通过 UCB1连接到 MFRC522。 SPI 配置如下(已在上面提到):

    //初始化主
    EUSCI_B_SPI_initMasterParam param ={0};
    param.selectClockSource = EUSCI_B_SPI_CLOCKSOURCE_SMCLK;
    param.SourceClockFrequency = CS_getSMCLK ();
    param.desiredSpiClock = 4000000;
    param.msbFirst = EUSCI_B_SPI_MSB_FIRST;
    param.clockPhase = eUSCI_B_SPI_PHASE_DATA_COPEDULGE_ONFIRST_CHANGE_ON_NEXT;
    param.clock极 性= eUSCI_B_SPI_CLOCKPOLAR_INACT_LOW;
    param.spiMode = eUSCI_B_SPI_3Pin;
    eUSCI_B_SPI_initMaster (eUSCI_B1);param_B1和 param_B1基本值;param_B1
    UCB1STATW |= UCLISTEN;
    //启用 SPI 模块
    EUSCI_B_SPI_ENABLE (EUSCI_B1_BASE); 

    端口配置如下:

    /*设为主函数*/
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P3、(GPIO_PIN0|GPIO_PIN1|GPIO_PIN2)、GPIO_PRIMARY_MODULE_FUNCTION);
    
    /*将 RFID 复位引脚配置为输出*/
    GPIO_setAsOutputPin (GPIO_PORT_P4、GPIO_PIN5);
    GPIO_setOutputLowOnPin (GPIO_PORT_P4、GPIO_PIN5);
    
    /*将 RFID 芯片选择引脚配置为输出*/
    GPIO_setAsOutputPin (GPIO_PORT_P9、GPIO_PIN3);
    GPIO_setOutputHighOnPin (GPIO_PORT_P9、GPIO_PIN3); 

    通信序列如下:

    1-将 RESET 引脚设置为高电平:

    P4OUT &=~GPIO_PIN5;
    __DELAY_CYCLES (50);//wait 50 micro for full-on shutdown
    P4OUT |= GPIO_PIN5;
    __DELAY_CYCLES (50000);//等待50毫秒以启动//退出断电模式。 这将触发硬复位。 

    2-将命令寄存器设置为空闲:

    unsigned char dummy=0、i=0;
    P9OUT &=~GPIO_PIN3;//将 CS 设置为低电平以选择芯片
    
    while (UCB1STATW 和 UCBUSY);//确保总线未被使用
    UCB1TXBUF=(0x01<1);
    while (!(UCB1IFG & UCTXIFG));//等待 TX bufer 中的聊天室
    UCB1TXBUF= 0x10;
    while (UCB1STATW 和 UCBUSY);//等待通信完成
    dummy=UCB1RXBUF;//清除 rxREADY 标志
    虚拟++;
    
    P9OUT |= GPIO_PIN3;//将 CS 设置为高电平以取消选择芯片 

    3 -我在发送地址后尝试读取任何寄存器、但它始终返回高电平。

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

    Loobpack 未启用。 这条线路仅用于测试。

    UCB1STATW |= UCLISTEN; 

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

    您使用的是什么板? 具体而言、I2C 和 EA 引脚是如何设置的? 如果 SOMI 始终为高电平、则会与 I2C_EA=0 (UART-Tx)保持一致。 [参考数据表(文档112139修订版3.9)表5]。

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

    抱歉、我没有意识到您对 I2C 和 EA 引脚的问题。

    我不使用 I2C 和 EA 引脚悬空的标准板、因此在这种情况下、它可以在 SPI 模式下工作吗? 是否有任何解决方案无需更新硬件?

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

    我在这些引脚上看不到任何有关内部上拉/下拉的信息。 它们是否真的没有连接到任何设备? 或者、您能否将其连接到 MCU 并使用 GPIO 进行设置?

    也许原理图(甚至照片)会有所帮助。