主题中讨论的其他器件:RF430FRL152H
大家好、
我有一些问题、我很乐意提供帮助。 在我的程序中、我需要通过 NFC 读取一些180字节阵列(总共6个)。 我正确分配了这些数组(就我所见)、我完全能够读取前2个数组和第三个的前6个 ISO 块。 之后、这些值将变为 FFFF。 我尝试了很多、但我找不到解决方法。 是否有一些简单的解决方案? 我是否需要以某种方式更改设置、还是根本不可能更改?
谢谢
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.
大家好、
我有一些问题、我很乐意提供帮助。 在我的程序中、我需要通过 NFC 读取一些180字节阵列(总共6个)。 我正确分配了这些数组(就我所见)、我完全能够读取前2个数组和第三个的前6个 ISO 块。 之后、这些值将变为 FFFF。 我尝试了很多、但我找不到解决方法。 是否有一些简单的解决方案? 我是否需要以某种方式更改设置、还是根本不可能更改?
谢谢
好的,我只是注意到整个数组在第11个元素之后被破坏了。 当我让它在 RAM 中运行时、不会发生这种情况(我将阵列分配给 FRAM、以便从 NFC 读取它)。 是否有从 RAM 读取的方法? 到目前为止,我已经尝试过但失败了。
好的、可能需要澄清。 我将".text"移动到 RAM 中、使程序适合存储器。 该程序测量它写入6x180Byte 数组的一些数据。 我想在最后读出这些数组 如果我现在将所有数组也移动到 RAM 中、则整个过程都可以正常工作。 但是、在这里、就我看到的情况而言、我无法通过 NFC 读取它? 因此、我尝试在 FRAM 中分配内存(按照读取顺序)、并且我能够读取前2个完整阵列和第三个阵列的前11个元素。 其余部分已损坏。 我尝试了很多,但没有任何工作,我担心我在这里缺少一些必要的东西。
您好、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
我得到以下读数:
我对该数组执行什么操作无关紧要。 它将始终在同一扇区损坏。