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.

[参考译文] MSP430F2370:具有 TRF7970A 的定制 NFC 板

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/814673/msp430f2370-custom-nfc-board-with-trf7970a

器件型号:MSP430F2370
主题中讨论的其他器件:TRF7970A

您好!

我有一个基于 MSP430F2370 和 TRF7970A 的定制板。 该设计基于 TI 的 TRF7970AEVM http://www.ti.com/tool/trf7970aevm

我将 TI 的代码示例用于 TRF7970AEVM http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=sloc300&fileType=zip

我刷写了软件、但它卡在某个位置。

main.c Iso14443aFindTag()-> Trf797xTurnRfOn()-> Trf797xReadSingle()-> SpiReadSingle() at while (UCB0STAT 和 UCBUSY)

请帮助我找到根本原因

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

    Madhu、您好!

    我将把它移到支持 NFC 的 E2E 上。   

    谢谢、

    JD

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

    Madhu、您好!

    TRF7970AEVM 已停产、其软件不受支持、因为它具有许多毛刺脉冲。

    我建议将此软件移植到您的板上、它将在该 MCU 上运行良好、并已进行大量更新和测试、因此它非常强大: www.ti.com/.../sloc297

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

    您好、Ralph、

    感谢您的建议。 我开始移植并更改 了 www.ti.com/.../sloc297 以与 msp430f2370配合使用 、但在定制板中、msp430f2370的 XIN 引脚连接到 TRF7970A 的 SYS_CLK。

    我不熟悉 MSP、因此我必须对 www.ti.com/.../sloc297进行哪些更改 才能使用我的电路板? 我想知道要对 MCU 时钟初始化进行哪些更改?

    此致、

    Madhudhan

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

    Madhudhan、您好!  

    您必须确保 SYS_CLK 输出被正确配置。

    在 TRF79xxa.c 文件中 写入 TRF79XXA_MODELAG_CONTROL 的任何地方、为了启用 SYS_CLK 输出、您都需要使用0x30或使用0x30作为字节(假设您使用的是13.56MHz 晶体、否则为0x20、如果使用27.12MHz 晶体)。

    很抱歉 、TRF79xxA_setupInitiator 状态中的注释指出 SYS_CLK 正在输出、因为这些注释错误、SYS_CLK 默认不输出。

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


    您好、Ralph、

    我已经进行了您提到的更改以及下面的更改、现在我能够检测到 NFC 标签、但无法读取它们。

    main.c

    void main (void)

    //uint8_t ui8VLOCalibCount;

    // TODO:如果使用 G2 LaunchPad 上的 LED2跳线、则将其移除、否则 SPI 将不起作用。

    //停止看门狗计时器,
    WDTCTL = WDTPW + WDTHOLD;

    MCU_initClock (0);//设置 DCO
    MCU_delayMillisecond (10);

    //校准 VLO
    //mcu_calculateVLOFreq();

    //将 SPI SS 设置为高电平
    Slave_select_port_set;
    SLAVE_SELECT_HIGH;

    //根据 TRF7970A 数据表将 SS 设置为高电平然后将 EN 设置为高电平之间的4毫秒延迟
    MCU_delayMillisecond (4);

    //将 TRF 使能引脚设置为高电平
    TRF_ENABLE_SET;
    TRF_ENABLE;

    //等待 TRF 系统时钟启动
    MCU_delayMillisecond (5);

    //设置 TRF 初始设置
    TRF79xxA_initialSettings();
    TRF79xxA_setTrfPowerSetting (TRF79xxA_3V_FULL_POWER);

    MCU_initClock (1);//从 DCO 切换到外部时钟
    MCU_delayMillisecond (10);
    spi_usciSet();//使用这个外部时钟重新配置 USART

    //初始化所有启用的技术层
    NFC_init();

    //启用全局中断
    _bis_SR_register (GIE);

    //启用 IRQ 引脚
    IRQ_ON;

    while (1)

    //轮询 NFC 标签
    NFC_findTag();
    /*ui8VLOCalibCount++;  

    IF (ui8VLOCalibCount = 25)

    //校准 VLO
    mcu_calculateVLOFreq();
    //重置校准计数器
    ui8VLOCalibCount = 0;
    }*/

    mcu.c

    void MCU_initClock (uint8_t 模式)

    uint8_t II1 = 0;

    if (mode ==0)

    //选择 DCO 到8MHz

    if (CALBC1_8MHZ=0xFF)//如果校准常数被擦除

    while (1);//请勿加载,陷阱 CPU!!

    //遵循建议的流程。 首先、清除所有 DCOx 和 MODx 位。
    //然后应用新的 RSELx 值。 最后、应用新的 DCOx 和 MODx 位
    //值。
    DCOCTL = 0x00;
    BCSCTL1 = CALBC1_8MHZ;
    DCOCTL = CALDCO_8MHZ;

    _DELAY_CYCLES (1000);

    返回;

    其他

    BCSCTL1 |= XTS + XT2OFF;// ACLK = LFXT1 HF XTAL
    BCSCTL3 |= LFXT1S1;// 3–16MHz 晶振或谐振器
    // TRF796x sys_clk 引脚用作振荡器
    //在 Trf797xInitialSettings()中将其设置为6.78MHz (=13.56MHz/2)
    //打开外部振荡器
    操作

    IFG1 &=~OFIFG;//清除 OSCFault 标志
    对于(II1 = 0xFF;II1 > 0;II1--)//设置标志的延时时间


    } while ((IFG1 & OFIFG)=OFIFG);// OSCFault 标志仍然置1?

    BCSCTL2 |= SELM1 + SELM0 + SELS;// MCLK = SMCLK = HF LFXT1 (安全)

    返回;


    #define COUNTER_VALUE TACCR0 //计数器寄存器
    #define START_COUNTER TACTL |= MC1 //启动计数器处于向上计数模式
    #define STOP_COUNTER TACTL &=~(MC0 + MC1)//停止计数器
    #define RESET_COUNTER TACTL |= TACLR //复位和停止计数器。

    #define DELAY_1ms 6780 //用于 McuDelayMillisecond

    #define COUNT_1ms 847

    void MCU_setCounter (uint16_t ui16mSecTimeout)

        TACTL |= TACLR;
        TACTL &=~TACLR;//重置 timerA
        TACTL |= TASSEL0 + ID1 + ID0;// ACLK、div 8、中断使能、定时器停止

        Tar = 0x0000;
        TACCTL0 |= CCIE;//比较中断使能
        COUNTER_VALUE = COUNT_1ms * ui16mSecTimeout;
        TACTL |= MC1;

    #pragma vector=TIMERA0_vector
    _interrupt void
    Msp430f23x0TimerAHandler (空)

       TRF79xxA_timerHandler();

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

    您好、Ralph、

    最后、我使它工作、存在优化问题。

    请检查上述代码、并告知我是否需要更改任何其他内容。

    此致、

    Madhudhan

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

    Madhudhan、您好!  

    乍一看没有什么能吸引我的、如果它能正常工作、我想你能得到一切、代码几乎需要所有气缸上的所有东西都能正常工作。

    您可能需要检查是否需要 VLO 校准、我不知道 MSP430F2370上的 VLO 漂移量、但如果是一个很好的量、那么您可能需要它。

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

    您好、Ralph、

    如果您检查我的代码,我根本不使用 VLO,那么该操作是否正常?

    我还设计了卡感应电路,并想知道如何使用它? 如果您愿意、我可以私下发送原理图。

    此致、

    Madhudhan

     

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

    Madhudhan、您好!  

    VLO 在10分钟内不会是您注意到的、但随着时间的推移而漂移可能会影响长期运行。 从系统角度来看、这只是一个需要注意的问题。

    我已经做了一些工作、但最终从未完成将卡感应电路软件与 SLOC297示例一起使用、这不是我们目前从调试层面支持的内容。 该应用手册包含所有详细信息、实施由您决定: http://www.ti.com/lit/an/sloa184/sloa184.pdf

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

    您好、Ralph、

    很抱歉、经过长时间延迟后出现此问题。

    我遇到了一个奇怪的问题。 当我在 iso14443a.c 中检测到卡后尝试在 UART 中发送数据时、我在接收端收到垃圾数据。 但是、当我在调用 NFC_findTag()函数后尝试在 main.c 中发送 UART 数据时、如果我为我在 UART 中发送的每个字节提供至少1毫秒的延迟、那么数据也会正常运行。 请帮助我找到问题

    对于(i=0;i<20;i++)

    UART_putChar (uartTxBuf[i]);
    MCU_delayMillisecond (1);

    此致、

    Madhudhan

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

    Madhudhan、您好!

    检查终端的波特率配置、它应该被设置为9600。 我使用移植版本的代码进行了快速测试、只要终端设置为9600波特、就可以输出数据。

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

    您好、Ralph、

    我将 UART 用于 LIN。 因此、我假设问题与 LIN 有关。 您是否有 LIN 协议的任何示例代码?

    另外、我还讨论了另一个问题。 TRF7970A 的供电电压为5V、当我将 TRF79xxA_setTrfPowerSetting 设置为 TRF79xxA_3V_FULL_POWER 时、电路板工作正常、但当我将其设置为 TRF79xxA_5V_FULL_POWER 时、电路板会发生故障、我无法再进行闪存、我不得不更换芯片。 当我更改 TRF7970A 的 TRF79xxA_setTrfPowerSeting 时、我不知道为什么 MSP430F2370会出现问题。 请帮我解决这个问题。

    此致、

    Madhudhan

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

    Madhudhan、您好!  

    对于 LIN、我无能为力、您可能需要为此制作一个新的线程。

    我从未听说过 TRF7970A 由于处于5V 模式而导致 MCU 出现故障。 您是否使用 VIN 提供 VDD_IO? VDD_X 不会超过3.4V、这在 MSP430F2370的3.6V VCC 最大限制范围内。 听起来可能是系统或原理图问题。

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

    您好、Ralph、

    我可以将原理图发送给您个人。 您能帮我找出根本原因吗? 我是第一次使用 TRF7970A。

    此致、

    Madhudhan

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

    Madhudhan、您好!  

    我向您发送了一个朋友请求、您可以在接受后通过私人邮件将其发送给我。