工具/软件:TI C/C++编译器
你(们)好。
我一直在浏览一些 driverlib 以了解如何实现 tlv 层、并遇到两个实例、在这两个实例中、为器件 ID 字段指定了确切的地址、即0x1A04和0x1A05。
我很惊讶、对于每个芯片、它们没有相对于运行时头文件中的 TLV_base 定义进行定义。
我为此指定了它们、编译失败的原因是 __MSP430_BASEADDRESS_TLV_在任何地方都不存在。 显然、如果我将其定义为0x1A00、它适用于我的芯片-但我不确定该地址是否适用于其他芯片。 我分析了所有头文件并生成了 TLV_END 的可能值列表、该列表以0x1AFF 或0x13FF 的形式出现、TLV_START 为0x1A08或0x13C0。
我看了这个芯片、i2020和 tlv 实际上开始于0x13C0、而 fr5848的 tlv 开始于0x1A00 -头文件中的 TLV_START 含义中的冲突。 它们的定义显然不同。
在计算校验和时、用于 fr5842的 TLV CRC 的数据构成了从存储的 CRC 之后到结束的范围、而对于 i2020、它构成什么? 如何通过编程方式确定此范围?
针对 fr5848的 TLV_START (0x1A08)的定义似乎是芯片记录的第一个字节、这将是第一个有效标签、但是这个'信息块'中的某些字节也被制成为 CRC 的一部分。
driverlib 实现的标签搜索算法、用于解析 TLV 从这些文件中定义的 TLV_START 到 TLV_END 的标签标识符搜索、跳过中间的任何字节。 那么、如果 i2020的 CRC 包含有效的标签标识符、会发生什么情况?
fr5848似乎具有正确的结构,以便此搜索正常运行。
一天结束时、我需要了解三个方面:
- 谁定义 了__MSP430_BASEADDRESS_TLV__、ME 或编译器(这表明我缺少某些内容)
- TLV_START 实际上表示什么
- 如何通过编程方式确定 TLV CRC 寄存器中存储的字节的有效 CRC 范围
此致、
Matt P