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.

[参考译文] CC2652P:Freescale MC13213至 CC2652

Guru**** 2540720 points
Other Parts Discussed in Thread: CC2652P, SIMPLELINK-CC13X2-26X2-SDK, SYSCONFIG, Z-STACK, CC1352P, CC2652R, CC2531

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/997113/cc2652p-freescale-mc13213-to-cc2652

器件型号:CC2652P
主题中讨论的其他器件: SIMPLELINK-CC13X2-26X2-SDKSysConfigZ-stackCC1352PCC2652RCC2531

您好!

我们实际上使用的是 Freescale NXP MC13213 (MC13192 MC13202)和 SMAC 堆栈  

(这是基于802.15.4构建的 Freescale NXP 最简单的堆栈)

该芯片组将在今年年底推出 NLA、我们希望将其替换为 CC2652P。

 我已经安装了所有 SimpleLink440套件、并且能够在 CC2652上编译、运行和调试

(模块 Eebyte E72 2G4M20S1E)、但无法与 Freescale 建立射频通信。

这不是真正的 Zigbee。 2.4GHz 值得一去。我的问题是什么

1) 1)您建议从哪个项目开始?

例如,我将 rfEasyLinkRx 用于 CC1352P2,但哪一个更好?

2) 2)所有射频参数使用哪种射频配置?

有很多东西需要配置、如果有人配置正确、我会很高兴

(最好是具有宽开式射频辐射、然后降低接受能力)

3) 3)天线开关的配置

TX = DIO5设置为1

RX = DIO6被设定为1

我非常感谢帮助建立射频通信,因为这将更加容易...

此致

Francois

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

    Francois 您好、

    我对以前的硬件平台或软件解决方案一无所知、但您似乎需要基于 IEEE 802.15.4的堆栈。  我建议查看 SIMPLELINK-CC13X2-26X2-SDK 15.4-Stack 资源。  您可以 根据项目需求参考 collector_2_4g、sensor_2_4g 和协处理器示例。  您的开发应基于 LAUNCHXL-CC1352P-2 EVM、其中 SysConfig -> Show Board View -> Use Custom Board is selected (Lock PinMux 未选中) and TI Drivers -> RF is modified for 2 Antenna Switch Control Pins:DIO5/TX for CONFIG_RF_HIGH_PA 和 DIO6/RX for CONFIG_RF_24GHz。  您需要了解有关 Freescale 器件所用通道掩码和模式的更多信息、并相应地修改 TI 15.4 Stack SysConfig 设置。  可在 TI 15.4-Stack 用户指南中找到几条指令。  如果您确实需要 Zigbee、则相同的指令会应用、但适用于 Z-Stack。

    您还可以尝试使用 Smart RF Studio 通过 IEEE 802.15.4模式从 Freescale 器件捕获数据包、并针对您的特定电路板布局定制目标配置。

    此致、
    Ryan

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

    您好、Ryan、

    非常感谢您的帮助以及您为我提供的链接。 下面是我找到的内容:  

    1) 1)我已安装、配置为 DIO5 DIO6并使用 SmartRfStudio 进行测试、找到以下内容:  

    我的协议是802.15.4 250 kbps OQPSK、我能够从 Freescale NXP 接收正确的数据包

    有两种选择:IEEE 802.15.4和 IEEE 802.15.4 10dBm:我不知道到底有什么区别?

    2) 2)我认为 TI 15.4堆栈不适合、因为我没有 PAN 协调器或 网络设备的角色。

    在我的例子中、我们只使用射频层、而不使用任何堆栈、所有器件都充当主器件或从器件。

    3) 3)现在我要移至 CCS 项目,我已经加载了 RfPacketRx 项目并修改了 syscfg 属性:  

    射频堆栈2.4GHz 时的定制 IEEE 802.15.4 OQPSK、具有高 PA、自定义符号名称、无 PA 表。

    当我编译时、我有 RF_cmdPropRadioDivSetup 和 RF_cmdPropRx、它们未定义。

    在这一步中、我不知道该怎么办?

    我是否为我的应用选择了良好的启动项目?

    我是否必须声明或编写我自己的函数? (对于天线切换、 这将不会是一个大问题)

    我是否必须在某个位置包含 SmartRfStudio 生成的代码?

    如果你能给我一些小的指导、我会非常感兴趣、但你已经给我提供了正确的指导  

    此致

    Francois

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

    尊敬的 Francois:

    1.我不知道您在 Smart RF Studio 中看到的是什么、但"10dBm"表示硬件针对最大10dBm 的 TX 输出进行了优化、例如 LAUNCHXL-CC1352P-4、而 LAUNCHXL-CC1352P-2则利用匹配网络允许最大20dBm 的输出。

    2.您可以考虑任何专有射频解决  方案,如 rfPacketRx、rfEasyLinkRx 或 rfWsnNode,具体取决于您的应用需求。  请参考 专有射频文档 和 SimpleLink Academy Labs

    3.您需要将 RF_*定义更改为 SysConfig 输出文件根据 IEEE PHY 选择生成的定义。 只要使用 LAUNCHXL-CC1352P-2/4示例、就不需要为天线切换创建自己的功能。 请参阅上述文档以了解更多信息。

    此致、
    Ryan

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

    您好、Ryan、

    感谢您的帮助以及您所指出的项目样片。

    1) 1)对于10dBm、我将介绍在 syscfg、RF_STACKS、Custom、IEEE 802.15.4中的选择

    有2种选择、我选择了第一种(没有10dBm)

    2) 2)我已经安装了您向我指示的项目、修改了 RF_*声明、修改为定制堆栈 IEEE 802.15.4

    借助2.4GHz 参数 略微更改 了 RF_cmdPropRx 和 RF_cmdPropTx 中的字段、现在我可以编译、加载和运行它

    我现在遇到的问题是,我无法发送多个命令:  

    rf_open (  

    然后 是 RF_postCmd (rfHandle、(RF_Op *)和 RF_cmdF、  

    然后 是 RF_runCmd (rfHandle、(RF_OP*)&RF_cmdPropRx

    射频引擎残桩、我必须重新启动调试器才能将其解锁(等待信号量解锁????)

    在调试器中重新启动程序不会释放射频引擎

    完成后是否必须确认每个功能? 或者在发送新命令之前是否等待标志?

    我明天会继续

    此致

    Francois

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

    嗨、Francois、

    感谢您的澄清、最大 TX 输出功率选项取决于所选的硬件。  我认为这个 类似的 E2E 主题 与您的射频命令问题相关。

    此致、
    Ryan

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

    好的、谢谢 Ryan、我明天将进行测试、但今天下午、我得以赶上了一个测试  

    从我的旧 Freesce/NXP 接口发送帧  

    Francois

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

    您好、Ryan、

    除了您指示我的指示和示例、

    我现在只使用了 cmdlPost (对于 RF_cmdF 为 cmdlRun)、它听起来工作正常

    我能够从旧的 Freescale /NXP 发送一个帧、在 cc2652上完全接收它、

    回复框架(TI -> NXP 的其他方向)时、我仍然有一些缺失/错误、需要进一步调查。

    我会与您保持联系

     Francois

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

    您好、Ryan、

    我 在 ZigBee 模块上工作了2天。

    使用 SmartRF Studio、它在首次尝试时在两个方向上都能完美工作

    借助基于 RfEchoRX nonrtos 的 CCS 工程、它可以完美地用于接收。

    我已经添加了一些代码来传输帧、但目前没有成功。

     SmartRF Studio 和 syscfg 生成的配置是相同的、但在中除外

    RF_cmdPropRadioDivSetup

    在  SmartRF Studio 中、TX 功率= 0xA73F;在 SYSCfg 中、TX_POWER = 0xFFFF

    我想知道是否必须配置输出放大器,在哪里?

    第一步,我是否可以在没有 PA 的情况下启动(而不必切换输出引脚)?

    我将在下周继续

    此致

    Francois

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

    尊敬的 Francois:

    您需要根据是否尝试使用 内部功率放大器和相应的输出射频引脚来更改 SysConfig Custom -> IEEE 802.15.4 -> High PA 单选框。 默认的 rfEchoRx 示例已具有接收和发送过程、请尝试按照自述文件中的说明使该和 rfEchoTx 正常工作。  您还可以使用专有 PHY 参考原始设置、以确定问题是 PHY 设置还是硬件配置。  如何确定帧传输是否不成功?

    此致、
    Ryan

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

    您好、Ryan、

    我已经完成了 IEEE 802.15.4通信、现在的结果是我的最新业绩。

    为了测试我是否成功接收帧、我在 MC13213测试 PCB 上使用 NXP 调试器、它在每个接收到的帧停止。   

    1) 1)对于具有 DIO5 DIO6配置的输出 PA 和射频多路复用器是正确的>我已经使用频谱分析仪进行了测量、并且具有相同的配置

    同时通过  Smart RF studio7和我的项目以2405MHz 的频率发射。

    2) 2)对于 Tx 和 Rx 命令、我明确使用  RF_runScheduleCmd 、更适合 TX 命令

    3) 3)对于 Rx、旧 NXP 设计发出的每个帧都由 CC2652P 正确固定

    4) 4)对于 Tx、并非所有帧都被 的 NXP 设计正确捕获、在发送多个帧时、我可以捕获它、但不是第一次尝试。

    (测试时、 智能射频残桩7发送的每个帧(数据包计数= 1)都被  旧的 NXP 设计正确捕捉、但并非 所有来自 rfEchoTx 的帧都正确捕捉)

    我们是否可以获得有关 OQPSK 中配置的智能射频残桩7的精确配置的更多信息,特别是用于传输数据包的信息?

    (使用的配置、使用的命令、可能会向射频内核发送预命令等...因为每次都能正常工作)

    此致

    Francois

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

    尊敬的 Francois:

    感谢您提供详细的更新。  为了了解 PHY 在两个实例中应如何相同、我建议您将 SmartRF Studio 寄存器设置与 SysConfig ti_radio_config.c/h 进行比较、并确定哪些更改可能导致观察到的偏差。  您甚至可以考虑导出 Smart RF 代码并在项目中使用它来查看它是否会产生任何影响。

    此致、
    Ryan

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

    您好、Ryan、

    我已经比较了 SysConfig 和 SmartRfStudio 生成的代码配置、所有命令都是相同的。

    (我希望补丁 RF_PATCH_CPE_IEEE_802_15_4是相同的吗?)

    我有一个问题、在 SmartRfStudio 中、在 IEE 802.15.4数据包 TX 中、存在:  

    -前导码32位(001010101...)

    SFD 8位(0xA7)

    -长度

    我必须将其包含在帧中还是在命令中的某个位置设置参数,以指示发送这些字节的射频内核?

    Nest Week、我将执行以下操作:

    1) 1)在另一个频率下进行测试

    2) 2)将 SmartRfStudio 生成的 smartRfSettings.c 和.h 直接包含在我的代码中

    此致

    Francois

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

    前导码和 SFD 对于 IEEE 802.15.4 PHY 来说是静态的、不需要包含在 SDK 项目的数据包数据中、但长度可能会因您需要传输的信息而异。

    此致、
    Ryan

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

    您好、Ryan、

    对前导码来说、这很清楚。

    其他:  

    在映射文件中,我可以看到我的项目链接到:  

    /kernel/nortos/lib/ccs/m4f/nortos_cc13x2.a

    /source/ti/drivers/lib/ccs/m4f/drivers_cc13x2.a

    /source/ti/drivers/rf/lib/rf_multiMode_cc13x2.aem4f

    我认为这是错误的器件、我的器件是 CC2652P

    如果我进入 syscfg 来切换设备,我已经说明:  

    主板:无

    在"器件选择"中、我选择了 CC1352P1F3RGZ、但没有 CC2652P 可供选择

    我应该选择哪一个? (CC2652R1FRGZ、CC2652R1FSIP、CC2652RB1FRGZ)

    (通常2652与1352相同、但我看到链接的库不同)

    此致

    Francois

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

    根据 专有射频迁移指南 ->在 CC2652P 上运行软件示例、您可以毫不担心地使用 CC1352P-2/4项目/设置。  由于具有内部功率放大器、CC2652P 与 CC1352P 比 CC2652R 更相似。

    此致、
    Ryan

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

    您好、Ryan、

    好的、对于 CC1252P、我选择了该配置

    我进行了其他测试、但效果相同、我并行放置了一个802.15.4监听器。

    帧2、从我的代码发送、旧 NXP 设备未检测到。

    帧3、从 SmartRfStudio 发送、 在旧 NXP 设备第一次尝试(发送1帧)时检测到。

    我已经比较了 SmartRfStudio 生成的命令和我使用的命令是相同的。

    是否可以知道 SmartRfStudio 的确切命令及其发送顺序?

    系统是否有特殊的初始化或校准?

    它不能来自前导码(不知道旧的 NXP 前导码、曼彻斯特编码)?

    是否可以在示波器频率较低的情况下同时监控两种情况下的信号?

    我不知道为什么、使用相同的硬件并看到相同的帧、它可以与 SmartRfStudio 完美配合、 而不是与我在 CCS 中的代码完美配合。

    做更多的事情  

    此致

    Francois

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

    Francois 您好、

    您是否能够从代码中发送数据包并在 Smart RF Studio 中接收数据包?  我假设使用类似的硬件以大约相同的距离传输帧2和3?  唯一的差异似乎是时间和 RSSI/CLQI。  我建议使用数据包监听器2和 Wireshark 作为更高级的监听解析器。

    此致、
    Ryan

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

    您好、Ryan、

    以下是更多信息:

    1) 1)您是否能够从代码中发送数据包并在 Smart RF Studio 中接收数据包?   

    我无法告诉您、因为我只有一个字节模块与 SmartRfStudio 或我的代码一起使用。

    使用我的代码、我将无任何错误的帧发送到 PackeSniffer (EByte E18 2G44U04B CC2531)

    有时(小于1/100)一个帧到我的旧 NXP。

    2)  2)假设使用类似的硬件以大约相同的距离传输帧2和3?

    相同的硬件条件

    3)  唯一的区别似乎是时间和 RSSI/CLQI。  

    我尝试修改了20、14、5dBm、但效果完全相同

    我建议使用数据包监听器2和 Wireshark 作为更高级的监听解析器。

    谢谢你们,我明天会试一下... 最令人沮丧的是、它与 SmartRfStudio 完美结合

    如果您可以获得有关内部内容的更多信息(初始化、命令、计时等...)

    它可能会非常有帮助

    Francois

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

    您好!

    [引用 userid="113880" URL"~/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/997113/cc2652p-freescale-mc13213-to-cc2652/3699422 #3699422"]

    4) 4)对于 Tx、并非所有帧都被 的 NXP 设计正确捕获、在发送多个帧时、我可以捕获它、但不是第一次尝试。

    (测试时、 智能射频残桩7发送的每个帧(数据包计数= 1)都被  旧的 NXP 设计正确捕捉、但并非 所有来自 rfEchoTx 的帧都正确捕捉)

    [/报价]

    这是否意味着您只能在 NXP 侧接收1个数据包?

    在 CCS 代码上执行 TX 时、是否确保运行 CMD_IEEE_RX?
    通常、在执行 CMD_IEEE_TX 之前、应运行后台 IEEE 命令。

    有关这方面的更多详细信息、请参阅 TRM (25.5.4无线电操作命令)。

    (请继续将 RF_scheduleCmd 用于 CMD_IEEE_RX 和 CMD_IEEE_TX)。

    谢谢、
    Toby

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

    尊敬的 Toby:

    感谢你的帮助。

    在 NXP 上、我有时会收到正确的帧(1/100或1/200)、但不会再收到

    (第一次尝试使用 SmartRfStudio 时、NXP 接收到帧)

    实际上、在初始化时、我先发送 RF_cmdF、然后发送 RF_cmdRX。

    在 Rfreceive 回调函数中、当我接收到一个帧时、我会取消该函数(rf_cancelCmd (rfHandle、ch、0);)

    然后发送新的帧  CMD_IEEE_TX。

    我尝试将  CMD_IEEE_TX 置于主循环中(回调函数之外)、并尝试使用 CmdRun、CmdPost、CmdRunScheduled  

    但结果相同->在 PacketSniffer 上正确看到、但 NXP 未检测到。

    我想我错过了 SmartRfStudio 中包含的初始化或其他内容,但又该怎么办????

     最好的格子

    Francois

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

    总结一下、确保我了解:

    • TI (SmartRF)<->NXP 正常
    • TI (CCS)<-- NXP 正常
    • TI (CCS)->NXP 不正常(例如、它可以进行100次尝试中的1次?)
    [引用 userid="113880" URL"~/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/997113/cc2652p-freescale-mc13213-to-cc2652/3713362 #3713362"]

    在 Rfreceive 回调函数中、当我接收到一个帧时、我会取消该函数(rf_cancelCmd (rfHandle、ch、0);)

    然后发送新的帧  CMD_IEEE_TX。

    [/报价]

    CMD_IEEE_TX 应在存在正在运行的后台命令(例如 CMD_IEEE_RX)后执行。 这就是我在我这边尝试过的、我能够在 SmartRF Studio (数据包 RX)中接收所有这些数据包。

    您可以分享一些代码片段吗?
    例如 CMD_IEEE_TX、CMD_IEEE_RX 结构、以及如何在应用中使用它们。

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

    您好 Toby、

    这是我的测试  

    TI (SmartRF)<->NXP 正常
    TI (CCS)<-- NXP 正常
    TI (CCS)->NXP 不正常(例如、它可以进行100次尝试中的1次?)

    完全正确(可能超过100次尝试)

    这就是我在我这边尝试过的、我能够在 SmartRF Studio (数据包 RX)中接收所有这些数据包。

    是的,我也一样,我通过 PacketSniffer 收到了它,但 NXP 没有收到它...

    我已根据 rfEchoRx 制作了一个示例项目并将其加入:

    SmartRF_SETTINGS 是 SmartRFSudio 生成的文件(适用于 NXP,我已重命名文件*SR)

    在 NXP.c 中使用 RfRx 和 RfTx

    我使用 了 RF_postCmd、因为我认为在回调中不允许 RF_runCmd 和 RF_pendCmd。

    如果您需要更多信息、请告诉我

    此致

    Francois

    static void echoCallback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e)
    {
    static uint8_t txPacket[5] = {0x00, 0x01, 0x02, 0x03, 0x04,};
    if (e & RF_EventRxEntryDone)
      {
      /* Successful RX */
      currentDataEntry = RFQueue_getDataEntry();      /* Get current unhandled data entry */
      packetLength      = *(uint8_t *)(&(currentDataEntry->data));
      packetDataPointer = (uint8_t *)(&(currentDataEntry->data) + 1);
      RFQueue_nextEntry();
      /* Command Tx */
      RF_cmdIeeeTxSR.startTrigger.triggerType = TRIG_REL_PREVEND; //TRIG_NOW;
      RF_cmdIeeeTxSR.pPayload = &txPacket[0];
      RF_cmdIeeeTxSR.payloadLen = 5;
      /* Command Rx */
      RF_cancelCmd(rfHandle, ch, 1);
      RF_EventMask terminationReason = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdIeeeTxSR, RF_PriorityNormal, &echoCallback, (RF_EventRxEntryDone | RF_EventTxEntryDone |RF_EventLastCmdDone | RF_EventLastFGCmdDone | RF_EventFGCmdDone));
      }
    else if (e & RF_EventTxEntryDone)
      {
      }
    else if (e & RF_EventLastCmdDone)
      {
      }
    else
      {
      RF_cmdIeeeRxSR.pRxQ = &dataQueue;
      RF_cmdIeeeRxSR.startTrigger.triggerType = TRIG_REL_PREVEND;
      RF_cmdIeeeRxSR.pOutput = &rxStatistics;
      RF_EventMask terminationReason = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdIeeeRxSR, RF_PriorityNormal, &echoCallback, (RF_EventRxEntryDone | RF_EventTxEntryDone |RF_EventLastCmdDone | RF_EventLastFGCmdDone | RF_EventFGCmdDone));
      }
    }
    
    void *mainThread(void *arg0)
    {
    RF_Params rfParams;
    RF_Params_init(&rfParams);
    initAntennaSwitch();
    if (RFQueue_defineQueue(&dataQueue, rxDataEntryBuffer, sizeof(rxDataEntryBuffer), NUM_DATA_ENTRIES, PAYLOAD_LENGTH + NUM_APPENDED_BYTES))
      {
      while(1);
      }
      rfHandle = RF_open(&rfObject, &RF_propSR, (RF_RadioSetup*)&RF_cmdRadioSetupSR, &rfParams);
      RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
      while(1)
        {
        RF_cmdIeeeRxSR.pRxQ = &dataQueue;
        RF_cmdIeeeRxSR.pOutput = &rxStatistics;
        RF_EventMask terminationReason = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdIeeeRxSR, RF_PriorityNormal, &echoCallback, (RF_EventRxEntryDone | RF_EventLastCmdDone));
        switch(terminationReason)
          {
          case RF_EventLastCmdDone:
          break;
          case RF_EventCmdCancelled:
          break;
          case RF_EventCmdAborted:
          break;
          case RF_EventCmdStopped:
          break;
          default:
          break;
          }
        uint32_t cmdStatus = ((volatile RF_Op*)&RF_cmdIeeeRxSR)->status;
        switch(cmdStatus)
          {
          case PROP_DONE_OK:
          break;
          case PROP_DONE_RXERR:
          break;
          case PROP_DONE_RXTIMEOUT:
          break;
          case PROP_DONE_BREAK:
          break;
          case PROP_DONE_ENDED:
          break;
          case PROP_DONE_STOPPED:
          break;
          case PROP_DONE_ABORT:
          break;
          case PROP_ERROR_RXBUF:
          break;
          case PROP_ERROR_RXFULL:
          break;
          case PROP_ERROR_PAR:
          break;
          case PROP_ERROR_NO_SETUP:
          break;
          case PROP_ERROR_NO_FS:
          break;
          case PROP_ERROR_RXOVF:
          break;
          default:
            while(1);
          break;
          }
       }
    }
    
    //*********************************************************************************
    // Generated by SmartRF Studio version 2.20.1 (build#277)
    // The applied template is compatible with cc13x2_26x2 SDK version 2.10.xx.xx or newer.
    // Device: CC2652P Rev. E (2.1). Only supported by CC26x2 SDK version 3.30.xx.xx or newer
    //
    //*********************************************************************************
    
    
    //*********************************************************************************
    // Parameter summary
    // IEEE Channel: 11 
    // Frequency: 2405 MHz
    // SFD: 0 
    // Packet Data: 255 
    // Preamble		 (32 bit): 01010101... 
    // TX Power: 14 dBm 
    // Enable high output power PA: true 
    
    #include <ti/devices/DeviceFamily.h>
    #include DeviceFamily_constructPath(driverlib/rf_mailbox.h)
    #include DeviceFamily_constructPath(driverlib/rf_common_cmd.h)
    #include DeviceFamily_constructPath(driverlib/rf_ieee_cmd.h)
    #include <ti/drivers/rf/RF.h>
    #include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_ieee_802_15_4.h)
    #include "smartrf_settings.h"
    
    
    // TI-RTOS RF Mode Object
    RF_Mode RF_propSR =
    {
        .rfMode = RF_MODE_AUTO,
        .cpePatchFxn = &rf_patch_cpe_ieee_802_15_4,
        .mcePatchFxn = 0,
        .rfePatchFxn = 0
    };
    
    
    // Overrides for CMD_RADIO_SETUP_PA
    uint32_t pOverridesSR[] =
    {
        // override_ieee_802_15_4.xml
        // Rx: Set LNA bias current offset to +15 to saturate trim to max (default: 0)
        (uint32_t)0x000F8883,
        // Tx: Set DCDC settings IPEAK=3, dither = off
        (uint32_t)0x00F388D3,
        (uint32_t)0xFFFFFFFF
    };
    
    
    // CMD_RADIO_SETUP_PA
    // Radio Setup Command for Pre-Defined Schemes
    rfc_CMD_RADIO_SETUP_PA_t RF_cmdRadioSetupSR =
    {
        .commandNo = 0x0802,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .mode = 0x01,
        .loDivider = 0x00,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x0,
        .config.analogCfgMode = 0x0,
        .config.bNoFsPowerUp = 0x0,
        .txPower = 0xA73F,
        .pRegOverride = pOverridesSR,
        .pRegOverrideTxStd = 0,
        .pRegOverrideTx20 = 0
    };
    
    
    // CMD_FS
    // Frequency Synthesizer Programming Command
    rfc_CMD_FS_t RF_cmdFsSR =
    {
        .commandNo = 0x0803,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .frequency = 0x0965,
        .fractFreq = 0x0000,
        .synthConf.bTxMode = 0x1,
        .synthConf.refFreq = 0x0,
        .__dummy0 = 0x00,
        .__dummy1 = 0x00,
        .__dummy2 = 0x00,
        .__dummy3 = 0x0000
    };
    
    
    // CMD_IEEE_TX
    // IEEE 802.15.4 Transmit Command
    rfc_CMD_IEEE_TX_t RF_cmdIeeeTxSR =
    {
        .commandNo = 0x2C01,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .txOpt.bIncludePhyHdr = 0x0,
        .txOpt.bIncludeCrc = 0x0,
        .txOpt.payloadLenMsb = 0x0,
        .payloadLen = 0x05,
        .pPayload = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .timeStamp = 0x00000000
    };
    
    
    // CMD_IEEE_RX
    // IEEE 802.15.4 Receive Command
    rfc_CMD_IEEE_RX_t RF_cmdIeeeRxSR =
    {
        .commandNo = 0x2801,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .channel = 0x00,
        .rxConfig.bAutoFlushCrc = 0x0,
        .rxConfig.bAutoFlushIgn = 0x0,
        .rxConfig.bIncludePhyHdr = 0x0,
        .rxConfig.bIncludeCrc = 0x0,
        .rxConfig.bAppendRssi = 0x1,
        .rxConfig.bAppendCorrCrc = 0x1,
        .rxConfig.bAppendSrcInd = 0x0,
        .rxConfig.bAppendTimestamp = 0x0,
        .pRxQ = 0, // INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx
        .pOutput = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .frameFiltOpt.frameFiltEn = 0x0,
        .frameFiltOpt.frameFiltStop = 0x0,
        .frameFiltOpt.autoAckEn = 0x0,
        .frameFiltOpt.slottedAckEn = 0x0,
        .frameFiltOpt.autoPendEn = 0x0,
        .frameFiltOpt.defaultPend = 0x0,
        .frameFiltOpt.bPendDataReqOnly = 0x0,
        .frameFiltOpt.bPanCoord = 0x0,
        .frameFiltOpt.maxFrameVersion = 0x3,
        .frameFiltOpt.fcfReservedMask = 0x0,
        .frameFiltOpt.modifyFtFilter = 0x0,
        .frameFiltOpt.bStrictLenFilter = 0x0,
        .frameTypes.bAcceptFt0Beacon = 0x1,
        .frameTypes.bAcceptFt1Data = 0x1,
        .frameTypes.bAcceptFt2Ack = 0x1,
        .frameTypes.bAcceptFt3MacCmd = 0x1,
        .frameTypes.bAcceptFt4Reserved = 0x1,
        .frameTypes.bAcceptFt5Reserved = 0x1,
        .frameTypes.bAcceptFt6Reserved = 0x1,
        .frameTypes.bAcceptFt7Reserved = 0x1,
        .ccaOpt.ccaEnEnergy = 0x0,
        .ccaOpt.ccaEnCorr = 0x0,
        .ccaOpt.ccaEnSync = 0x0,
        .ccaOpt.ccaCorrOp = 0x1,
        .ccaOpt.ccaSyncOp = 0x1,
        .ccaOpt.ccaCorrThr = 0x0,
        .ccaRssiThr = 0x64,
        .__dummy0 = 0x00,
        .numExtEntries = 0x00,
        .numShortEntries = 0x00,
        .pExtEntryList = 0, // INSERT APPLICABLE POINTER: (uint32_t*)&xxx
        .pShortEntryList = 0, // INSERT APPLICABLE POINTER: (uint32_t*)&xxx
        .localExtAddr = 0x0000000012345678,
        .localShortAddr = 0xABBA,
        .localPanID = 0x0000,
        .__dummy1 = 0x000000,
        .endTrigger.triggerType = 0x1,
        .endTrigger.bEnaCmd = 0x0,
        .endTrigger.triggerNo = 0x0,
        .endTrigger.pastTrig = 0x0,
        .endTime = 0x00000000
    };
    
    
    
    

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

    您好!

    我已使用 PacketSniffer2录制了 NXP 帧、但无法打开。

    如果你能看到里面的东西…

    如何发送 pcap 文件(2ko)?

    此致

    Francois

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

    感谢您分享代码片段、我将查看问题是否存在。

    要在 E2E 中附加文件、请尝试:  
    Insert (插入)--> Image (图像)/VIDEO/FILE (视频/文件)--> Upload (上载)

    然后您可以选择该文件。

    您还可以附加屏幕截图。

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

    浏览完您的代码后、您会看到如下所示的内容:

    1. POST (RF_postCmd) RX
    2. 在 RX 回调(回声回调)中、取消(RF_cancelCmd) RX 命令、然后发布(RF_postCmd) TX

    此时、您没有后台 RX 运行。

    您能否尝试这样简单的操作:

    1. 调度(RF_scheduleCmd) RX
    2. 调度(RF_scheduleCmd) TX
    3. 等待 TX 完成(RF_PendCmd)
    4. 验证 NXP 设备 RX 是否正常、然后转至步骤2。

    在我们拥有独立 TX 之后、我们可以在单个示例中将其与 RX 相结合。

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

    尊敬的 Toby:

    以下是一些其他的问题:

    浏览完您的代码后、您会看到如下所示的内容:

    1. POST (RF_postCmd) RX
    2. 在 RX 回调(回声回调)中、取消(RF_cancelCmd) RX 命令、然后发布(RF_postCmd) TX

    此时、您没有后台 RX 运行。

    完全正确

    它 不发送任何帧:  

    -如果我删除 RF_CancelCmd

    -如果通过 RF_runscheduleCmd 更改了 RF_postCmd (具有或不具有 RF_cancelCmd)

    您能否尝试这样简单的操作:

    1. 调度(RF_scheduleCmd) RX
    2. 调度(RF_scheduleCmd) TX
    3. 等待 TX 完成(RF_PendCmd)
    4. 验证 NXP 设备 RX 是否正常、然后转至步骤2。

    如果我 通过 rf_runscheduleCmd 更改 rf_postCmd、它将发送任何帧

    我已经记录并分析了 NXP 发送的帧,结果如下:  

    顶部:通过 Wireshark 记录

    bot:使用数据包监听器录制相同的内容(您可以在结尾看到相同的有效负载)

    我认为 RF_POST 命令正常、但进入 NXP 的帧的前导码或同步有问题

    这是否是曼彻斯特编码的问题,如何更改?

    为什么、在 SmartRfStudio 上、当我们发送射频命令时、我们仅发送这3个命令

    已执行>CMD_RADIO_SETUP_PA
    >状态:0x400 DONE_OK
    >CMD_FS 已执行
    >状态:0x400 DONE_OK
    >CMD_ABORT 已执行
    >状态:0x1 DONE_OK

    您是否可以了解 SmartRfStudio 的确切命令?

    Francois

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

    您好!

    我已使用 Wireshark 记录了不同设备发送的帧,结果如下:  

    NXP 发送的帧
    飞思卡尔(72字节)

    0000 45 00 48 00 00 00 00 80 11 B7 4e c0 A8 01 03 e.H. N。。。
    0010 c0 a8 01 03 45 5a 45 00 34 3f db 45 58 02 01……EZEz.4?.EX...
    0020 0b 45 27 00 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 .E'..........
    0030 04 00 00 00 00 00 00 00 00 00 00 00 0c 61 00 18 00 ........ A...
    0040 00 06 0b 02 01 00 2f EC… /。

    通过我们的 TI 软件发送(NXP 未收到)
    TI (70字节)
    0000 45 00 46 00 00 00 00 00 80 11 B7 50 c0 A8 01 03 E.F... p。。。
    0010 c0 a8 01 03 45 5a 45 00 32 c7 df 45 58 02 01……EZEz.2.EX..
    0020 0b 45 27 00 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 .E'..........
    0030 02 00 00 00 00 00 00 00 00 00 00 0A 04 06 00 01 ........
    0040 02 03 00 28 EC ....(.

    由 SmartRfStudio 发送(NXP 完全接收)
    SmartRF (70字节)

    0000 45 00 46 00 00 00 00 00 80 11 B7 50 c0 A8 01 03 E.F... p。。。
    0010 c0 A8 01 03 45 5a 45 00 32 E2 D9 45 58 02 01……EZEz.2.EX..
    0020 0b 45 27 00 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 .E'..........
    0030 03 00 00 00 00 00 00 00 00 00 00 0A 00 01 02 03…
    0040 04 05 06 07 06 EC…

    它大致相同、芯片地址可能不同。

    同步和前导码是否可能不同?

    如何修改它?

    修补程序是否正常? 是否没有更新 ?

    #include DeviceFamily_constructPath (rf_patches/rf_patch_cpe_IEEE_802_15_4.h)

    此致

    Francois

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

    感谢您提供更多详细信息!

    根据我们到目前为止的讨论、它们在 NXP RX 无线传输的期望中可能存在一些差异(SmartRF Studio 按预期发送数据、但修改后的 CCS 示例没有)。

    我已经浏览 并比较了 rf_patch_cpe_ieee_802_15_4.h 的过去 SDK 文件(从2.40到5.10)

    所附的是修补程序不同的修补程序。
    您可以在 CCS 示例上尝试这些方法吗(您可能需要更改修补程序数组的名称,例如 rf_patch_cpe_IEEE_802_15_4()-> rf_patch_cpe_IEEE_802_15_4_sdk_2_40())?

    此外,您能否检查 NXP 设备使用的802.15.4规范的哪个版本?
    是否有与 SmartRF Studio 相当的 NXP 工具可用于控制 NXP 器件?


    2.40.00.81 SDK:

    /cfs-file/__key/communityserver-discussions-components-files/158/2746.simplelink_5F00_cc13x2_5F00_26x2_5F00_sdk_5F00_2_5F00_40_5F00_00_5F00_81_5F00_source_5F00_ti_5F00_devices_5F00_cc13x2_5F00_cc26x2_5F00_rf_5F00_patches_5F00_rf_5F00_patch_5F00_cpe_5F00_ieee_5F00_802_5F00_15_5F00_4.h

    3.10.00.54 SDK:

    /cfs-file/__key/communityserver-discussions-components-files/158/4382.simplelink_5F00_cc13x2_5F00_26x2_5F00_sdk_5F00_3_5F00_10_5F00_00_5F00_54_5F00_source_5F00_ti_5F00_devices_5F00_cc13x2_5F00_cc26x2_5F00_rf_5F00_patches_5F00_rf_5F00_patch_5F00_cpe_5F00_ieee_5F00_802_5F00_15_5F00_4.h

    4.10.00.78 SDK:

    /cfs-file/__key/communityserver-discussions-components-files/158/2555.simplelink_5F00_cc13x2_5F00_26x2_5F00_sdk_5F00_4_5F00_10_5F00_00_5F00_78_5F00_source_5F00_ti_5F00_devices_5F00_cc13x2_5F00_cc26x2_5F00_rf_5F00_patches_5F00_rf_5F00_patch_5F00_cpe_5F00_ieee_5F00_802_5F00_15_5F00_4.c

    4.20.00.35 SDK:

    /cfs-file/__key/communityserver-discussions-components-files/158/0728.simplelink_5F00_cc13x2_5F00_26x2_5F00_sdk_5F00_4_5F00_20_5F00_00_5F00_35_5F00_source_5F00_ti_5F00_devices_5F00_cc13x2_5F00_cc26x2_5F00_rf_5F00_patches_5F00_rf_5F00_patch_5F00_cpe_5F00_ieee_5F00_802_5F00_15_5F00_4.c

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

    尊敬的 Toby:

    感谢您提供的补丁、我已经对其进行了测试、但没有成功。

    v4.10和 v4.20似乎与我的原始补丁相同。

    V2.40和 v3.10会生成不同大小的.out 文件、帧会正确发送到 TI PacketSniffer、但始终未被检测到  

    NXP。  

    我在2008年开始处理 MC13192、我认为 NXP 使用 了802.15.4的早期版本。 我没有关于他们使用的802.15.4的真实描述。

    在许多 TI 文档中、他们提到了802.15.4-2006、我认为这是不同的。

    我们使用 NXP IDE 来嗅探帧,也许有一个工具,但我们从未使用过(14年前......)

    您能否进一步了解 SmartRfStudio 是如何构建的以及使用哪些工具构建的、因为它是有效的?

    此致

    Francois

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

    我已将您的代码集成到 CC1352P 的 rfPacketTx 示例中。

    在另一个运行 SmartRF Studio 数据包 RX 的器件中、我发现每次复位代码只能传输1-2帧。 (我认为这是由于使用了 RF_postCmd)。

    随附的代码与您提供的代码相同、我进行了一些修改。

    通过此修改、CC1352P 能够每秒发送数据包(可以根据您的用例进行调整)。 修改 假定没有来自其他器件的 TX 活动(因此 RX 可以持续作为后台命令运行)、因此每次 CC1352P 执行 TX (使用 RF_scheduleCmd)时、始终会运行 RX 后台命令。

    e2e.ti.com/.../customer_5F00_code.c

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

    尊敬的 Toby:

    感谢您提供的代码,我已将其包含在我的项目中,但效果始终相同:  

    我通过 PacketSniffer 每秒都能正确看到帧、但 通过 NXP、帧数为1/100或更多

    第一次尝试 SmartRfStudio7时,总是很简单...

    Francois

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

    与我的团队讨论后、您能否尝试以下 TX 代码?

    区别在于、现在我们在 TX 有效载荷上递增"序列号"。

    SmartRF Studio 实际上自动执行以下操作:

    /* TI Drivers */
    #include <ti/drivers/rf/RF.h>
    
    /* Application Header files */
    #include "RFQueue.h"
    #include "smartrf_settings/smartrf_settings.h"
    
    /* Packet RX Configuration */
    #define DATA_ENTRY_HEADER_SIZE 8  /* Constant header size of a Generic Data Entry */
    //#define MAX_LENGTH             30 /* Max length byte the radio will accept */ // original
    #define MAX_LENGTH             128 /* Max length byte the radio will accept */ // toby added
    #define NUM_DATA_ENTRIES       2  /* NOTE: Only two data entries supported at the moment */
    #define NUM_APPENDED_BYTES     2  /* The Data Entries data field will contain:
                                       * 1 Header byte (RF_cmdPropRx.rxConf.bIncludeHdr = 0x1)
                                       * Max 30 payload bytes
                                       * 1 status byte (RF_cmdPropRx.rxConf.bAppendStatus = 0x1) */
    
    /* Buffer which contains all Data Entries for receiving data.
     * Pragmas are needed to make sure this buffer is 4 byte aligned (requirement from the RF Core) */
    #if defined(__TI_COMPILER_VERSION__)
    #pragma DATA_ALIGN (rxDataEntryBuffer, 4);
    static uint8_t rxDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(
            NUM_DATA_ENTRIES, MAX_LENGTH, NUM_APPENDED_BYTES)];
    #elif defined(__IAR_SYSTEMS_ICC__)
    #pragma data_alignment = 4
    static uint8_t
    rxDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES)];
    #elif defined(__GNUC__)
    static uint8_t
    rxDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES,
                                                      MAX_LENGTH,
                                                      NUM_APPENDED_BYTES)]
                                                      __attribute__((aligned(4)));
    #else
    #error This compiler is not supported.
    #endif
    
    /* Receive dataQueue for RF Core to fill in data */
    static dataQueue_t dataQueue;
    static rfc_dataEntryGeneral_t *currentDataEntry;
    static uint8_t packetLength;
    static uint8_t *packetDataPointer;
    
    static RF_Handle rfHandle;
    static RF_Object rfObject;
    static rfc_ieeeRxOutput_t rxStatistics;
    
    //*********************************************************************************
    // Generated by SmartRF Studio version 2.20.1 (build#277)
    // The applied template is compatible with cc13x2_26x2 SDK version 2.10.xx.xx or newer.
    // Device: CC2652P Rev. E (2.1). Only supported by CC26x2 SDK version 3.30.xx.xx or newer
    //
    //*********************************************************************************
    
    //*********************************************************************************
    // Parameter summary
    // IEEE Channel: 11
    // Frequency: 2405 MHz
    // SFD: 0
    // Packet Data: 255
    // Preamble      (32 bit): 01010101...
    // TX Power: 14 dBm
    // Enable high output power PA: true
    
    #include <ti/devices/DeviceFamily.h>
    #include DeviceFamily_constructPath(driverlib/rf_mailbox.h)
    #include DeviceFamily_constructPath(driverlib/rf_common_cmd.h)
    #include DeviceFamily_constructPath(driverlib/rf_ieee_cmd.h)
    #include <ti/drivers/rf/RF.h>
    #include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_ieee_802_15_4.h)
    #include "smartrf_settings/smartrf_settings.h"
    
    // TI-RTOS RF Mode Object
    RF_Mode RF_propSR = { .rfMode = RF_MODE_AUTO,
    .cpePatchFxn = &rf_patch_cpe_ieee_802_15_4,
    .mcePatchFxn = 0,
    .rfePatchFxn = 0 };
    
    // Overrides for CMD_RADIO_SETUP_PA
    uint32_t pOverridesSR[] = {
    // override_ieee_802_15_4.xml
    // Rx: Set LNA bias current offset to +15 to saturate trim to max (default: 0)
    (uint32_t)0x000F8883,
    // Tx: Set DCDC settings IPEAK=3, dither = off
    (uint32_t)0x00F388D3,
    (uint32_t)0xFFFFFFFF };
    
    // CMD_RADIO_SETUP_PA
    // Radio Setup Command for Pre-Defined Schemes
    rfc_CMD_RADIO_SETUP_PA_t RF_cmdRadioSetupSR = { .commandNo = 0x0802,
    .status = 0x0000,
    .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .startTime = 0x00000000,
    .startTrigger.triggerType = 0x0,
    .startTrigger.bEnaCmd = 0x0,
    .startTrigger.triggerNo = 0x0,
    .startTrigger.pastTrig = 0x0,
    .condition.rule = 0x1,
    .condition.nSkip = 0x0,
    .mode = 0x01,
    .loDivider = 0x00,
    .config.frontEndMode = 0x0,
    .config.biasMode = 0x0,
    .config.analogCfgMode = 0x0,
    .config.bNoFsPowerUp = 0x0,
    .txPower = 0xA73F,
    .pRegOverride = pOverridesSR,
    .pRegOverrideTxStd = 0,
    .pRegOverrideTx20 = 0 };
    
    // CMD_FS
    // Frequency Synthesizer Programming Command
    rfc_CMD_FS_t RF_cmdFsSR = { .commandNo = 0x0803,
    .status = 0x0000,
    .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .startTime = 0x00000000,
    .startTrigger.triggerType = 0x0,
    .startTrigger.bEnaCmd = 0x0,
    .startTrigger.triggerNo = 0x0,
    .startTrigger.pastTrig = 0x0,
    .condition.rule = 0x1,
    .condition.nSkip = 0x0,
    .frequency = 0x0965,
    .fractFreq = 0x0000,
    .synthConf.bTxMode = 0x1,
    .synthConf.refFreq = 0x0,
    .__dummy0 = 0x00,
    .__dummy1 = 0x00,
    .__dummy2 = 0x00,
    .__dummy3 = 0x0000 };
    
    // CMD_IEEE_TX
    // IEEE 802.15.4 Transmit Command
    rfc_CMD_IEEE_TX_t RF_cmdIeeeTxSR = { .commandNo = 0x2C01,
    .status = 0x0000,
    .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .startTime = 0x00000000,
    .startTrigger.triggerType = 0x0,
    .startTrigger.bEnaCmd = 0x0,
    .startTrigger.triggerNo = 0x0,
    .startTrigger.pastTrig = 0x0,
    .condition.rule = 0x1,
    .condition.nSkip = 0x0,
    .txOpt.bIncludePhyHdr = 0x0,
    .txOpt.bIncludeCrc = 0x0,
    .txOpt.payloadLenMsb = 0x0,
    .payloadLen = 0x05,
    .pPayload = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .timeStamp = 0x00000000 };
    
    // CMD_IEEE_RX
    // IEEE 802.15.4 Receive Command
    rfc_CMD_IEEE_RX_t RF_cmdIeeeRxSR = { .commandNo = 0x2801,
    .status = 0x0000,
    .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .startTime = 0x00000000,
    .startTrigger.triggerType = 0x0,
    .startTrigger.bEnaCmd = 0x0,
    .startTrigger.triggerNo = 0x0,
    .startTrigger.pastTrig = 0x0,
    .condition.rule = 0x1,
    .condition.nSkip = 0x0,
    .channel = 0x00,
    .rxConfig.bAutoFlushCrc = 0x0,
    .rxConfig.bAutoFlushIgn = 0x0,
    .rxConfig.bIncludePhyHdr = 0x0,
    .rxConfig.bIncludeCrc = 0x0,
    .rxConfig.bAppendRssi = 0x1,
    .rxConfig.bAppendCorrCrc = 0x1,
    .rxConfig.bAppendSrcInd = 0x0,
    .rxConfig.bAppendTimestamp = 0x0,
    .pRxQ = 0, // INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx
    .pOutput = 0,// INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .frameFiltOpt.frameFiltEn = 0x0, .frameFiltOpt.frameFiltStop = 0x0,
    .frameFiltOpt.autoAckEn = 0x0, .frameFiltOpt.slottedAckEn = 0x0,
    .frameFiltOpt.autoPendEn = 0x0, .frameFiltOpt.defaultPend = 0x0,
    .frameFiltOpt.bPendDataReqOnly = 0x0, .frameFiltOpt.bPanCoord = 0x0,
    .frameFiltOpt.maxFrameVersion = 0x3, .frameFiltOpt.fcfReservedMask = 0x0,
    .frameFiltOpt.modifyFtFilter = 0x0, .frameFiltOpt.bStrictLenFilter = 0x0,
    .frameTypes.bAcceptFt0Beacon = 0x1, .frameTypes.bAcceptFt1Data = 0x1,
    .frameTypes.bAcceptFt2Ack = 0x1, .frameTypes.bAcceptFt3MacCmd = 0x1,
    .frameTypes.bAcceptFt4Reserved = 0x1, .frameTypes.bAcceptFt5Reserved = 0x1,
    .frameTypes.bAcceptFt6Reserved = 0x1, .frameTypes.bAcceptFt7Reserved = 0x1,
    .ccaOpt.ccaEnEnergy = 0x0, .ccaOpt.ccaEnCorr = 0x0, .ccaOpt.ccaEnSync = 0x0,
    .ccaOpt.ccaCorrOp = 0x1, .ccaOpt.ccaSyncOp = 0x1, .ccaOpt.ccaCorrThr = 0x0,
    .ccaRssiThr = 0x64, .__dummy0 = 0x00, .numExtEntries = 0x00,
    .numShortEntries = 0x00,
    .pExtEntryList = 0, // INSERT APPLICABLE POINTER: (uint32_t*)&xxx
    .pShortEntryList = 0,// INSERT APPLICABLE POINTER: (uint32_t*)&xxx
    .localExtAddr = 0x0000000012345678, .localShortAddr = 0xABBA, .localPanID =
            0x0000,
    .__dummy1 = 0x000000, .endTrigger.triggerType = 0x1, .endTrigger.bEnaCmd = 0x0,
    .endTrigger.triggerNo = 0x0, .endTrigger.pastTrig = 0x0
    ,.endTime = 0x00000000 };
    
    
    
    static void echoCallback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e)
    {
        static uint8_t txPacket[5] = { 0x00, 0x01, 0x02, 0x03, 0x04, };
        if (e & RF_EventRxEntryDone)
        {
            /* Successful RX */
            currentDataEntry = RFQueue_getDataEntry(); /* Get current unhandled data entry */
            packetLength = *(uint8_t*) (&(currentDataEntry->data));
            packetDataPointer = (uint8_t*) (&(currentDataEntry->data) + 1);
            RFQueue_nextEntry();
            /* Command Tx */
            RF_cmdIeeeTxSR.startTrigger.triggerType = TRIG_REL_PREVEND; //TRIG_NOW;
            RF_cmdIeeeTxSR.pPayload = &txPacket[0];
            RF_cmdIeeeTxSR.payloadLen = 5;
            /* Command Rx */
            RF_cancelCmd(rfHandle, ch, 1);
            RF_EventMask terminationReason = RF_postCmd(
                    rfHandle,
                    (RF_Op*) &RF_cmdIeeeTxSR,
                    RF_PriorityNormal,
                    &echoCallback,
                    (RF_EventRxEntryDone | RF_EventTxEntryDone | RF_EventLastCmdDone
                            | RF_EventLastFGCmdDone | RF_EventFGCmdDone));
        }
        else if (e & RF_EventTxEntryDone)
        {
        }
        else if (e & RF_EventLastCmdDone)
        {
        }
        else
        {
            RF_cmdIeeeRxSR.pRxQ = &dataQueue;
            RF_cmdIeeeRxSR.startTrigger.triggerType = TRIG_REL_PREVEND;
            RF_cmdIeeeRxSR.pOutput = &rxStatistics;
            RF_EventMask terminationReason = RF_postCmd(
                    rfHandle,
                    (RF_Op*) &RF_cmdIeeeRxSR,
                    RF_PriorityNormal,
                    &echoCallback,
                    (RF_EventRxEntryDone | RF_EventTxEntryDone | RF_EventLastCmdDone
                            | RF_EventLastFGCmdDone | RF_EventFGCmdDone));
        }
    }
    
    void* mainThread(void *arg0)
    {
        RF_Params rfParams;
        RF_Params_init(&rfParams);
        //initAntennaSwitch();
        if (RFQueue_defineQueue(&dataQueue, rxDataEntryBuffer,
                                sizeof(rxDataEntryBuffer), NUM_DATA_ENTRIES,
                                MAX_LENGTH + NUM_APPENDED_BYTES))
        {
            while (1)
                ;
        }
        rfHandle = RF_open(&rfObject, &RF_propSR,
                           (RF_RadioSetup*) &RF_cmdRadioSetupSR, &rfParams);
        RF_postCmd(rfHandle, (RF_Op*) &RF_cmdFsSR, RF_PriorityNormal, NULL, 0);
        while (1)
        {
            RF_cmdIeeeRxSR.pRxQ = &dataQueue;
            RF_cmdIeeeRxSR.pOutput = &rxStatistics;
            // original, toby commented
    //        RF_EventMask terminationReason = RF_postCmd(
    //                rfHandle, (RF_Op*) &RF_cmdIeeeRxSR, RF_PriorityNormal,
    //                &echoCallback, (RF_EventRxEntryDone | RF_EventLastCmdDone));
            // end original
    
    
            // toby added
            RF_EventMask terminationReason = 0; // not used
    
            RF_ScheduleCmdParams rfScheduleCmdParams_rx;
            RF_ScheduleCmdParams_init(&rfScheduleCmdParams_rx);
    
            RF_CmdHandle rxCmdHandle = RF_scheduleCmd(
                    rfHandle, (RF_Op*) &RF_cmdIeeeRxSR, &rfScheduleCmdParams_rx,
                    NULL, NULL);
            if (RF_ALLOC_ERROR == rxCmdHandle)
                while (1); // error in RF_postCmd
            static uint8_t txPacket[5] = { 0x00, 0x01, 0x02, 0x03, 0x04, };
            while (1)
            {
                RF_cmdIeeeTxSR.startTrigger.triggerType = TRIG_NOW;
                RF_cmdIeeeTxSR.pPayload = &txPacket[0];
                RF_cmdIeeeTxSR.payloadLen = 5;
    
                RF_ScheduleCmdParams rfScheduleCmdParams_tx;
                RF_ScheduleCmdParams_init(&rfScheduleCmdParams_tx);
    
                RF_CmdHandle txCmdHandle = RF_scheduleCmd(
                        rfHandle,
                        (RF_Op*) &RF_cmdIeeeTxSR,
                        &rfScheduleCmdParams_tx,
                        NULL,
                        NULL);
                if (RF_ALLOC_ERROR == txCmdHandle)
                    while (1); // error in RF_postCmd
                RF_pendCmd(rfHandle, txCmdHandle, NULL);
                sleep(1);
                // increment sequence number
                txPacket[1] += 1;
            }
            // end added
    
            switch (terminationReason)
            {
            case RF_EventLastCmdDone:
                break;
            case RF_EventCmdCancelled:
                break;
            case RF_EventCmdAborted:
                break;
            case RF_EventCmdStopped:
                break;
            default:
                break;
            }
            uint32_t cmdStatus = ((volatile RF_Op*) &RF_cmdIeeeRxSR)->status;
            switch (cmdStatus)
            {
            case PROP_DONE_OK:
                break;
            case PROP_DONE_RXERR:
                break;
            case PROP_DONE_RXTIMEOUT:
                break;
            case PROP_DONE_BREAK:
                break;
            case PROP_DONE_ENDED:
                break;
            case PROP_DONE_STOPPED:
                break;
            case PROP_DONE_ABORT:
                break;
            case PROP_ERROR_RXBUF:
                break;
            case PROP_ERROR_RXFULL:
                break;
            case PROP_ERROR_PAR:
                break;
            case PROP_ERROR_NO_SETUP:
                break;
            case PROP_ERROR_NO_FS:
                break;
            case PROP_ERROR_RXOVF:
                break;
            default:
                while (1);
                break;
            }
        }
    }
    
    

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

    尊敬的 Toby:

    我已经尝试增加序列号、但没有更好的结果。

    在具有或不具有序列号的 SmartRfStudio 上、NXP 上的检测始终位于发送的第一个帧。

    此致、

    Francois

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

    尊敬的 Toby:您好 、Ryan:

    我发现了问题:  

    它来自项目的 SysConfig、检查了参数"XOSC 电容阵列修改"

    值为0xC1 (在许多项目示例中)。 我已取消选中(或设置为0)、现在可以了

    我可以在 NXP 和 TI 之间发送和接收802.15.4帧。

    (对于此参数、似乎 NXP 比 TI 更具选择性)

    总之,对于 NXP 和 TI 之间的通信,我设置了:

    选择802.15.4 OQPSK 250kbps 配置

    完全采用 SysConfig 生成的函数参数

    使用 RF_postCmd (possibe 在中断内部使用)

    在发送 Tx 命令之前停止 Rxcmd (RF_CancelCmd)

    谢谢、

    Francois