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.

[参考译文] TIDA-00217:在 while (!(UCB0IFG &UCTXIFG0)时被吸入;

Guru**** 2392905 points
Other Parts Discussed in Thread: MSP-FET, TIDA-00217, TMP103, MSP430FR5969, TMP100

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

https://e2e.ti.com/support/tools/simulation-hardware-system-design-tools-group/sim-hw-system-design/f/simulation-hardware-system-design-tools-forum/603462/tida-00217-gets-stucked-at-while-ucb0ifg-uctxifg0

器件型号:TIDA-00217
主题中讨论的其他器件:MSP-FETTMP103MSP430FR5969TMP100

您好!

我完全按照参考设计中所述制造了 TIDA-00217。 但是、当我使用 MSP-FET 运行调试程序时、它会卡在这条线中

while (!(UCB0IFG & UCTXIFG0));


我的 I2C 通信似乎无法与 RF430和 TMP103进行通信。

我已经交叉 检查了 I2C 引脚。 P1.6和 P1.7连接到 B0_SCL 和 B0_SDA。 TIDA-00217中使用的芯片是 MSP430FR5969。


除了引脚之外、我还应该检查其他什么吗? 我曾尝试绕过 RF430模块。 即使使用 TMP103传感器、通信也无法正常工作。


问题可能出在哪里?

 

提前感谢您。

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

    请确认 P1.6是 SDA、P1.7是 SCL、它们都通过4.75kOhm 电阻上拉至 Vcc。 确保每个器件由3.3V 电源供电并具有正确的 GND 连接。 您的设计是否已将 E0/1/2接地? 您能否提供 I2C 线路的示波器或逻辑分析仪图像?

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

    您好!

    是的、我已经根据中给出的参考设计制造了 PCB

    www.ti.com/.../tida-00217。

    我还再次检查了连接。  如本参考设计中所述、MSP430FR5969的 P1.6、P1.7、RF430和 B2的11、12引脚、本地温度传感器的 B1连接到 b0_SCL 和 b0_SDA。

    此外、Vcc 与每个 SCL 和 SDA 之间的电阻约为4.5k 欧姆。

    抱歉、如果我没有给出相同的逻辑分析仪值。 我不熟悉 cc Studio。 但我将该图的起始地址设置为0x0200。 并且 P1OUT 值没有变化。 还有什么可以检查的吗?

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

    由于从器件都不确认起始条件和 MSP430FR5969发送的从器件地址、因此您一直停留在 while 环路中、可以通过评估 UCNACKIFG 来进一步验证该地址。 您将需要找出原因、无论是错误的从器件地址、错误的 I2C 总线还是未正确连接/供电的从器件。 由于引脚设置为 eUSCI 功能、因此评估 P1OUT 寄存器不会有什么好处。

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

    1) 1) RF430的从器件地址为0x0028、TMP103为0x0070。 固件完全未修改。 它也可从 TIDA 00217参考固件下载。

    2) 2)我已经按照您的说明监控了 UCNACKIFG 位。 我已将图形起始地址设置为0x00066c、即 USCI_B0_I2CMode_UCB0IFG 寄存器。 但我注意到、从调试窗口中、该位始终保持为零。

    这是监控图。

    另一个小问题:有没有办法只监视一个位而不是整个寄存器?

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

    为什么在 TMP103模式下 I2C 总线配置为发送模式?  下面是 TMP103.c 中的代码片段

      /*软件复位已启用*/

      UCB0CTL1 |= UCSWRST;

      /* I2C 模式、主模式、同步、发送器*/

      UCB0CTLW0 |= UCMODE_3 + UCMST + UCSYNC + UCTR;  为什么? TM103是否不能为 MSP430提供值?

      /* SMCLK = 8MHz */

      UCB0CTLW0 |= UCSSEL_2;

      /*波特率= SMLK/40 = 200kHz */

      UCB0BRW = 30;

    我还尝试了示例外设程序 eusci_b_i2c_ex2_masterRxSingle.c 针对单个从器件的主器件程序。 我已将从器件地址更改为 TMP103地址0x28

    #define SLAVE_ADDRESS 0x28  

    uint8_t RXData;

    void main (void)

    //停止 WDT

    WDT_A_HOLD (WDT_A_base);

    //将 DCO 频率设置为1MHz

    CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_0);

    //set ACLK = VLO、分频器为1

    CS_initClockSignal (CS_ACLK、CS_VLOCLK_select、CS_clock_divider);

    //set SMCLK = DCO、分频器为1

    CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_Clock_divider);

    //set MCLK = DCO、分频器为1

    CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_Clock_divider);

    //为 I2C 配置引脚

    //将 P1.6和 P1.7设置为辅助模块功能输入。

    /*

    *选择端口1

    *将引脚6、7设置为输入次级模块功能(UCB0SIMO/UCB0SDA、UCB0SOMI/UCB.S)。

    *

    GPIO_setPeripheralModuleFunctionInputPin (

    GPIO_PORT_P1、

    GPIO_PIN6 + GPIO_PIN7、

    GPIO_secondary 模块功能

    );

    //将 P1.0设置为输出引脚。

    /*

    *选择端口1

    *将引脚0设置为输出

    *

    GPIO_setAsOutputPin (

    GPIO_PORT_P1、

    GPIO_PIN0

    );

    /*

    *禁用 GPIO 上电默认高阻抗模式以激活

    *先前配置的端口设置

    *

    PMM_unlockLPM5 ();

    EUSCI_B_I2C_initMasterParam param ={0};

    param.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK;

    param.i2cClk = CS_getSMCLK ();

    param.datarate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS;

    param.byteCounterThreshold = 1;

    param.autoSTOPGeneration =

    EUSCI_B_I2C_SEND_STOP_INALOCK_ON_BYTECOUNT_THRESHOLD;

    EUSCI_B_I2C_initMaster (EUSCI_B0_BASE、param);

    //指定从器件地址

    EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、

    0x0070

    );

    //将主设备设置为接收模式

    EUSCI_B_I2C_setMode (EUSCI_B0_BASE、

    EUSCI_B_I2C_Receive_mode

    );

    //启用 I2C 模块以启动操作

    EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE);

    EUSCI_B_I2C_clearInterrupt (EUSCI_B0_BASE、

    EUSCI_B_I2C_Receive_INTERRUPT0 +

    EUSCI_B_I2C_BYTE_COUNTER_INTERRUPT

    );

    //启用主机接收中断

    EUSCI_B_I2C_enableInterrupt (EUSCI_B0_BASE、

    EUSCI_B_I2C_Receive_INTERRUPT0 +

    EUSCI_B_I2C_BYTE_COUNTER_INTERRUPT

    );

    while (1)

    _DELAY_CYCLES (2000);

    // I2C 启动条件

    RXData = EUSCI_B_I2C_masterReceiveSingleByte (EUSCI_B0_BASE);

    它会卡在轮询接收中断标志中!

    摘要:- 我想知道为什么固件配置为传输模式。 如果我仍在示例程序中轮询 、这意味着什么?

    是否有一个简单的程序将 MSP430FR5969和 TMP103接口连接到接收温度?

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

    固件按照 TMP103数据表图3中所示的顺序配置为传输模式、其中在读取数据字节寄存器之前首先将指针寄存器字节发送到从器件。  在 Temp_Read 函数中、您可以看到发送了 TEMP_REG、然后清除了 UCTR 位、并在重复启动后进行数据读取。  该序列遵循标准 I2C 协议、您的代码示例可能需要执行同样的操作才能正常工作。  我知道的最接近的代码示例使用 MSP430G2xx3和 TMP100。  如果您使用的是除"A"以外的 TMP103x 型号、则您的从器件地址将不正确。

    e2e.ti.com/.../msp430g2xx3_5F00_uscib0_5F00_i2c_5F00_01.c

    此致、Ryan

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

    感谢您的解释。 现在、我了解了为什么在传输模式下配置 I2C 总线。 因此、我尝试使用从 TMP103读取温度数据

    temp_I2C_Init();和 tmp103.c.中的 Temp_read()函数 但我再次陷入困境

    while (!(UCB0IFG & UCTXIFG0));

    UCB0TXBUF = TEMP_REG;

    TEMP_REG 代码无法获取转码。

    这是我的修改后的代码。 只修改 main()中的值。

     

    void main (void)

    volatile unsigned int test = 0;

    volatile unsigned int flags = 0;

    //unsigned char read_data[200];

    MSP430_Init();

    temp_I2C_Init();

     

    while (1)

    LOW_POWER_DELAY_ms (1);

    temp_read();

    LOW_POWER_DELAY_ms (4000);//在下一个温度读数前延迟4秒。

    while (!(READ_Register (STATUS_REG)& READY));//等待就绪位被置位

    代码卡在 Temp_read()函数处。


    是否有任何函数仅用于检查 I2C 从设备是否存在。 如  TI_USCI_I2C_MASTER.c 文件中的函数。 TI_USCI_I2C_SLAVE_Present ()。 我在 MSP430FR5969中找不到任何指示从器件是否存在的 I2C 函数。  

    使用此功能、我可以检查温度传感器是否损坏。  

     

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TI_USCI_I2C_SLAVE_IST()在评估 UCNACKIFG 以查看从器件是否确认了地址时,只需发送一个起始、从器件地址和停止条件,即可根据需要轻松复制。

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

    您好、Ryan、

    很抱歉回复迟到了。 我已经制造了新的 TIDA 00217板并运行了该程序。 它这次起作用了。 上一个问题可能是由于 MSP 430和其他 组件之间的连接不当造成的。

    现在、我对 NFC 读取器还有一个疑问。 哪种读取器能够读取4b 类标签。 因为 RF430CL330是 NFC 4B 类应答器。 您认为 NXP 的 Explore NFC  可以实现这一点吗?

    我有 用于读取3B 类 NDEF 消息的固件。 您是否认为相同的固件可用于读取 RF430CL330应答器的 NDEF 消息?

    提前感谢您。

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

    我很高兴听到您取得了一些进展。 我没有足够的 NFC 技术知识来回答您的后续问题、您应该参考 NFC/RFID 论坛。

    此致、
    Ryan