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.

[参考译文] CC1352P7:从 rfSynchronizedPacket 示例更改自定义射频 PHY

Guru**** 2419530 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1176920/cc1352p7-changing-custom-rf-phy-from-rfsynchronizedpacket-example

器件型号:CC1352P7
Thread 中讨论的其他器件:SysConfig

你好!  

我注意到这些示例使用了自定义设置 PHY。 我想更改它。  
我能够通过 250kpbs、125kHz 偏差、2GFSK、471kHz RX 带宽@ 2.440GHz 轻松使其工作

当我尝试使用 500kbps、190kHz 偏差、2GFSK、622kHz RX 带宽@ 915MHz 时、
接收器会注意到一些活动、但会在数据传输之前进行预告。  

EVENT_PacketReceived 会被发布。 rxBuffer 有一些垃圾,全部为零。  


这是在 waitingForSyncState()期间。

  • 使用 RFC_GPO0和1、波形显示
    • 通道0正在从 TX 侧传输数据
    • 通道6在 RX 侧接收、并在传输结束前停止侦听
      • 大约~240us  
  • 我认为只有在这种情况下才会发生
    • TX 和 RX 被调谐至不同的频率
    • 前导码或同步字匹配问题
    • 在更改频率并期望其正常工作时、驾驶员会进行一些监督
  • 需要注意的一些差异
    • 500kbps 使用 RF_cmdPropTxAdv/RxAdv、250kbps 使用 RF_cmdPropTx/Rx
    • 在500kbps 和250kpbs 下具有不同大小的前置放大器和不同的同步字  

有什么想法吗?


以下是我的配置重定向、唯一的代码更改为新导入的示例:

// TI-RTOS 射频模式对象
#define RF_PROP           rf_prop_2gfsk500kbps154g_0

//射频内核 API 命令
#define RF_cmdPropRadioDivSetup  RF_cmdPropRadioDivSetup_2gfsk500kbps154g_0
#define RF_cmdF                rf_cmdfs_2gfsk500kbps154g_0
#define RF_cmdPropTxAdv        rf_cmdPropTxAdv_2gfsk500kbps154g_0
#define RF_cmdPropRxAdv        rf_cmdPropRxAdv_2gfsk500kbps154g_0


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

    在"TI 器件"->"器件配置"->"强制 VDDR "下、还已根据 syscfg 的建议启用。

    忘记提到它。  

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

    我验证了使用频谱分析仪以915MHz 频率发射的发射器。  

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

     rfSynchronizedPacket 示例使用 RF_cmdPropTx 和  RF_cmdPropRx 命令、与为500kbps 设置导出的数据包格式完全不同。 此格式符合 IEEE 802.15.4g 标准、同步后有一个2字节的标头、其中包括一个11位长度字段。

     如果不重新编写应用程序,则不能在 rfSynchronizedPacket 示例中使用此数据包格式。  最简单的 方法 是更改高级 RX 和 TX 命令、以传输我们大多数示例使用的"标准"数据包格式(同步字后跟一个长度字节)。

    如果您看 rfDiagnostics 示例、它会显示如何更改符合802.15.4g 的 数据包以使用"标准"数据包格式。

    在 radio.c 中、查找以下内容:

    ///------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    // PhySettings_API_PROP + PhySettings_CMD_ADVANCED + PhySettings_test_RF_PERF
    //
    //用于射频性能测试的专有 PHY 的高级 TX 命令。
    //与从 SysConfig 导入的数据包格式相比,数据包格式发生了变化,
    //使用后面带有8位长度字段的“标准”数据包格式
    //同步字
    ///------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    我建议您采用 rfPacketRX 和 rfPacketTX 示例(我们最简单的示例)、并尝试使用  rfDiagnostics 中实现的修改来启动和运行这些示例。 当您使用标准数据包格式启动并运行500kbps PHY 时、您也可以在其他示例中尝试这些设置

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

    是的! 谢谢你。 非常有帮助。

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

    因此、我实际上通过稍微不同的方法取得了一些有趣的进展

    • 使用 rfPacketRx/Tx 示例
    • 所选1Mbps、350kHz 偏差、2GFSK
      • 将 kbaud 更改为500
    • rfPacket 示例立即起作用
    • 我的应用程序立即工作

    我可能可以调出更多的 PHY 属性、因为我们可能不需要在一半波特率下出现这种偏差。  

    我对 rfDiagnostics 推荐的方法很混乱。  
    当它不能很快工作时、我尝试了另一种方法。  

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

    你(们)好、Siri。 我最近又回来解决这个问题。  
    我想澄清这些步骤,因为这还不能进行。  

    从 rfDiagnostics 中的 radio.c 可以看到、这些是与我之前使用的修改不同的接收器修改。
    我假设这些与 // PhySettings_API_PROP + PhySettings_CMD_ADVANCED + PhySettings_test_RF_PERF 的 TX 设置相匹配

              RF_cmdPropRxAdv.pktConf.filterOp = 0
               // PhySettings_test_rf_perf 的附加设置
               if (PhySettings_supportedPhyS[currentPhyNumber].PhySettings_testType == PhySettings_test_RF_perf)
               
                 ///-------------------------------------------------------
                 // PhySettings_API_PROP + PhySettings_CMD_ADVANCED + PhySettings_test_RF_PERF
                 ///-------------------------------------------------------
                RF_cmdPropRxAdv.pktConf.bCrcIncHdr = 1
                rf_cmdPropRxAdv.hdrConf.numHdrBits = 8
                RF_cmdPropRxAdv.hdrConf.numLenBits = 8
                RF_cmdPropRxAdv.lenOffset = 0
              

    令人困惑的部分是 RX 侧正在使用  

    • rf_cmdPropRxAdv.hdrConf.numHdrBits =  8

    • RF_cmdPropRxAdv.hdrConf.numLenBits =  8

    电流限制  

    • RF_cmdPropTxAdv.numHdrBits = 0

    感觉我在找错地方。

    此外、 两个项目上的 bCrcIncHdr 都为0、如果我们使用 numHdrBits = 0、这也是奇怪的。  

    还值得注意的是、我们为 TX 缓冲区分配了 pktLen + 1、以便在有效载荷上添加1字节长度、如上所示

    • rf_cmdPropTxAdv.pktLen =((uint8_t)(* pktLen))+ 1;  

    • 在有效载荷->   packet[0]= PAYLOAD_LENGTH;


    我可以可视化154g 兼容的有效载荷

    | SYNC | 16位报头、包括11位长度|有效载荷|

    我认为我可以将标准数据包可视化(无标头)  

    | SYNC | PAYLOAD[0] aka length | PAYLOAD[1..n]|  

    有点困惑。 谢谢!  

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

    我必须抛弃附加的字节才能使其正常工作。  
    奇怪的是、尽管调整了缓冲区、但它不能与附加的 CRC+RSSI+TIMESTAMP_TIMESTAMPERTIMESTAMP一起  

    在接收器上、这最终起作用

      rf_cmdPropRxAdv_2gfsk500kbps154g_1.pktConf.filterOp = 0
       rf_cmdPropRxAdv_2gfsk500kbps154g_1.pktConf.bCrcIncHdr = 1
       rf_cmdPropRxAdv_2gfsk500kbps154g_1.hdrConf.numHdrBits = 8
       rf_cmdPropRxAdv_2gfsk500kbps154g_1.hdrConf.numLenBits = 8
       rf_cmdPropRxAdv_2gfsk500kbps154g_1.lenOffset = 0
       rf_cmdPropRxAdv_2gfsk500kbps154g_1.rxConf.bIncludeCrc = 0x0
       rf_cmdPropRxAdv_2gfsk500kbps154g_1.rxConf.bAppendRssi = 0x0
       rf_cmdPropRxAdv_2gfsk500kbps154g_1.rxConf.bAppendTimestamp = 0x0

    在发送器上、这起作用了

      rf_cmdPropTxAdv_2gfsk500kbps154g_1.numHdrBits = 0
      rf_cmdPropTxAdv_2gfsk500kbps154g_1.pktLen =有效载荷长度+ 1

        packet[0]= PAYLOAD_LENGTH;
        packet[1]=(uint8_t)(seqNumber >> 8);
        packet[2]=(uint8_t)(seqNumber++);
        uint8_t i
        对于(I = 3I < PAYLOAD_LENGTH;I++)
        
          packet[i]= rand()
        

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

    锡里!
    从 rfPacketRx 迁移到 rfSynchronizedPacketRx 时、情况会变得很棘手。  

    • 附加时间戳 rfSynchronizedPacketRx
      • 在此项目中、num_apped_bytes 为5、具有状态、标头(长度)字节和时间戳
        • 我想这将是6
      • 在 rfPacketRx 中、NUM_SUBST_BYTES 为2、这是状态字节和标头(长度)字节
    • rfPacketRx 使用 RF_runCmd、rfSynchronizedPacketRx 使用 RF_postCmd 和 StateMachine_pendEvents
      • RF_cmdPropRxAdv.status 的值完全不同。
        • 获取0x2000、而不是 PROP_DONE_OK
    • rxQueue 和 dataQueue 的定义完全不同。  
      • dataQueue 使用 RFQueue_defineQueue

    这一切都值得提及、因为它可以将所有大小都正确地缩减到字节。  

    在我能够正常工作后、集成到我的应用中应该会变得轻而易举。  

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

    我将其 NUM_SUBSTED_Bytes 更改为6并进行同步。
    我认为这条线程已经达到了它的目的。 再次感谢。