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/RF430FRL152HEVM:FRAM Raed / Write Issue

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/700087/ccs-rf430frl152hevm-fram-raed-write-issue

器件型号:RF430FRL152HEVM
主题中讨论的其他器件:RF430CL331HRF430CL330HRF430FRL152H

工具/软件:Code Composer Studio

您好!

我使用 RF430FRL152HEVM 套件与手机进行 NFC 通信。 我想从手机到 RF430FRL152HEVM 套件执行读写操作。

我已尝试以下路径中的示例:
slac691f\RF430FRL15xH_projects_v1_5\RF430FRL15xH_projects_v1_5\RF430FRL15xH_projects_v1_5\RF430FRL15xH NFC projects\RF430FRL152H

我在运行时写入 FRAM 时遇到问题。  

源代码为:

内存
{
SFR :origin = 0x0000、length = 0x0010
外设_8位 :origin = 0x0010,length = 0x00F0
外设_16BIT :origin = 0x0100,length = 0x0100
RAM :origin = 0x1C00,length = 0x1000

///ROM ISR、起始点、长度不正确
RF13M_ROM_ISR:origin = 0x54D0,length = 0x0002

//代码区域,可以增加/减少
// FRAM_NDEF + FRAM_CODE 长度必须等于0x768 (FRAM_NDEF 从0xF868开始)
//两个段一起位于0xF868-0xFFCF 范围内
FRAM_NDEF :origin = 0xF868、length = 0x0096 //在0xF8CF - NDEF 存储器段结束
FRAM_Data :origin = 0xF8FE,length = 0x00A0 //结束于0xF8CF - NDEF 存储器段
FRAM_CODE :origin = 0xF99E,length = 0x0630 //在0xFFCF - Firmware memory 部分结束
JTAGSIGNATURE :origin = 0xFFD0、length = 0x0004、fill = 0xFFFF
BSLSIGNATURE :origin = 0xFFD4、length = 0x0004、fill = 0xFFFF
INT00 :origin = 0xFFE0、length = 0x0002
INT01 :origin = 0xFFE2,length = 0x0002
INT02 :origin = 0xFFE4,length = 0x0002
INT03 :origin = 0xFFE6,length = 0x0002
INT04 :origin = 0xFFE8、length = 0x0002
INT05 :origin = 0xFFEA,length = 0x0002
INT06 :origin = 0xFFEC,length = 0x0002
INT07 :origin = 0xFFEE,length = 0x0002
INT08 :origin = 0xFFF0,length = 0x0002
INT09 :origin = 0xFFF2,length = 0x0002
INT10. :origin = 0xFFF4,length = 0x0002
INT11. :origin = 0xFFF6、length = 0x0002
INT12. :origin = 0xFFF8,length = 0x0002
INT13. :origin = 0xFFFA,length = 0x0002
INT14 :origin = 0xFFFC,length = 0x0002
复位 :origin = 0xFFFE,length = 0x0002
}/*********

/*
指定段分配到内存中 */
********* /

SECTIONS
{
组(all_FRAM)
{
组(READ_WRITE_MEMORY)
{
//.TI.persistent:{}>FRAM_Data 对于#pragma PERSISTENT *
.cio :{} /* C I/O 缓冲器 *
sysmem :{} /*动态内存分配区域*/
}

组(只读_存储器)
{
.cinit :{} /*初始化表 *
.pinit :{} /* C++构造函数表 *
init_array :{} /* C++构造函数表 *
.mspabi.exidx:{} /* C++构造函数表 *
.mspabi.extab:{} /* C++构造函数表 *
.const :{} /*常量数据 */
}

GROUP (可执行文件存储器)
{
.text :{} /*代码 */
}
}> FRAM_CODE

rf13m_ROM_ISR:{}> RF13M_ROM_ISR 类型= DSECT

.jtagsignature:{}> JTAGSIGNATURE/* JTAG Signature *
bslsignature:{}> BSLSIGNATURE /* BSL Signature *
.jtagpassword /* JTAG 密码 *

.bss :{}> RAM /*全局和静态变量 *
.data :{}> RAM /*全局和静态变量 *
.TI.noinit:{}>RAM /*用于#pragma noinit *
.TI.persistent:{}>FRAM_Data 对于#pragma PERSISTENT *
堆栈 :{}> RAM (高) /*软件系统堆栈 *

/* MSP430中断矢量 *

int00 :{} > INT00
.int01 :{} > INT01
.int02 :{} > INT02
.int03 :{} > INT03
.int04 :{} > INT04
RFPMM :{*(.int05 )}> INT05类型= VECT_INIT
端口1 :{*(.int06 )}> INT06类型= VECT_INIT
SD_ADC :{*(.int07 )}> INT07 type = VECT_init
USCI_B0 :{*(.int08 )}> INT08类型= VECT_INIT
ISO :{*(.int09 )}> INT09 type = VECT_init
WDT :{*(.int10 )}>INT10类型= VECT_INIT
TIMER0_A1:{*(.INT11 )}> INT11 type = VECT_INIT
TIMER0_A0:{*(.INT12 )}> INT12 type = VECT_INIT
联合国管理信息系统 :{*(.INT13 )}> INT13类型= VECT_INIT
SYSNMI :{*(.int14)}> INT14类型= VECT_INIT
.reset :{} >复位/* MSP430复位矢量 */
}--><!--kadov_tag{{</spaces>}--><!--kadov_tag{</spaces>}--><!--kadov_tag{</spaces>}}-->

main.c 文件:

#pragma RETAIN (FRAM_ARR);
#pragma LOCATION = 0xF8FE;
//#pragma DATA_SECTION (FRAM_ARR、".TI.persistent")
#pragma PERSISTENT (FRAM_ARR)
unsigned char FRAM_ARR[50];


Main ()
{
---
----

对于(count = 0;count<21;count++)
{
FRAM_ARR[count]=计数;

}}-->----


}

在运行时,我正在写入 FRAM 存储器。 调试工具期间、CCS 存储器中也会显示更新的数据。 但是,在执行 RESET 命令之后,每次都会擦除该数据。  

您能不能建议这个错误,我在这里。  

谢谢、

Anil Garg

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

    我不确定#pragma PERSISTENT 调用的用途、我不记得我们的任何示例代码中使用的那些调用。 您能解释一下 Retain 不能做什么?

    我明天需要在办公室试用固件、以便提供更多意见。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Anil、您好!

    我最终无法重新创建您的问题 在下电上电后、数据将被正确地保留在指定的位置。 我甚至写了一条大型 NDEF 消息、覆盖了该段、对器件进行了下电上电、并且该段中的数据根据 while 环路进行了更新。

    我在您的代码中注意到的一件事是您没有;在#pragma 结束时仍然存在-也许这是问题所在? 不过、我本以为会出现编译器错误、但如果您没有得到一个、并且仍然缺少该分号、 这是我唯一能想到的问题、因为我在同一存储器位置使用相同的缓冲区、并且填充相同、并且没有像您描述的那样出现任何问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答。

    如果我通过指针间接访问存储器、我能够读取和写入 FRAM。

    这里有更多查询  

    1.如果我使用任何读/写器写入 NDEF 存储器,那么如何在 RF430FRL152中检测 NDEF 写入操作?

    这意味着使用 SFR 或控制位,我可以确认 NDEF 存储器是由任何外部设备更新的。

    2.我已经尝试了以下路径中的示例:

    slac691f\RF430FRL15xH_projects_v1_5\RF430FRL15xH_projects_v1_5\RF430FRL15xH_projects_v1_5\RF430FRL15xH NFC projects\RF430FRL152H

    如果我 不注释 _bis_SR_register (LPM3_bits + GIE)、则 NDEF 读取和写入工作正常

    但是、如果我注释这一行(_bis_SR_register (LPM3_bits + GIE);)、那么它将停止工作(读取和写入这两者)

    如果我用 _bis_SR_register (GIE)更新行;则会执行 NDEF 读取操作,但不会执行写入操作(来自读取器写入器套件)。 为什么?

    谢谢

    AG

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

    Anil、您好!

    [引用 user="Anil Garg"]1. 如果我使用任何读/写器写入 NDEF 存储器,那么如何在 RF430FRL152中检测 NDEF 写入操作?
    [/报价]

    我认为最接近此目的的操作是通过 RF13MNT 监视 RF 堆栈并确定何时完成接收操作。 尽管在器件功能中没有对 NDEF 进行任何特殊处理、因此请检查是否发生了 NDEF 操作以及更改的内容是否因应用而异。

    [引用 USER="Anil Garg">如果我用 _bis_SR_register (GIE)更新行、则会执行 NDEF 读取操作、但不会执行写入操作(来自读取器写入器套件)。 为什么?[/报价]

    这似乎在某种程度上仅限于您的应用。 我在 NDEF 示例中进行了此更改、并测试了 NDEF 读取和 NDEF 写入、没有问题。 我不知道为什么这会改变您的行为、但是移除 LPM3应该没有影响...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    实际上、我唯一能想到的可能是、如果您使用的是弱读/写器、如果不在 LPM3模式下运行、则在发生写入操作时器件无法从射频场维持功率。 这仅适用于通过射频为电路板供电的情况。 简单思考一下。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    如果处理器希望在应用程序代码中读/写 NDEF 存储器,同时读/写器也在访问相同的存储器,那么如何同时同步这两个任务?

    是否有任何提供 NDEF 存储器读/写操作完成状态的中断标志? 如果是、那么处理顺序是什么?

    如果在运行时任何读取器/写入器修改了 NDEF 存储器、您能建议哪种微控制器可以读取 NDEF 存储器的策略吗?

    我们是否可以为 NDEF 存储器进行单独的分区以进行读取和写入操作?

    如果共享示例代码、效果会更好。

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

    RF430FRL15xH 器件以前没有出现过这种用例、因此我很难肯定地说。 这完全不是常见的用例、也不是设计注意事项的一部分、因为 I2C/SPI 接口更多地用于从传感器器件的主机目的。

    我的最佳建议是监控射频堆栈中断、如果没有活动、则执行写入、当活动发生时、停止写入。

    老实说、如果这是您的要求、您应该改为查看 RF430CL330H 或 RF430CL331H。 这些器件具有处理此类应用所需的确切功能、因为它们具有专用引脚、用于在 NFC 通信开始时发出警报。

    由于我们有上述器件、因此我们不会研究如何使用 RF430FRL152H 实现与之前所述的相同、但器件的预期用例范围外。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于两个原因、我没有选择 RF430CL330:
    1、通信射频范围比 RF430FRL152小。

    非易失性存储器不可用。


    您能否共享任何有助于了解在使用 RF430FRL152进行 NDEF 读写操作期间 RF430_ISR 处理序列的文档?

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

    RF430CL330H 通常与 FRAM MSP430器件配对使用、以提供非易失性存储器功能。 这最好在 TI RF430CL331H 设计中看到、其中使用 FRAM MCU 记录可通过 NFC 传输的40KB 以上传感器数据。

    我之所以提出这一点、是因为我担心您最终会使用您的预期用途撞到墙、因为它与我们在 IC 设计过程中考虑的任何东西都有很大的差异。

    至于用于射频堆栈的 RF430 ISR 的文档、您需要参考我们的技术参考手册中的部分: www.ti.com/.../slau506.pdf

    13.2介绍了 RF 堆栈的整个操作、13.3列出了寄存器、包括所有中断标志。

    请记住、射频堆栈无法识别单个 NDEF 命令、它们将被视为 ISO15693命令、例如读取单个块和写入单个块、 因此、如果您实际上需要跟踪 NDEF 特定命令、例如读取 CC 或选择应用程序等、这将增加另一层复杂性、您必须在应用程序级别通过读取 FIFO 内容和解码接收到的数据包来处理这些命令、以了解字节 然后将其映射到 NDEF 标头/有效载荷。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1、RF430FRL15x 和 RF430CL330x 分别提出了有效的通信范围(动态标签和读取器写入器之间的最大距离)。

    2. rf430frl 的共享参考技术手册对于理解中断处理序列来说有点复杂。 因此、请共享和参考源代码或指导我实施建议的策略(NDEF 检测)。

    3. rf430frl15x 中如何提供数据安全性?
    谢谢、
    AG
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anil、您好!

    1)这与系统非常相关、因为读取范围将取决于许多因素、例如:

    • 无源电源或电池电源
    • 标签和读取器的天线尺寸(即天线耦合的程度)
    • 读取器设备天线调优*
    • 读取器器件输出功率
    • 如果被动供电、可能需要传输多少数据

    一般而言、ISO15693技术可提供更广的覆盖范围、 但是、我在读取器器件天线调优之后要指出的是、这是一个非常关键的因素、因为只有在读取器器件专门针对 ISO15693技术进行调优时、无源标签的范围优势才能实现。 如果它需要支持 ISO14443A 等其他技术、那么您无论如何都无法实现任何范围优势。

    2) 2)我们没有任何此类指南、也不会提供此类指南。 如前所述、您尝试实现的目标是器件的预期用例之外的其他用途。 如果可能、TRM 会包含实现您的目标所需的信息、但我们不会在最终投入时间来调查一个超出我们所需器件用途的利基应用。 很抱歉、此答案不适合您。

    3) 3)实际上没有提供任何数据安全性、唯一提供的安全性是"通过邻近方式实现安全性"、即有人必须在器件的读取范围内才能访问数据。 对于需要通过射频为授权器件提供数据的情况尤其如此。 我在以下帖子中解释了什么是不可能的以及不可能的全部详细信息: https://e2e.ti.com/support/wireless_connectivity/nfc_rfid/f/667/p/676283/2489612#2489612