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.

[参考译文] CCS/RF430FRL152H:如何使用手机 NFC 感应将 RF430FRL152H 从 LPM4模式唤醒?

Guru**** 2689775 points

Other Parts Discussed in Thread: RF430FRL152H, RF430FRL152HEVM

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/820446/ccs-rf430frl152h-how-to-use-the-phone-nfc-sensing-to-wake-the-rf430frl152h-from-lpm4-mode

器件型号:RF430FRL152H

工具/软件:Code Composer Studio

对于我的应用、RF430FRL152H 上电并进行基本设置、然后 RF430FRL152H 将进入 LPM4睡眠模式。
我想使用手机 NFC 感应将 RF430FRL152H 从 LPM4模式唤醒。
在 RF430FRL152H 被唤醒后、我们可以清除 LPM4设置并进入主程序流程。
RF430FRL152H 如何实现这些行为?

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

    你好、Chen、

       我假设手机在感应 NFC 标签时也会发送 ISO15693库存命令。

    当 RF430FRL152H 检测到一个 ISO15693命令时、它将发出一个中断并将处理器从 LPM4模式中唤醒。

    有关这方面的更多信息、请参阅 RF430FRL152H 固件用户指南:

    http://www.ti.com/lit/ug/slau603b/slau603b.pdf

    此致、

    Helfried

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

    我目前能够将 RF430FRL152H 从 LPM4模式中唤醒(设置调试断点)
    使用手机 NFC 感应并在唤醒后进入 RF13M_ISR。

    但最大的问题是指令_BIC_SR_REGISTER_ON_EXIT (LPM4_BITS); 在 RF13M_ISR 中无效。
    因此、无法释放 LPM4模式。 因此、当程序离开 RF13M_ISR 时、它无法返回主程序流。

    是否有办法解决这个问题?

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

    你好、Chen、

    请检查您的语法是否正确。

    您似乎错过了第一个下划线(开头为两个下划线) ->:__BIC_SR_REGISTER_ON_EXIT (LPM4_BITS);

    此致、

    Helfried

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

    您好、Helfried、

    抱歉、文本中的说明中丢失了"_"。 我在程序中实际使用的指令是正确的。


    _BIC_SR_REGISTER_ON_EXIT (LPM4_BITS);

     

    但是、获得的结果如上所述。 当程序离开 RF13M_ISR 时、它无法返回主程序流。

    是否有办法解决这个问题?

    谢谢你。

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

    请向我提供您想要实现的目标的更多信息。

    您编写了指令__BIC_SR_REGISTER_ON_EXIT (LPM4_BITS);无效。 它是否意味着您会遇到编译器错误、或者它是否只是不适合您。

    您是否将其中一个代码示例作为项目的基础?

    此致、

    Helfried

     

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

    谢谢、Helfried、
    附件文件是我的测试程序的一个示例。
    程序函数希望使用手机 NFC 感应将 RF430FRL152H 从 LPM4模式中唤醒。

    该程序将下载到 RF430FRL152HEVM 电路板上执行。
    设置条件如 slau607c 第2.3.5节所述
    将 S6设置为"电池"。
    SV7需要有一个跳线
    将 SR66 1.5V 电池插入电池座(BAT1)。

    请帮助检查程序为何无法正确执行、谢谢!

    附件解压密码: RF430FRL152He2e.ti.com/.../RF430FRL152H_5F00_NFC_5F00_LPM4_5F00_RF13M_5F00_ISR.7z

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

    你好、Chen、

    感谢您提供代码。

    RF13M 的 ISR 在 ROM 代码中处理、不应修改(请参阅此处的注释行)。 在此位置插入代码将不起作用。

    您希望在手机感应标签时唤醒您的程序。 这将适用于代码。

    我用于测试 RF430FRL152H_NFC 项目。 我已经修改了 main、以便在手机扫描 EVM 板时切换 LED (P1.4)。

    无需修改任何其他内容。

    (对于 LED、我为电路板提供了3.3V @ SV9/SV10)

    void main()

    WDTCTL = WDTPW + WDTHOLD;//停止看门狗

    // ROM RF13M 模块设置**正确的 RF 堆栈操作需要以下三行

    DS = 1;//需要在此处初始化 ROM 变量

    ASM ("调用#0x5CDA ");//调用 ROM 函数(初始化函数指针)

    ASM ("调用#0x5CAC ");//调用 ROM 函数(检查器件配置)

    initISO15693 (clear_block_lock);//清除所有块锁定

    //initISO15693 (0);//在 FRAM 中设置块锁定

    //JTAG 被设置为在这个函数调用中被禁用

    DeviceInit();

    P1DIR |= BIT4;

    P1OUT |= BIT4;

    while (1)

    //在此处输入应用程序代码...

    P1OUT ^= BIT4;

    _bis_SR_register (LPM3_bits + GIE);

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

    您好、Helfried、
    感谢你的答复。

    我尝试根据您的建议修改 RF430FRL152H_NFC 项目、修改如下:
    我已修改 main、以便在手机扫描 EVM 板时切换 P1.0、P1.1和 P1.4。
    切换到 Mini USB 供电。 SV9的引脚1为3.3V。
    将 S6设置为"电源"
    SV7有一个跳线

    不过、遗憾的是、LED (P1.4)没有变化、并且示波器不测量 P1.0、P1.1和 P1.4的信号变化。
    电话没有收到任何信息。
    设置程序是否不正确?


    另一个问题是、根据 slas834c 第5.6节、RF430FRL152H 的 LPM4电流 在20°C 时为12uA
    我认为 RF430FRL152H 静态电流太大! 如果您使用1.5V 电池、其寿命不会超过3个月。

    RF430FRL152H 是否需要具有特殊容量的电池、或者是否有任何特殊要求?
    为什么 RF430FRL152H 的 LPM4电流如此大?

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

    你好、Chen、

    您说得对、我提供的解决方案不起作用。 我之前测试过它、但将电源设置为未组装的电池、并在每次 ISO 读取时进行复位。 这就是我看到 LED 闪烁的原因。

    我做了一些调查、现在找到了一个可以满足您需求的解决方案。 问题出在 ROM 中的 RF13 IRQ 处理程序。

    请为 RF13M IRQ 处理程序尝试以下代码:

     

    #pragma CODE_SECTION (RF13M_ISR、".fram_driver_code")//注释此行以使用 ROM 的 RF13M ISR、取消注释下一行、有关详细信息、请参阅.cmd 文件

    //#pragma CODE_SECTION (RF13M_ISR、".rf13m_ROM_ISR")//注释此行以创建将存在于 FRAM 中的定制 RF13M ISR、绕过 ROM、取消注释之前的内容

    #pragma vector = RF13M_vector

    _interrupt void RF13M_ISR (void)

    _BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);

    ASM (" BR #0x54D0");

     

    此外、还需要更改链接器命令文件:

    请添加以下行。

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

    您好、Helfried、
    感谢你的帮助。
    是的、这是我想要的解决方案。 非常感谢!

    我想向您咨询另一个有关功耗的问题。
    根据 slas834c 第5.6节、RF430FRL152H 的 LPM4电流在20°C 时为12uA
    我认为 RF430FRL152H 的静态电流太大! 如果使用1.5V 电池、电池寿命不能超过3个月。

    RF430FRL152H 是否需要具有特殊容量的电池、或者是否有任何特殊要求?
    为什么 RF430FRL152H 的 LPM4电流如此大?
    如何将 RF430FRL152H 设置为在 LPM4中实现最低功耗?

    谢谢!

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

    你好、Chen、

    我了解您对 LPM4静态电流的关注、但 没有降低该电流的解决方案。

    因为我不知道 这是不是适用于您的应用的解决 方案、但可以将电池开关编程为打开、从而使器件完全断电。 当由读取器供电时、您可以 将电池开关再次设置为打开。

    据我所知、不建议使用电池、因为这取决于用户应用、即传感器的电源。

    如果电池适合您的应用、您可以使用容量更高的电池。

    此致、

    Helfried

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

    您好、Helfried、
    在我的应用中、电路设计架构参考 SLAU607C - RF430FRL152HEVM 用户指南文件 P.30。
    我的程序流为每秒 TA0、ADC 值每15分钟读取一次、其余时间处于 LPM3模式。

    但目前、我达到的最低功耗为90uA、远高于 SLAS834C 文档 P.11中的13uA。

    我想向您咨询如何设置、以将当前 LPM3的功耗降低到接近13uA。 谢谢!

    我的程序当前设置为进入 LPM3、如下所示:

    空睡眠模式(空)

       //P1设置
       P1SEL0 = 0x00;//无 JTAG
       P1SEL1 = 0x00;//无 JTAG

       P1DIR = 0xFF;//P1为输出
       P1OUT = 0x00;  //P1为输出低电平

       //TA0设置
       TA0CCTL0 = 0;
       TA0CCTL1 = 0;
       TA0CCTL2 = 0;

       //SD14设置
       SD14CTL0 = 0x0008;
       SD14CTL1 = 0x00C0;

       //RFPMMCTL0设置
       RFPMMCTL0 = PMMPW;                                   //解锁 RFPMM
       RFPMMCTL0_L 和=~RFPMM_EN_VF_REG; //永久启用 FRAM vddf 的稳压器:CPU 控制
       RFPMMCTL0_L 和=~RFPMM_EN_BATSWITCH; //启用电池开关:未激活
       RFPMMCTL0_L 和=~RFPMM_EN_V_doub; //启用数字内核的稳压器。 VDD:未激活
       RFPMMCTL0_H |= 0xFF;

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

    你好、Chen、

    我采用了 RF430FRL152H EVM 和其中一个示例代码、并添加了您的代码。

    当设置为 LPM3时、我看到的电流为~20µA μ A。 这比规定的要多一些、但 EVM 具有额外的组件、我认为这些组件会导致与数据表的差异。

    请检查您的电路是否有一个汲取电流的上拉电阻。

    此致、

    Helfried

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

    你好、Chen、

    我已经听过你的回声了一段时间,所以这条胎面已经关闭了。 如果您希望继续讨论、请在下面发布包含更新的回复(或创建新主题帖)。

    此致、
    Helfried

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

    您好、Helfried、
    我很遗憾没有立即答复你有关问题解决的情况,因为还有其他紧急事件。
    关于 RF430FRL152H MCU 的电流消耗问题、在检查和确定之后、这是由电路设计引起的。
    问题电路现已纠正。 电流消耗也降至规格范围、感谢您的提醒!

    如果可以、我想向您咨询有关 ADC 使用的问题。
    根据 SLAS834C 规范的第5.22节、SD14的分辨率为8 ~ 14位。
    我想问如何设置为具有14位分辨率?

    目前、我的 SD14设置如下:

       SD14CTL1 = SD14RBEN1 + SD14RBEN0 + SD14UNI + SD14GAIN0 + SD14INTDLY0 +通道;

       SD14CTL0 = SD14EN + VIRTGND;              // SD14模块被启用、AVSS 作为 ADC 的基准
       SD14CTL0 |= SD14SC;              //开始转换

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

    您好、Chen、

    如果要提高 ADC 的精度、必须设置数字滤波器。

    请参阅技术参考手册的第10.3节"数字滤波器"。 表10-2显示了不同滤波器设置的精度。

    必须在 SD14CTL1寄存器中设置 SDRATE。 但精度越高的缺点是转换时间越长。

    此致、

    Helfried

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

    您好、Helfried、

    RF430FRL152H MCU ADC 分辨率已达到14位、感谢您的帮助!

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

    您好、Helfried、
    我有两个新问题、我想向您咨询。
    第一个问题是规范 slau506中的转换时间(FM = 2kHz)、
    技术参考手册的第10.3节数字滤波器。 表10-2、
    它能更快吗? 例如 FM = 4kHz

    第二个问题是如何使用 I2C。 附件文件是我的示例程序。
    我的程序中的问题在哪里、为什么不能将其下载到 RF430FRL152H EVM?

    解压缩密码为 RF430FRL152H

    谢谢!e2e.ti.com/.../RF430FRL152H_5F00_NFC_5F00_Timer_5F00_A_5F00_I2C_5F00_Project.7z

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

    您好、Chen、

    SD14的最大频率 FM 为2kHz。 您不能使用更高的频率。

    在您的项目中、链接器命令文件不正确。 您缺少以下行:

    fram_driver_code:{}> FRAM_code

    由于未定义、 您的代码转到地址0x00000并给出程序加载错误。

    这一变化在前面的这一轮讨论中已经提到过。

    请检查原始项目中的 CMD 文件是否正确。

    此致、

    Helfried

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

    您好、Helfried、

    我已经可以使用 I2C 读取和写入 EEPROM 了。 感谢你的帮助!