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:有关使用 CCS 调试 RF430FRL152H 的一些问题。

Guru**** 2478765 points
Other Parts Discussed in Thread: RF430FRL152H, RF430FRL152HEVM

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/823993/ccs-rf430frl152h-some-problems-about-debugging-rf430frl152h-with-ccs

器件型号:RF430FRL152H

工具/软件:Code Composer Studio

您好!

现在、我将学习如何使用 RF430FRL152H。 我尝试在 RF430FRL152HEVM 电路板中调试 RF430FRL152H_SensorHub_Project、但它显示"MSP430:autorun:target not run as the symbol "main" is not defined"、这使我感到困惑。

第二个问题是 RF430FRL152H_SensorHub_Project 中的.cmd 文件配置与 RF430FRL152H_NFC_OND_ONFIT_Project_NDEF_Support 中的配置不同。 我对固件配置不是很清楚。能否在某些文档中找到详细介绍?

第三个问题是 、此芯片(RF430FRL152H)仅在 NFC 场中和通过 NFC 命令触发测量时工作良好? 我在  slau603b 中看到 ROM 固件流程和 TI 给出的示例。 这些会让我感到困惑、因为演示示例中没有主要功能、似乎所有的操作都是通过 NFC 中断完成的。

感谢您的回复。

此致、

锂离子电池

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

    您好、Li、

    请查看 RF430FRL152H 常见问题解答第3.2章。 这可能有助于理解为什么没有主函数:

    http://www.ti.com/lit/an/sloa247c/sloa247c.pdf

    对于不同的.cmd 文件、即链接器配置文件、RF430FRL152H_NFC_ONFLE_PROJECT_NDEF_Support 项目只使用 ISO15693堆栈、因此只需要一个用于 RF 接口的 ISR。 RF430FRL152H_SensorHub_Project 使用对 ADC、计时器等的完整 ROM 支持集、并且必须处理所有中断、这些中断入口点在.cmd 文件中定义。

    此致、

    Helfried

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

    您好、Helfried、

    感谢您的回复。 我已经阅读了该文档。 它显示 SD14、GPIO、看门狗、计时器和 eUSCI 功能可由 FRAM 中的用户固件控制。 这是否意味着我可以使用 eUSCI 驱动程序来驱动函数中的数字传感器? 例如,在 main()的开头,我配置从传感器的设置,然后在 while ()函数中对数据进行采样。 但我认为这将减小 FRAM 中的存储空间、并且无法使用寄存 器来更改采样设置、例如 RF430FRL152H_SensorHub_Project 或 Default Project。

    如果我使用 默认工程来驱动数字传感器而不使用演示中的项目、我可以使用 FRAM 中的寄存器来驱动 ROM 中的 eUSCI 来配置数字传感器吗? 最好先设置数字传感器、然后开始重复操作、包括采样和存储数据。 这些步骤将通过 NFC 命令访问、不是吗?

    第三个问题是.cmd 文件中的入口点。 我 分别比较了 SensorHub 项目和 NFC 项目中的.cmd 文件。 我发现 ROM_ISR 和 FRAM 是不同的。 前者指示 ROM 中使用的函数、后者显示 FRAM 中的块集。 只要 FRAM + FRAM_CODE 长度必须等于0x768 (FRAM 从0xF868开始)、我可以更改 FRAM 块配置吗? 而 FRAM 或 FRAM_NDEF 可由 NFC 访问、但 FRAM_CODE 应受到保护、如果猜对、我如何 设置它?

    期待您的回复。

    此致、  

    锂离子电池  

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

    您好、Li、

    如果您想使用数字传感器(SPI 或 I2C)、最好的基础是 RF430FRL152H_SensorHub_Project。 即使该项目也没有 main()。 您将拥有 DigitalSensorInit()和 DigitalSensorMeasurement()函数,您必须根据所使用的传感器来控制 eUSCI。 在这种情况下、端口引脚 P1.7必须设置为高电平才能进入从模式。

    另请参见文件 patch.c 中的驱动程序表定义

     通过使用 FRAM 访问限制寄存器(固件用户指南的第7.53章)、可实现通过射频对 FRAM 访问的保护

    此致、

    Helfried

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

    您好、Helfried、

    感谢您的回复。 首先、我要使用 RF430FRL152H_SensorHub_Project 开始我的项目。 但它确实会使我死亡、因为如果没有 main()、 RF430FRL152H_SensorHub_Project 中的函数将在我看来通过 NFC 命令触发。 它看起来很复杂、我现在只想调试 eUSCI 来驱动 I2C。 如果我同时操作两个部件、当出现一些意外问题时、我很难找到原因。

    我认为该项目过于复杂吗? 或者、如果它与我的想法相同、您能否向我展示如何通过 NFC 配置 eUSCI?

    这是我的函数。 我认为发送的数字由从器件地址和其他数据(寄存器和命令)组成。 首先发送从地址,因此在 for () sendNum -1中。  

    写入

    #pragma CODE_SECTION (I2C_Write、".fram_driver_code")//有关详细信息、请参阅.cmd 文件-所有新固件必须进入 fram_driver_code 存储器段空间
    void _I2C_Write (u08_t * txData、U16_t sendNum)

    u08_t TEM_TELEG=0;
    UCB0CTL1 |= UCSWRST;//软件复位被启用
    UCB0I2CSA = MAX86150_SLAVE_ADDRESS;// I2C 从器件地址  
    UCB0CTLW1 = UCASTP_1;
    UCB0TBCNT = sendNum;
    // UCBCTL1 &=~UCSWRST;//退出 eusci 复位

    UCB0CTL1 &=~Ω UCSWRST;//使 eUSCI 退出复位状态
    UCB0CTL1 |= UCTXSTT + UCTR;//开始 i2c 写入操作
    while (!(UCB0IFG & UCTXIFG0));//发送 I2C 地址

    // UCB0TXBUF =命令;//发送命令
    // while (!(UCB0IFG & UCTXIFG0));//等待命令被发出
    for (tem_detr=0;tem_detr<(u08_t) sendNum - 1;tem_detr++)//因为从地址已发出

    UCB0TXBUF = txData[TEM_DEG];//发送寄存器地址和命令
    while (!(UCB0IFG & UCTXIFG0));//等待它已经被发送

    // UCB0TXBUF = rxData[1];//发送 MSB
    // while (!(UCB0IFG & UCBCNTIFG));//等待直到它被发送
    UCB0CTL1 |= UCTXSTP;//发送停止条件
    while (!(UCB0IFG & UCSTPIFG));//等待直到它被接收
    UCB0CTL1 |= UCSWRST;//将 eUSCI 置于复位模式

    返回;

    主机 IRQ

    #pragma CODE_SECTION (MAX86150_I2C_READ、".fram_driver_code")//请参阅.cmd 文件以了解详细信息-所有新固件必须进入 fram_driver_code 存储器段空间
    void I2C_read (u08_t * rwData、U16_t sendNum)

    u08_t TEM_TELEG=0;
    UCB0CTL1 |= UCSWRST;//软件复位被启用
    UCB0I2CSA = MAX86150_SLAVE_ADDRESS;// I2C 从器件地址  
    UCB0CTLW1 = UCASTP_1;
    UCB0TBCNT = sendNum;
    // UCBCTL1 &=~UCSWRST;//退出 eusci 复位

    UCB0CTL1 &=~Ω UCSWRST;//将 eUSCI 置于复位模式
    UCB0CTL1 |= UCTXSTT + UCTR;//开始 i2c 写入操作
    while (!(UCB0IFG & UCTXIFG0));//等待直到需要发送
    对于(tem_detr=0;tem_detr<(u08_t) sendNum - 1;tem_detr++)

    UCB0TXBUF = rwData[tem_address];//发送寄存器地址
    while (!(UCB0IFG & UCBCNTIFG));//等待停止计数器

    UCB0CTL1 &=~UCTR;//读取操作
    UCB0CTL1 |= UCTXSTT;//重复启动


    对于(tem_de*= 0;tem_de< 8;tem_de++)

    while (!(UCB0IFG & UCRXIFG0));//等待读取数据可用
    rwData[tem_yu]= UCB0RXBUF;//读取 MSB
    if (tem_dean== 7)

    UCB0CTLW0 |= UCTXSTP;//在下一个字节后发送 STOP


    // rwData[0]= UCB0RXBUF;//读取 MSB
    // UCB0CTLW0 |= UCTXSTP;//在下一个字节后发送 STOP
    // while (!(UCB0IFG & UCRXIFG0));//等待直至读数据可用
    // rxData[1]= UCB0RXBUF;//读取 MSB
    while (!(UCB0IFG & UCSTPIFG));//确保发送了停止条件
    UCB0CTL1 |= UCSWRST;//将 I2C 置于复位模式

    返回;

    简而言之,如何调用  函数 DigitalSensorInit()和 DigitalSensorMeasurement()? 如果我知道、 剩下的事情就是调试 eUSCI 驱动程序。顺便说一下 、RF430FRL152H 在这里充当主器件。

    期待您的回复。

    此致、

    锂离子电池

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

    您好、Li、

    您能否简单地解释一下您的应用应该如何工作。 这可能有助于找到适合它的软件解决方案。

    它是否由电池供电? 您是否会在更长的时间内记录数据? 日志记录是否应在没有射频交互的情况下启动?

    之后您是否会读取记录的数据? 等等...

    此致、

    Helfried

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

    您好、Helfried:

    感谢您的回复。 一般来说、我的解决方案需要射频传输、但数字传感器配置有点复杂。 因此、我想在采样过程之前完成寄存器配置。

    现在,我知道 在 初始化期间将处理 void DigitalSensorInit(),只处理一次。 在该函数中配置寄存器非常好。 但是、我自己编写的传感器初始化函数似乎不是很好。

    以下是函数(仅一个寄存器配置示例):

    u08_t buf[]={system_CTRL_REG、system_reset};
    //重置传感器
    I2C_Write (buf、0x0003);

    void I2C_Write (u08_t * txData、U16_t sendNum)

    u08_t TEM_TELEG=0;
    UCB0CTL1 |= UCSWRST;//软件复位被启用
    UCB0I2CSA = SLAVE_ADDRESS;// I2C 从器件地址
    UCB0CTLW1 = UCASTP_1;
    UCB0TBCNT = sendNum;
    // UCBCTL1 &=~UCSWRST;//退出 eusci 复位

    UCB0CTL1 &=~Ω UCSWRST;//使 eUSCI 退出复位状态
    UCB0CTL1 |= UCTXSTT + UCTR;//开始 i2c 写入操作
    while (!(UCB0IFG & UCTXIFG0));//发送 I2C 地址

    // UCB0TXBUF =命令;//发送命令
    // while (!(UCB0IFG & UCTXIFG0));//等待命令被发出
    for (tem_detr=0;tem_detr<(u08_t) sendNum - 1;tem_detr++)//因为从地址已发出

    UCB0TXBUF = txData[TEM_DEG];//发送寄存器地址和命令
    while (!(UCB0IFG & UCTXIFG0));//等待它已经被发送

    // UCB0TXBUF = rxData[1];//发送 MSB
    // while (!(UCB0IFG & UCBCNTIFG));//等待直到它被发送
    UCB0CTL1 |= UCTXSTP;//发送停止条件
    while (!(UCB0IFG & UCSTPIFG));//等待直到它被接收
    UCB0CTL1 |= UCSWRST;//将 eUSCI 置于复位模式

    返回;

     我在 slau506中看到了增强型通用串行通信接口(eUSCI)–I2C 模式、但没有发现错误原因。您能向我展示一下关键问题吗?

    期待您的回复。

    此致、  

    锂离子电池

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

    您好、Helfried、

    现在,我将尝试将初始化函数放入 DigitalSensorMeasurement ()中,并使用一个标志确保在首次采样时设置寄存器,而不是采样数据。 但是、当我发送0x00700001到块0 (块4模式)时、什么也没发生。 命令由自定义 ISO15693读取器发送。

    我是否犯了一些错误?

    期待您的回复。

    此致、

    锂离子电池

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

    您好、Helfried、

    嗯、我现在可以与数字传感器通信。 误差的原因是上拉 电阻设置过高。 和传感器配置是  在 DigitalSensorMeasurement (DigitalSensorMeasurement)的第一个采样中设置的。

    我发现数据表中的日志存储器空间与 RF430FRL152H_SensorHub_Project 中的日志存储器空间不同 、其中甚至包括寄存器。 可以给我一些建议吗?

    期待您的回复。

    此致、

    锂离子电池