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.

[参考译文] RF430FRL152HEVM:读取 ISO 块时出现问题。

Guru**** 2560390 points
Other Parts Discussed in Thread: RF430FRL152H

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/977518/rf430frl152hevm-problem-with-reading-of-the-iso-blocks

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

大家好、

我有一些问题、我很乐意提供帮助。 在我的程序中、我需要通过 NFC 读取一些180字节阵列(总共6个)。 我正确分配了这些数组(就我所见)、我完全能够读取前2个数组和第三个的前6个 ISO 块。 之后、这些值将变为 FFFF。 我尝试了很多、但我找不到解决方法。 是否有一些简单的解决方案? 我是否需要以某种方式更改设置、还是根本不可能更改?

谢谢

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

    好的,我只是注意到整个数组在第11个元素之后被破坏了。 当我让它在 RAM 中运行时、不会发生这种情况(我将阵列分配给 FRAM、以便从 NFC 读取它)。 是否有从 RAM 读取的方法? 到目前为止,我已经尝试过但失败了。

    好的、可能需要澄清。 我将".text"移动到 RAM 中、使程序适合存储器。 该程序测量它写入6x180Byte 数组的一些数据。 我想在最后读出这些数组 如果我现在将所有数组也移动到 RAM 中、则整个过程都可以正常工作。 但是、在这里、就我看到的情况而言、我无法通过 NFC 读取它? 因此、我尝试在 FRAM 中分配内存(按照读取顺序)、并且我能够读取前2个完整阵列和第三个阵列的前11个元素。 其余部分已损坏。 我尝试了很多,但没有任何工作,我担心我在这里缺少一些必要的东西。

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

    您好、Hauke、

    您使用的是什么阅读器? 您是否具有带 EXP430G2 Launchpad 的 TRF7970ABP?

    此致、

    Helfried

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

    您好、Helfried、感谢您的回复。 我正在使用应用程序、NFC 工具"和 RF430FRL152H 评估板。 但我测试了一点:

    它不仅在我读取它时发生、而且在我调试、暂停、然后查看数组的值时发生。 此外、如果我分配一个大数组(例如270个元素)、就会发生这种情况。 然后、在第192个元素之后、值会损坏。 如果我使用"int"而不是"short int"、则没有区别。 在第192个元素之后、值也会损坏。

    编辑:如果我只是将该数组分配给 FRAM、而没有指定它应该位于开始位置、则它将完全损坏。 我想它与 FRAM/RAM 相关、而不是与实际的 NFC 读取相关。 我的链接器文件(但我基本上只是将.text 分配给 RAM):

    内存
    {
    SFR :origin = 0x0000、length = 0x0010
    外设_8位 :origin = 0x0010,length = 0x00F0
    外设_16BIT :origin = 0x0100,length = 0x0100
    
    RAM :origin = 0x1C00,length = 0x1000
    RF13M_ROM_ISR:origin = 0x54D0,length = 0x0002 //如果需要 RF13M-ISR,需要更改
    FRAM :origin = 0xF840,length = 0x0790
    
    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:{} 对于#pragma PERSISTENT */
    }
    
    组(只读_存储器)
    {
    .cinit :{} /*初始化表 *
    .pinit :{} /* C++构造函数表 *
    二进制文件 :{} /*引导时初始化表*/
    init_array :{} /* C++构造函数表 *
    .mspabi.exidx:{} /* C++构造函数表 *
    .mspabi.extab:{} /* C++构造函数表 *
    .const :{} /*常量数据 */
    }
    
    GROUP (可执行文件存储器)
    {
    //.text :{} /*代码 */
    }
    }> FRAM
    
    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
    #ifndef __large_code_model__
    .TI.ramfunc:{} load=FRAM、run=RAM、table (BINIT)
    其他
    .TI.ramfunc:{} load=FRAM | FRAM2、run=RAM、table (BINIT)
    endif
    #endif #endif #endif
    
    
    .text :{}> RAM
    
    .jtagsignature:{}> JTAGSIGNATURE/* JTAG Signature *
    bslsignature:{}> BSLSIGNATURE /* BSL Signature *
    
    rf13m_ROM_ISR:{}> RF13M_ROM_ISR 类型= DSECT
    
    .bss :{}> RAM /*全局和静态变量 *
    .data :{}> RAM /*全局和静态变量 *
    .TI.noinit:{}>RAM /*用于#pragma noinit *
    .cio :{}> RAM /* C I/O 缓冲器 *
    sysmem :{}> RAM /*动态内存分配区域*/
    堆栈 :{}> RAM (高) /*软件系统堆栈 可
    
    使用*//指定变量和函数位置
    RAM_VAR:{}> RAM
    .RAM_CODE:{}> RAM
    .FRAM_CODE:{}> FRAM
    .FRAM_VAR:{}> FRAM
    
    /* 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
    复位 :{} >复位/* MSP430复位矢量 */
    } 

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

    您好、Hauke、

    链接器文件中 FRAM 的起始地址为0xF840。 当您查看固件用户指南第2.11章时、将显示存储器映射。 0xF840至0xF867存储器的 LOCK 位。 从0xF868到0xF8AF 的范围还包含用于控制固件功能的虚拟寄存器。

    我在智能手机上试用了 NFC 工具、但它只为我提供了4字节块。 无 数据块大小为8字节。 我使用 Hagenberg NF 研究实验室的应用 NFC TagInfo 进行测试。

    此致、

    Helfried

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

    您好、Helfried、

    我向您展示定义:

    #define CLEAR_BLOCK_LOCK BIT3
    #define FRAM_LOCK_BLOCK_SAGE_SIZE 38
    #define FRAM_LOCK_blocks 0xF840 // ISO15693锁定块的地址
    
    #define ROM_EUSCI_SUPPTING_ENABLED 位2
    #define EROM_EUSCI_SUPPING_DISABLED 0
    #define ROM_SENSOR_SUPPING_ENABLED BIT7
    #define ROM_SENSOR_SUPPING_DISABLED 0
    #define NFC_Bridge_disabled BIT6
    #define NFC_Bridge_enabled 0
    #define REIVE_BYTE_BLOCK BIT0
    #define Four_byte_block 0
    #define FIRST_ISO_PAGE BIT1
    #define second_iso_page 0
    
    /*固件系统控制字节
    *
    位0:ISOBlockSize 0 - 4字节、 1 - 8字节
    * 位1:页 0 -第1页、 1 - PAGE 0 (仅对4字节块模式有效)
    * 位2:启用 ROMEUSCISupport 0 -禁用、1 -启用(在 RF430FRL153H 上强制为0)
    * 位3-5:被保留 ISO
    * 位6:NFCBridgeDisable 0 -启用、1 -禁用(请参阅下面的注释)
    * 位7:ROMSensorSupportEnable 0 -禁用、1 -启用(在 RF430FRL154H 上强制为0)
    *
    建议在此项目中禁用 NFC 桥接器。 可能会发生意外行为
    、* 使用它、因为这里设置了配置。
    *
    * 如果需要 eUSCI 主机控制器部分以及射频功能、则为默认项目
    * 必须使用。 这就是 NFC 在该应用中不受支持(因为 I2C/SPI 主机控制
    器* 控制寄存器位于 NFC 文件所需的同一位置)。 但是 FRAM 的其余部分
    * 存储器可用于存储和读取、使用 ISO15693。
    */
    #define firmware_control_address 0xF867
    #pragma RETAIN (Firmware_System_Control_Byte);
    #pragma LOCATION = firmware_control_address
    const u08_t Firmware_System_Control_Byte = ROM_SENSOR_SUPPLTE_DISABLED + EROM_EUSCI_SUPPLITD + NFC_BUTE_DISABLE_BLE_BLOCK + FIRST_SECTION;/0x7F、/0x7F 页; //此值设置固件系统控制寄存器
    
    // ROM 变量-请勿更改!!!
    //声明不受编译器使用
    的保护/******** /
    #pragma RETAIN (DS)
    #pragma LOCATION = 0x1C00
    u08_t DS;
    #pragma RETAIN (RF)
    #pragma LOCATION = 0x1C6A
    const u08_t RF;
    #pragma RETAIN (NRX)
    #pragma LOCATION = 0x1CA4 //
    const u08_t NRX[34];#pragma
    RETAx (N08
    )#pragma RETAx (NRETAx)#pragma RETAIN = 0x1C12_t RETAx
    
    (N08)#pragma RETAIN = 0x1C12_t RETAx (nT)
    
    
    #pragma RETAIN (PF)
    #pragma LOCATION = 0x1C0A
    const U16_t PF[48];
    /********* /
    
    #define NDEF_START_ADDRESS 0xF868
    //#define NDEF_START_ADDRESS 0xFB84
    #pragma RETAIN (NFC_NDEF_Message);
    #pragma LOCATION = NDEF_START_ADDRESS; //地址
    const u08_t NFC_NDEF_Message[21]的位置={
    //由于、大多数 Android 应用程序此时不会将此消息识别为 NDEF
    //标签未在 Android NFC 堆栈中注册。 但是、支持 ISO15693 RFID 通信。
    //块0
    0xE1、 // NDEF 魔法号
    0x40、 //版本号,读取/写入访问条件
    0xFF、//F2、 //F3*4/8 = 0x79 //0x7E、 // 1008字节/8 = 126个块
    0x00、//extended memory //0x00、 //不支持读取多个块(仅限于3个块)
    
    //块1
    0x03、 // NDEF 消息存在
    0x0B、 //长度,11字节
    0xD1、 //记录标题
    0x01、 //键入长度
    
    //块2
    0x07、 //有效载荷长度
    0x55、 //记录类型 U (URI)
    0x01、 // URI 标头标识符
    0x74、 //'t'
    
    //块3
    0x69、 //'I'
    0x2E、 //'.'
    0x63、 //'c'
    0x6f、 //'o'
    
    //块4
    0x6D、 //'m'
    0xFE、 // TLV 终端器
    0x00、 //空无关
    0x00、 //空无关
    }; 

    然后、我分配测试一个数组到 F880。

    #define MAX_ADRESS 0xF880
    #pragma RETAIN (samplesMax);
    #pragma LOCATION = MAX_adress;
    U16_t samplesMax[270]={1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1 

    我得到以下读数:

    我对该数组执行什么操作无关紧要。 它将始终在同一扇区损坏。

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

    您好、Hauke、

    我花了一段时间、但最后我发现了困扰您的问题。

    从未注意到这是可能的、但我们有三个可被写保护的 FRAM 存储器组。 其中一个组从地址0xFA00开始、是阵列初始化停止的地址。 请参阅数据表第6.5.1章和技术参考手册第1.12.5章(SYSCNF 寄存器)。

    解决您的问题。

    此致、

    Helfried

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

    您好、Helfried、

    非常感谢您的回答。 这是有道理的、但是我从未更改过 SYSCNF 寄存器、而我在阅读《技术参考手册》时看到的是、您必须主动对其进行设置、但我没有这样做。 默认读为0。 我检查了我的代码、找不到 SYSCNF 寄存器的任何引用。 此外、为了解决这个问题、我不能做的只是不设置它、还是我错了?

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

    您好、Hauke、

    您必须写入寄存器、因为默认情况下、块受写保护。 请参阅技术参考中 SYSCNF 寄存器的复位值。

    此致、

    Helfried

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

    您好、Helfried、

    是的、当然、你是对的、看不对。 非常感谢、你们真的帮了我很多。 永远不会想到 FRAM 中有受写保护的块。

    谢谢!