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.

[参考译文] CC1120:射频监听模式

Guru**** 2554900 points
Other Parts Discussed in Thread: CC1120, CC1200

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/907516/cc1120-rf-sniff-mode

器件型号:CC1120
主题中讨论的其他器件: CC1200

CC1120

我已成功使用2个 TrxEB 板(1个 RX 和1个 TX)、由我们必须发送和接收的修改后的产品板(ARM micro)控制
数据包。 我们还没有获得原型板。

我使用了专家模式的 SmartRF 设置、添加了4个同步字、4个前导码字节和一个地址字节(DEV_ADDR)。
其他所有内容都是相同的。 它工作得很好。 我经常使用 RX_Bytes 轮询、而不是中断。  未使用 GPIO。

然后、我将微控制器置于断电模式、并在接收到数据包时使用 GPIO0唤醒微控制器。 使 CC1120保持运行。
效果很好。

接下来、我将"Expert Mode"和"RF 监听模式"的 SmartRF 设置加载到 CC1120中。 我保留了4个同步字、4个前导码
字节和地址字节。 我让微控制器持续运行、这样我就可以一次运行一个东西。 我无法接收任何数据
数据包。 微控制器持续查看 RX_Bytes、并且从不看到任何内容(与第一个练习相同的代码)。 唯一的区别是
校准 RCOsc、而不是进入 RX 模式、而是进入 WOR 模式。 之后、RX_Bytes 始终为0。 TX 发送50个数据包、如所示
但未收到任何内容。

我仍在使用轮询、而不像以前那样使用中断。  没有 GPIO (我也尝试过它)。  如果有数据包。
在中、CC1120是否应该像第一个练习一样唤醒并更改 RX_Bytes?

我缺少一些东西。 有什么想法、同时我继续调试它吗?

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

    你(们)好

    在运行监听模式时、不能使用 SPI 轮询、因为将 CSn 引脚拉低以在 SPI 上进行通信会将无线电从睡眠模式唤醒 (将 SCN 拉至低电平将使对讲机处于空闲状态、并且在发出新的频闪灯命令之前、它不会恢复到监听模式)。

    监听模式的目的是使用尽可能小的电流、其理念是 MCU 在等待来自无线电的中断时应处于睡眠状态、表示已接收到数据包。 睡眠模式下无法进行 SPI 轮询。

    另请注意、此处提供了适用于 CC1120的监听模式示例:

    BR

    Siri

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

    器件型号:CC1120

    谢谢。  我一直在参考该代码示例。  我理解您的回答、并稍微高频了我的代码。  在许多情况下、当数据包进入时、我的 MCU 不会处于睡眠状态、因此一旦我将 CC1120设置为 WOR 模式、我就会持续轮询 MCU 上的 EXTINT 寄存器(通过 IOCFG0寄存器中的0x06连接到 GPIO0) 但到目前为止、这也不起作用。  我还尝试了 IOCFG0寄存器中的0x13、但仍然没有激活。  现在、我仍在处理它。

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

    此外、我的 MCU 有两种模式:打开和睡眠。  以及 CC1120的相同两种模式。  即使在轮询期间、当我两个芯片都处于开启模式(意味着它们一直在运行)时、我也设置了 GPIO0、以便在接收到 TX 数据包时生成外部中断。  即使我不使用中断(我轮询 RX_Bytes)、它也能完美工作并通过示波器进行验证。  接收到的每个 TX 数据包都会激活 EXTINT、当标志被清除时、EXTINT 会返回低电平。  TX 发送50个数据包(每3秒发送一次)。  RX 可以完美地接收每个人。

    如果我使用示例代码中的寄存器设置进行 RX 监听(使 MCU 保持开启模式、GPIO0保持不变)、则我的 MCU 上的 EXTINT 永远不会变为高电平、以指示 RX 接收到有效的数据包。  那么、我是否可以监控某个东西以查看 CC1120确实在每个唤醒周期唤醒一次?  我不确定 CC1200是否完全唤醒、或者它根本看不到有效的 TX 数据包。

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

    您应该首先监控事件信号和 LNA_PD 信号。 您可以看到对讲机唤醒并以所需的速率进入 RX。

    您不会对数据速率说任何话。 如果您仅传输4字节前导码、则需要低数据速率才能足够频繁地唤醒

    我建议您查看此文档:

    Siri

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

    这里是我的寄存器设置。 第一个主要来自 SmartRF 上的专家模式、数据包 RX 设置、对进行了一些更改
    前导码、寻址和固定数据包长度。 这会使无线电持续打开、我可以将 MCU 持续打开
    或进入睡眠模式。 在这两种情况下、外部中断都能完美工作。 在这两种情况下、我都监控外部中断
    引脚用于触发(使用 GPIO0)、并在触发后读取数据包。 它工作得非常完美。

    第二个是针对 RX 监听模式的寄存器设置。 我采用了 SmartRF 设置(专家模式、RX 嗅探模式)并将其用镊子夹住
    具有前导码、寻址和固定数据包长度、如我的第一个示例所示。 它不会触发外部中断。
    我仍在进行调试。

    您询问了数据速率。 我正在使用 RX 监听第17页的示例中的寄存器中的任何数据速率
    发送的428A 文档的接收模式(与 SmartRF 上的专家模式、RX 监听模式相同)。 我一直在使用它
    自本练习开始以来的参考。

    我尚未尝试监控 EVENT0是否存在无线电唤醒活动。 我要这个。


    这些寄存器是我使用的寄存器、而不是默认值。 "是"只是一个标志、用于指示读取/验证设置一次
    设置寄存器值。 但是、您可以看到我正在使用的值。


    //连续无线电打开,从 SmartRF 修改,专家模式,数据包 RX

    unsigned char LPS_CONT_Rx_setup_type[][3]={{IOCFG3、0xB0、是}、{IOCFG2、0xB0、是}、{IOCFG1、0xB0、是}、{IOCFG0、0x13、是}、
    {SYNC3、'A'、是}、{SYNC2、'G'、是}、{SYNC1、'A'、是}、{SYNC0、'L'、是}、{SYNC_CFG1、0x0B、是}、
    {DCFILT_CFG、0x1C、是}、{PREAMARE_CFG1、0x18、是}、{IQIC、0xC6、是}、{CHAN_BW、0x08、是}、{MDMCFG0、0x05、是}、
    {AGC_REF、0x20、是}、{AGC_CS_THR、0x19、是}、{AGC_CFG1、0xA9、是}、{AGC_CFG0、0xCF、是}、{FIFO_CFG、0x00、是}、{DEV_ADDR、0xCD、是}、
    {FS_CFG、0x12、是}、{PKT_CFG1、0x15、是}、{PKT_CFG0、0x00、是}、
    {PKT_LEN、0x0A、是}、{IF_Mix _CFG、0x00、是}、{FREQOFF _CFG、0x22、是}、{FREQ2、0x6C、是}、{FREQ1、0x80、是}、{FS_DIG1、0x00、是}、
    {FS_DIG0、0x5F、是}、{FS_CAL1、0x40、是}、{FS_CAL0、0x0E、是}、{FS_DIVTWO、0x03、是}、{FS_DSM0、0x33、是}、
    {FS_DVC0、017、是}、{FS_PFD、0x50、是}、{FS_PRE、0x6E、是}、{FS_REG_DIV_CML、0x14、是}、
    {FS_SPARE、0xAC、是}、{FS_VCO0、0xB4、是}、{XOSC5、0x0E、是}、{XOSC1、0x03、是}};

    //自定义 LPS 设置-修改自 SmartRF、专家模式、RX 监听模式-无噪声- CS 和 RSSI 检测(载波侦听和信号强度)

    unsigned char LPS_Rx_sniff_cs_setup_type[][3]={{IOCFG3、0xB0、是}、{IOCFG2、0x06、是}、{IOCFG1、0xB0、是}、{IOCFG0、0x06、是}、
    {SYNC3、'A'、是}、{SYNC2、'G'、是}、{SYNC1、'A'、是}、{SYNC0、'L'、是}、{SYNC_CFG1、0x0B、是}、{偏差_M、0x48、是}、
    {MODCFG_DEV_E、0x05、是}、{DCFILT_CFG、0x1C、是}、{PREAMARE_CFG1、0x18、是}、{IQIC、0x00、是}、{CHAN_BW、0x04、是}、
    {MDMMCFG0、0x05、是}、{AGC_CS_THR、0xf5、是}、{AGC_CFG1、0xA0、是}、{DEV_ADDR、0xCD、是}、{趋稳_CFG、0x03、是}、
    {FS_CFG、0x12、是}、{WOR_CFG0、0x20、是}、{WOR_EVENT0_MSB、0x02、是}、{WOR_EVENT0_LSB、0x14、是}、{PKT_CFG0、0x00、是}、{RFEND_CFG0、0x09、是}、
    {PKT_LEN、0x0A、是}、{IF_Mix _CFG、0x00、是}、{FREQOFF _CFG、0x22、是}、{FREQ2、0x6C、是}、{FREQ1、0x80、是}、
    {FS_DIG1、0x00、是}、{FS_DIG0、0x5F、是}、{FS_CAL1、0x40、是}、{FS_CAL0、0x0E、是}、{FS_DIVTWO、0x03、是}、
    {FS_DSM0、0x33、是}、{FS_DVC0、0x17、是}、{FS_PFD、0x50、是}、{FS_PRE、0x6E、是}、{FS_REG_DIV_CML、0x14、是}、
    {FS_SPARE、0xAC、是}、{FS_VCO0、0xB4、是}、{XOSC5、0x0E、是}、{XOSC1、0x03、是}};

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

    对于普通 RX 设置、您不会写入 settinging_CFG 寄存器、而是使用启用同步自动校准的默认值(0x0B)。

    对于监听模式设置、您将该寄存器写入0c03、以禁用校准。 除非您在代码中使用手动校准、否则您将无法接收任何内容。

    BR

    Siri

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

    在我的连续 RX 和 MCU 中、我将 Settling _CFG 保留为默认值(0x0B)。  我在前面的帖子中发布的寄存器图表是那些使用默认值以外的值进行编程的寄存器。  代码开始时、我将所有寄存器设置为默认值并进行验证。  连续 RX 工作正常。

    文档428A 中的所有 RX 监听模式都使用0x03作为 Setting_CFG 和 SmartRF 的寄存器值。  我将使用相同的值。  我还在使用 SmartRF 和 TI 提供的代码、这些代码在主无限 RX 环路之前调用手动校准例程。  这不能正常工作。

    我已通过 GPIO2 (设置为 EVENT0)验证无线电每~25ms 唤醒一次、并保持高电平大约140us。  但未识别任何数据包。  仍在尝试解决它。

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

    即使 在应用手册使用3的情况下、也可以将前导码更改为4 (前导码_CFG1 = 0x18)字节、这也是从 SmartRF Studio (前导码_CFG1 = 0x14)获得的结果。 可以增加前导码字节的数量、但我不理解为什么使用它、因为您根据3字节长前导码配置了监听间隔。

    我已经测试了 SmartRF Studio 提供的设置(与应用手册中的设置相同)、我测量的睡眠时间为15.5ms、RX 时间为~0.5ms。

    如果使用您发布的设置每25ms 唤醒一次、则应用程序会出现问题、因为事件= 0x0214对应于 tEvent0 = 16.63ms

    下面发布了我测试过的 Studio 设置:

    //地址配置=无地址检查
    //位速率= 1.2
    //载波频率= 868.000000
    //偏差= 20.019531
    //器件地址= 0
    //曼彻斯特启用= false
    //调制格式= 2-FSK
    // PA 斜升= true
    //数据包位长度= 0
    //数据包长度 = 255
    //数据包长度模式=可变
    //性能模式=高性能
    // RX 滤波器带宽= 50.000000
    //符号速率= 1.2
    // TX 功率= 15
    //白化=假
    
    静态常量寄存器 Seting_t preferredSettings[]=
    {
    CC1120_IOCFG3、 0xB0}、
    {CC1120_IOCFG2、 0x06}、
    {CC1120_IOCFG1、 0xB0}、
    {CC1120_IOCFG0、 0x40}、
    {CC1120_SYNC_CFG1、 0x0B}、
    {CC1120_deviation_M、 0x48}、
    {CC1120_MODCFG_DEV_E、 0x05}、
    {CC1120_DCFILT_CFG、 0x1C}、
    {CC1120_Preambions_CFG1、 0x18}、
    {CC1120_IQIC、 0x00}、
    {CC1120_CHAN_BW、 0x04}、
    {CC1120_MDMCFG0、 0x05}、
    {CC1120_AGC_CS_THR、 0xf5}、
    {CC1120_AGC_CFG1、 0xA0}、
    {CC1120_FIFO_CFG、 0x00}、
    {CC1120_Setting_CFG、 0x03}、
    {CC1120_FS_CFG、 0x12}、
    {CC1120_WOR_CFG0、 0x20}、
    {CC1120_WOR_EVENT0_MSB、0x02}、
    {CC1120_WOR_EVENT0_LSB、0x14}、
    {CC1120_PKT_CFG0、 0x20}、
    {CC1120_RFEND_CFG0、 0x09}、
    {CC1120_PKT_LEN、 0xFF}、
    {CC1120_IF_Mix_CFG、 0x00}、
    {CC1120_FREQOFF_CFG、 0x22}、
    {CC1120_FREQ2、 0x6C}、
    {CC1120_FREQ1、 0x80}、
    {CC1120_FS_DIG1、 0x00}、
    {CC1120_FS_DIG0、 0x5F}、
    {CC1120_FS_CAL1、 0x40}、
    {CC1120_FS_CAL0、 0x0E}、
    {CC1120_FS_DIVTWO、 0x03}、
    {CC1120_FS_DSM0、 0x33}、
    {CC1120_FS_DVC0、 0x17}、
    {CC1120_FS_PFD、 0x50}、
    {CC1120_FS_PRE、 0x6E}、
    {CC1120_FS_REG_DIV_CML、0x14}、
    {CC1120_FS_SPARE、 0xAC}、
    {CC1120_FS_VCO0、 0xB4}、
    {CC1120_XOSC5、 0x0E}、
    {CC1120_XOSC2、 0x00}、
    {CC1120_XOSC1、 0x03}、
    {CC1120_PARTNUMBER、 0x48}、
    {CC1120_PARTVERSION、 0x21}、
    {CC1120_MODE_STATUS1、 0x10}、
    }; 

    请注意、我已将前导码更改为4个字节、就像您所做的那样:

    您还可以使用此处的 Excel 工作表来验证计时:

    BR

    Siri

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

    我进行了计算误差。  我的 Event0时间也是16.63ms。  您的寄存器值与我的寄存器值一样执行、RX 正确唤醒。  但是、没有接收到 TX 数据包-就像我的一样。  如果连续开启 RX、则接收所有 TX 数据包。  我认为唯一不同的做法是使用地址、不同的同步字和固定的数据包长度。

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

    我尝试通过更改同步字、使用固定的数据包长度和地址过滤、我仍然可以正常工作。

    您说您正在使用地址过滤、但我只能看到您在正常 RX 示例中执行此操作、而不是在监听模式示例中执行此操作。 我已经在监听模式下进行了测试、没有问题。

    由于我们知道设置是可以的、因此问题可能有两个方面。

    1) 1)应用程序代码中存在一些错误、因此您无法正确进入 WOR 模式、或者您正在执行某种操作、使其退出 WOR 模式。

    RF 性能较差、因此接收到的数据包的 RSSI 低于 RSSI 阈值。

    在这种情况下、无线电可以在正常模式下接收数据包、因为那里未使用 RSSI、但未在监听模式下使用、因为 RX 将被终止。

    同样、在测试时监测发送器和接收器的 PA 和 LNA 信号将会告诉您有关问题的很多信息。

    BR

    Siri

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

    不知道它为什么不工作。  我尝试使用与该示例相同的值、但仅存在地址、同步字和4个前导码字节差异。

    -当 RX 持续运行时、RSSI 为-87。  阈值为0xf5、在采样寄存器设置中保持不变。  我的2个 TrxEB 板实际上相隔2英尺。

    -我的代码是:

    for (;;)

      RFRXTX_Strobe (SWOR);        //发出 strobe 后,唤醒每16.6ms 出现在我的示波器上

      while ((EXTINT & 0x08)==0);     //永远不会发生外部中断

      //此处处理数据包

    在上述选通信号之后、永远不会发生外部中断。  可能是 IOCFG 中的中断设置不正确。  它的设置与 RX 连续模式中使用的设置相同。

    - TX 代码不会改变。  TX 每5秒发送50个数据包。  使用相同的地址、固定的数据包长度和4个前导码字节。

    仍在进行中。  有点沮丧、因为这可能是一个简单的寄存器省略。  我将 GPIO0用于外部中断触发器、将 GPIO2用于监视 eWOR0信号。  因此 IOCFG0 = 0x06、IOCFG2 = 0x37、这样我就可以在示波器上监控信号。

    是否有办法查看 RX 是否接收到任何数据包、噪声或其他信息、以查看 RX 是否丢弃数据包?   这种设置在我的家中、因此2英尺外不会有任何噪音。

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

    此外、您能否为我提供有关监控 PA 和 LNA 信号的提示?  在用户手册中、我找不到关于这些内容的确切内容、如何监控它们、要查找的值等的任何信息

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

    我今天尝试的另一件事。

    我后退了几步。  我已将计算机连接到我的2块 TrxEB 板。  我在两台计算机上启动了 SmartRF、在一台计算机上使用自定义的 TX 设置、在另一台计算机上使用 RX 设置。  RX 处于连续接收模式。  不管用。  这很奇怪。  它每次都在我的定制板设置上工作。  与此帖子顶部列出的设置相同。

    所以、我后退了几步。

    我在一台计算机上使用了专家模式、Packet RX、在第二台计算机上使用了专家模式、Packet TX。  默认 SmartRF 设置。  它工作正常。  发送和接收100个数据包。  然后、我开始在两个设置上一次更改一个内容、以查看它是否仍然有效。  我将同步代码更改为同步代码。  它工作正常。  我更改为固定数据包长度、并将数据包长度更改为10。  它工作正常。  但是、当我更改为使用地址滤波器(PKT_CFG1.address_check_CFG 至01、DEV_ADDR 至0xCD)时、它停止工作。  同样、它适用于我的 RX 持续开启模式自定义设置。  那么、为什么它在这里不起作用呢?

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

    好的。  我发现了 SmartRF 上的 DEV_ADDR 问题。  如果将系统定义为数据包 RX、则更改 PKT_CFG1和 DEV_ADDR 会仅为 RX 启用地址过滤。  在数据包 TX 端、这些寄存器无关紧要、您必须进入高级选项卡、启用地址并放置地址值。  我不知道这一点。  现在、它可以用于连续 RX 监控。

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

    我在一台计算机上将 SmartRF 从数据包 RX 更改为 RX 监听模式、在另一台计算机上使用相同的 TX。  第一个数据包经过、但除非我停止 RX 并再次重新启动、否则没有其他数据包经过。  如果我从 TX 发送5个数据包、RX 接收1个数据包、但不再接收。  所以、不确定原因。  这是默认的 RX 监听设置、其中我的同步字、固定的数据包长度为10、地址过滤使用0xCD 作为地址。

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

    你(们)好

    我认为 Studio 中有一个错误(我看到了同样的东西、我将报告它)。 不过、计算出的寄存器设置是可以的、我在此处的 cc112x_ease_link 示例中对其进行了测试:

    我使用了正常 Rx 配置(因为我想使用从 Studio 导出的监听模式设置)、并修改了代码以使用 SWOR 选通而不是 SRX 选通。 我还更改了寄存器文件:

    //地址配置=地址检查, 无广播
    //比特率= 1.2
    //载波频率= 868.000000
    //偏差= 20.019531
    //器件地址= CD
    //曼彻斯特启用= false
    //调制格式= 2-FSK
    // PA 斜升= true
    //数据包位长度= 0
    //数据包长度= 10
    //数据包长度 MODE =固定
    //性能模式=高性能
    // RX 滤波器带宽= 50.000000
    //符号速率= 1.2
    // TX 功率= 15
    //白化=假
    
    静态常量寄存器 Setting_t preferredSettings[]=
    {
    CC112X_IOCFG3、 0xB0}、
    {CC112X_IOCFG2、 0x06}、
    {CC112X_IOCFG1、 0xB0}、
    {CC112X_IOCFG0、 37}、//debug 信号(处于 RX 状态时为高电平)
    {CC112X_SYNC3、 0x61}、
    {CC112X_SYNC2、 0x67}、
    {CC112X_SYNC1、 0x61}、
    {CC112X_SYNC0、 0x6C}、
    {CC112X_SYNC_CFG1、 0x0B}、
    {CC112X_EX偏差_M、 0x48}、
    {CC112X_MODCFG_DEV_E、 0x05}、
    {CC112X_DCFILT_CFG、 0x1C}、
    {CC112X_PREAMING_CFG1、 0x18}、
    {CC112X_IQIC、 0x00}、
    {CC112X_CHAN_BW、 0x04}、
    {CC112X_MDMCFG0、 0x05}、
    {CC112X_AGC_CS_THR、 0xf5}、
    {CC112X_AGC_CFG1、 0xA0}、
    {CC112X_FIFO_CFG、 0x00}、
    {CC112X_DEV_ADDR、 0xCD}、
    {CC112X_Settling_CFG、 0x03}、
    {CC112X_FS_CFG、 0x12}、
    {CC112X_WOR_CFG0、 0x20}、
    {CC112X_WOR_EVENT0_MSB、0x02}、
    {CC112X_WOR_EVENT0_LSB、0x14}、
    {CC112X_PKT_CFG1、 0x15}、
    {CC112X_RFEND_CFG0、 0x09}、
    {CC112X_PKT_LEN、 0x0A}、
    {CC112X_IF_Mix _CFG、 0x00}、
    {CC112X_FREQOFF_CFG、 0x22}、
    {CC112X_FREQ2、 0x6C}、
    {CC112X_FREQ1、 0x80}、
    {CC112X_FS_DIG1、 0x00}、
    {CC112X_FS_DIG0、 0x5F}、
    {CC112X_FS_CAL1、 0x40}、
    {CC112X_FS_CAL0、 0x0E}、
    {CC112X_FS_DIVTWO、 0x03}、
    {CC112X_FS_DSM0、 0x33}、
    {CC112X_FS_DVC0、 0x17}、
    {CC112X_FS_PFD、 0x50}、
    {CC112X_FS_PRE、 0x6E}、
    {CC112X_FS_REG_DIV_CML、0x14}、
    {CC112X_FS_SPARE、 0xAC}、
    {CC112X_FS_VCO0、 0xB4}、
    {CC112X_XOSC5、 0x0E}、
    {CC112X_XOSC2、 0x00}、
    {CC112X_XOSC1、 0x03}、
    }; 
    静态 void runRX (void){
    
    uint8 rxBuffer[128]={0};
    uint8 rxBytes;
    uint8 marcState;
    
    //将 ISR 函数连接到 GPIO2
    ioPinIntRegister (IO_PIN_PORT_1、GPIO2、&radioRxISR);
    
    //下降沿上的中断
    ioPinIntTypeSet (IO_PIN_PORT_1、GPIO2、IO_PIN_FALLING_EDGE);
    
    //清除 ISR 标志
    ioPinIntClear (IO_PIN_PORT_1、GPIO2);
    
    //启用中断
    ioPinIntEnable (IO_PIN_PORT_1、GPIO2);
    
    //更新 LCD
    updateLcd();
    
    //根据勘误表校准无线电
    manualCalibration();
    
    calibrateRCOsc();
    
    //在 RX 中设置无线电
    TrxSpiCmdStrobe (CC112X_SWOR);
    
    //无限循环
    while (true){
    
    //等待数据包接收中断
    if (packetSemaphore = ISR_ACT_REQUIRED){
    
    //读取 RX FIFO 中的字节数
    cc112xSpiReadReg (CC112X_NUM_RXBYTES、&rxBytes、1);
    
    //检查 FIFO 中是否有字节
    if (rxBytes!= 0){
    
    //读取 MARCSTATE 以检查 RX FIFO 错误
    cc112xSpiReadReg (CC112X_MARCSTATE、&marcState、1);
    
    //屏蔽 MARCSTATE 位并检查我们是否有 RX FIFO 错误
    if ((marcState & 0x1F)= RX_FIFO_ERROR){
    
    //刷新 RX FIFO
    trxSpiCmdStrobe (CC112X_SFRX);
    } 否则{
    
    //从 RX FIFO 读取 n 个字节
    cc112xSpiReadRxFifo (rxBuffer、rxBytes);
    
    //检查 CRC OK (CRC_OK:第二个状态字节中的位7)
    //假设状态字节附加在 RX_FIFO 中
    //(PKT_CFG1.append_status = 1)
    //如果禁用 CRC,CRC_OK 字段将读为1
    if (rxBuffer[rxBytes - 1]和0x80){
    
    //更新数据包计数器
    packetCounter++;
    }
    }
    
    
    //更新 LCD
    updateLcd();
    
    //重置数据包信标
    packetSemaphore = ISR_IDLE;
    
    //将无线电设置回 RX
    trxSpiCmdStrobe (CC112X_SWOR);
    }
    }
    

    我按预期收到了所有数据包。

    BR

    Siri

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

    谢谢。  我将回顾您的更改、并与您讨论是否成功。

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

    因此、RX 监听对我来说仍然不起作用。 我返回到自定义设置并加载了上面的寄存器设置、除了我交换了外
    IOCFG0和 IOCFG2 (交换了0x06和0x37)。 因此、0是我的中断、2是我的射频监听器(示波器)。 外部中断从不会发生
    触发器、就像我之前看到的那样。 但无线电正在打开/关闭、示波器显示了这一点。

    我的代码集中有4种可能的配置(通过变量(RFapp 和 CPUapp))。 我只需将配置更改为我要运行的配置。

    a)无线电打开、CPU 打开
    b)无线电打开、CPU 睡眠
    c)无线电休眠、CPU 打开
    d)无线电转换、CPU 睡眠

    A)和 B)工作正常。 TX 发送50个数据包、每5秒发送一次。 在无线电始终开启的情况下、外部中断将触发每个中断
    接收到数据包的时间。 CPU 可以处于开启或睡眠模式、并且数据包可以通过任一方式进行处理。 触发器也会被验证
    我的示波器。 当数据包进入时、EXTINT 变为高电平、当我完成处理时、EXTINT 被复位。 然后、重复上述操作。


    c)仍然不起作用。 A)和 C)代码完全相同、除了 RFRXTX_Strobe (SRX)或 RFRXTX_Strobe (SWOR)根据执行
    在代码开头定义的无线电打开或无线电睡眠模式上。 示波器显示 EVENT0时间为16ms RX 激活、但显示了
    EXTINT 从不触发。 我不知道数据包是由 RX 丢弃还是 RX 从不看到数据包。

    Studio 至少看到一个数据包、但看不到任何数据包。 所以、我仍然对原因感到很损失。

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

    恐怕我不知道我还能做些什么来帮助你。 我已经测试了您的设置、它们都可以、我还向您提供了我已经测试过的代码、它可以正常工作。 我在下面附加了一些逻辑分析仪图、其中在一个引脚上输出了不同的调试信号、这样您就可以看到我的时序是怎样的、并将它与您的时序进行比较。 信号用于发送器(TX)和接收器(RX)、GPIO 配置如下:

    RX:

     {CC112X_IOCFG3、           0x37}、
     {CC112X_IOCFG2、           0x06}、
     {CC112X_IOCFG0、           0x26}、

    TX:

     {CC112X_IOCFG3、           0x26}、
     {CC112X_IOCFG2、           0x06}、

    EVENT0每16.6ms 发生一次:

    接收器处于 RX 中、每次唤醒时持续0.55ms、并且没有发送器发送任何内容

    在发送器开始发送内容后、接收器从第一次唤醒起就保持在 RX 中

    BR

    Siri

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

    感谢您的所有持续帮助和回应。  你真的很努力帮助,我衷心感谢你的帮助。  我将查看您的分析器图、看看这是否有助于确定任何内容。  我还将让更多的工程师帮助了解他们是否解决了这个问题。  显然,还没有人。  这真的不应该是很难弄清楚的、因为我认为我们真的很接近。  我不知道每次 TX 发送数据包时、无线电开启时为什么会触发外部中断。  但是、在监听模式下通过对讲机发送数据包的相同 TX 代码不会触发外部中断。  我正在使用 LPC2138 ARM7 MC、但这无关紧要。

    如果我们不能弄清楚、我们将不得不为这个 govt 项目改用另一个芯片、看看另一个芯片是否更适合低功耗和这个应用。  直到年底、我们才开始运行原型、因此我希望我们可以在不久的将来使其正常运行。  我会暂停原型、直到我们能够使该演示平台正常工作。  在继续之前、我希望确保我们可以使用该芯片。

    Sutton Mehaffey - Lookout 便携式安全设备

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

    你(们)好

    我无法看到您必须更改为另一个器件、正如我在测试中显示的那样、CC1120完全能够满足您的目标。

    也许您需要后退一步、从头开始。 我为您提供了用于执行监听模式的设置和代码、将该代码移植到其他 MCU 并不是很困难。 启动并运行后、您可以开始将应用程序一次一步更改到希望应用程序的外观。 例如、在开始考虑在 MCU 上实现睡眠模式之前、我会首先在 CC1120上启动并运行监听模式。

    祝您的项目好运:-)

    BR

    Siri

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

    我没有使用 IOCFG3执行任何操作、因此我设置了 IOCFG3 = 0x26 (蓝线)、就像您监控无线电是否进入 RX 一样。  它始终处于低电平、这是不好的。  这与处理器(处于无限循环中)无关、因为当无线电在没有 TX 流量的情况下进入射频监听模式时、它应该会被唤醒并短暂进入 RX 模式、而不是(您的图显示了这一点)。

    IOCFG2 = 0x37 (黄线)以监控 EVENT0、该值为16ms、正常工作。  我交换了两者(IOCFG2 = 0x26、IOCFG3 = 0x37)以确保正确映射了 IOCFG3、同样、IOCFG2始终为低电平、因此我交换了回来。  我假设、如果 TrxEB 板设置正确、那么无论什么、当您将无线电置于 RX 监听模式时、它都应唤醒并短暂进入 RX 模式。   独立于您使用的处理器。  因此、我必须弄清开发板为何不能正常运行。

    我尚未交换电路板、并尝试将 TX 电路板作为 RX。  我要这个。  我还将监控 TX 板、看看我是否看到您的图。

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

    我将 TrxEB 板从我的定制板控制中取出、然后再次将其作为评估板。   我打电话给 SmartRF 并进入专家模式、RF 监听模式。  我更改了 IOCFG3 (0x26)和 IOCFG0 (0x37)以监控 EVENT0选通和 MARC2PIN_STATUS[0]选通。  无其他更改。  EVENT0显示大约24ms 的唤醒时间。  MARC2PIN_STATUS[0]始终为低电平并且我在示波器上没有发现选通。  与我的自定义设置相同。  在这2次更改后、无线电是否不应在 EVENT0之后立即进入 RX 模式?

    我还尝试了第二个 TrxEB。  没有区别。  相同的结果。   

    我想、在我们弄清楚为什么无线电在 EVENT0之后不进入 RX 模式之前、我们可以做的事情不多。  也许我仍然不明白什么。

    Sutton

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

    好的。  最后、我让它正常工作。  在4种条件下100%工作-无线电处于连续模式和监听模式、CPU/MC 处于连续模式或睡眠模式。  任何组合。   它不是处理器、甚至是 RunRX 代码。  这是 CalibrateRCOsc 函数中的剪切和粘贴错误、在禁用校准时、它还禁用了 RC OSC (<而非<<)。  这个很难找到、因为我一直专注于 RunRX 代码和寄存器值。  无论如何,感谢你们的巨大帮助。  我知道很难调试其他人的项目。  我通过电话与我们的客户进行同样的交易。  我可能还有其他一些问题、因为我调整了一些值、以便能够处理多个条件、但我会在这些值出现时将其发布在另一个主题下。

    Sutton

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

    你(们)好

    我很高兴听到您发现了错误,并且一切都在运行,这样您就可以继续使用我们的设备:-)

    祝您的项目顺利

    BR

    Siri