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.

[参考译文] CC1200:CAN#39;t 在进入 RX (或 TX)模式后读取寄存器

Guru**** 2535150 points
Other Parts Discussed in Thread: CC1200

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1044706/cc1200-can-t-read-registers-after-putting-into-rx-or-tx-mode

器件型号:CC1200

我有一组寄存器值取自之前的设计(使用了 SmartRF Studio 生成的值)。

复位后、我可以通过 SPI 精细地读取和写入寄存器、检查 CHIP_RDYn 等 但是、当我发出 SRX cmd 以进入 RX 模式时、每次我尝试读取寄存器时、内容始终返回0xx00。 我将在下面粘贴一些调试输出、但这并不是很令人兴奋。

实际上、我在这个阶段不需要读取寄存器、但我想读取 MARCSTATE 寄存器只是为了检查它是否进入 RX 模式(或者在它校准时有一些稳定状态)。 在将来的某个时候、我想在处理接收数据包时读取 RSSI、但这是另外一天。

《用户指南》第3.1.2节中有一条注释、表示您不应真正与寄存器在空闲状态以外的任何状态进行反向操作、但它不会说您无法读取任何状态?  

当值为0x00时、我不相信会尝试读取状态寄存器、因为 如果处于空闲模式、通常会是0x00、所以我无法分辨差异

RF Transceiver (CC1200) is present.
RF Transceiver is ready.
AGC_CFG0_REG_ADDR = 0x87
AGC_CFG1_REG_ADDR = 0x51
AGC_CS_THR_REG_ADDR = 0xec
CHAN_BW_REG_ADDR = 0x0b
FIFO_CFG_REG_ADDR = 0x00
FS_CAL0_REG_ADDR = 0x0e
FS_CAL1_REG_ADDR = 0x40
FS_CFG_REG_ADDR = 0x14
FS_DIG0_REG_ADDR = 0xaf
FS_DIG1_REG_ADDR = 0x07
FS_DIVTWO_REG_ADDR = 0x03
FS_DSM0_REG_ADDR = 0x33
FS_DVC0_REG_ADDR = 0x17
FS_PFD_REG_ADDR = 0x00
FS_REG_DIV_CML_REG_ADDR = 0x1c
FS_SPARE_REG_ADDR = 0xac
FS_VCO0_REG_ADDR = 0xb5
IF_ADC0_REG_ADDR = 0x10
IF_ADC1_REG_ADDR = 0xee
IQIC_REG_ADDR = 0xcb
MDMCFG2_REG_ADDR = 0x08
MODCFG_DEV_E_REG_ADDR = 0x03
PA_CFG1_REG_ADDR = 0x6d
PKT_CFG0_REG_ADDR = 0x20
PKT_CFG1_REG_ADDR = 0x00
PKT_CFG2_REG_ADDR = 0x03
PKT_LEN_REG_ADDR = 0xff
PREAMBLE_CFG0_REG_ADDR = 0x8a
PREAMBLE_CFG1_REG_ADDR = 0x00
SERIAL_STATUS_REG_ADDR = 0x08
SYMBOL_RATE0_REG_ADDR = 0x4e
SYMBOL_RATE1_REG_ADDR = 0x62
SYMBOL_RATE2_REG_ADDR = 0x70
XOSC1_REG_ADDR = 0x03
XOSC5_REG_ADDR = 0x0e
write to IOCFG3_REG_ADDR returned 0.
IOCFG3_REG_ADDR = 0x11
write to IOCFG2_REG_ADDR returned 0.
IOCFG2_REG_ADDR = 0x09
Entering RX mode...
MARCSTATE_REG_ADDR = 0x00
IOCFG3_REG_ADDR = 0x00, status = 0
IOCFG2_REG_ADDR = 0x00, status = 0
IOCFG1_REG_ADDR = 0x00, status = 0
FREQ0_REG_ADDR = 0x00
FREQ1_REG_ADDR = 0x00
FREQ2_REG_ADDR = 0x00
SYNC_CFG1_REG_ADDR = 0x00
DEVIATION_M_REG_ADDR = 0x00
DCFILT_CFG_REG_ADDR = 0x00
MDMCFG1_REG_ADDR = 0x00
MDMCFG0_REG_ADDR = 0x00
AGC_REF_REG_ADDR = 0x00
AGC_CFG3_REG_ADDR = 0x00
FREQOFF_CFG_REG_ADDR = 0x00
MARCSTATE_REG_ADDR = 0x00

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

    您好、Gary、

    我已将此主题分配给了其他人。 他们应尽快答复。

    BR、
    安德烈斯

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

    当您处于 RX 中时、读取寄存器不是问题。

    将 SmartRF Studio 中的推荐寄存器设置写入器件后、在我们的 TrxEB + CC1200 EM 上测试了以下代码:

    uint8 marcState;
    uint8 test[20];
       
    cc120xSpiReadReg(CC120X_MARCSTATE, &marcState, 1);
      
    cc120xSpiReadReg(CC120X_IOCFG3, test, 10);
        
    trxSpiCmdStrobe(CC120X_SRX);
        
    do{
        cc120xSpiReadReg(CC120X_MARCSTATE, &marcState, 1);
    } while (marcState != 0x6D);
        
    cc120xSpiReadReg(CC120X_IOCFG3, test, 10);
    

    通过放大、我们可以看到、MARCSTATE 报告器件处于空闲模式(0x41):

    之后、我首先读取10个寄存器(IOCFG3–SYNC_CFG0)、然后读取 I STROBE SRX (0x34)

    在轮询 MARCSATET 一段时间后、等待器件进入 RX (0x6D)、我再次读取相同的寄存器、它们的值与之前相同:

    我建议您在通过 SPI 进行通信时使用逻辑分析仪来监控线路、以确保一切正常。

    Siri

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

    你(们)好 谢谢。 我想看一下 SPI 引脚、但不幸的是、我的硬件人员不是很慷慨地提供测试点、PCB 也很小。 我要等到我回到办公室后才能正确连接一些 Kynar。 如果其他人犯了我犯的任何错误、我会报告我发现的情况。

    我可以肯定地说、我可以确认器件在 RX 模式下执行它应该执行的操作、并且我正在接收预期的数据包。 当我切换回空闲模式时、我能够按预期读取寄存器、因此您建议、在发出 SRX 选通后可能会出现 SPI 问题。

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

    你(们)好 很抱歉耽误你的时间、但我现在已经全部启动并运行了。

    首先、让我向我的硬件 chums 公开道歉、因为他们说他们没有给我任何测试点。 我应该先检查一下、因为他们已经为我提供了我需要的所有测试点  

    最后、我的问题是我没有为射频收发器启用3V3稳压器。 附近的引脚必须有足够的寄生功率来使其跛行甚至解码射频数据包、但这对于 RX 模式下的读取寄存器来说是不够的。