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.

[参考译文] CC1101-Q1:芯片行为问题2据信相关的问题

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1200626/cc1101-q1-problem-with-chip-behavior-2-issues-believed-to-be-related

器件型号:CC1101-Q1
主题中讨论的其他器件:CC1101

您好:

我无法使 RX FIFO 正常工作、也无法确定是什么设置导致了问题。  读回的数据是随机垃圾数据。

同样、GDO2引脚配置为0x06、以便在接收到同步字时变为高电平、而它确实会这样做-但是、即使设置了长度、它在消息结束时也不会变为低电平。

我认为这些问题是相关的、但不知道原因/原因。

我能够通过 SPI 读取配置寄存器和所有其他项目-不仅仅是 RXFIFO、因此不是 SPI 配置问题(模式、时序都正确)。

因此、我被迫使用异步数据输出和使用微控制器对 FSK 信号进行软件解码、我不必这样做。

请告知可能导致此 IC 行为的原因。

此致、

Rob Tywlak

BGM 工程服务

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

    尊敬的 Rob:

    您似乎遇到了 RXFIFO_UNDFFLOW 公告、它位于我们的勘误表中: https://www.ti.com/lit/er/swrz020e/swrz020e.pdf?ts=1677578847640

    您将长度过滤配置为什么?

    此致、

    Arthur

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

    亚瑟:

    这不是我遇到的情况、因为我在微控制器中使用一个比消息时间长一点的计时器、来将芯片置于空闲状态并刷新 RXFIFO、然后返回到 RX 模式...  消息长度为34字节、这在长度寄存器中设置。  RX FIFO 永远不会溢出。

    此外、我将对 FSK 曼彻斯特消息进行软件解码、因为 FIFO 在应该包含的时候不包含有效数据-只是读回垃圾数据。

    我正在将 GDO0设置为0x0D 用于异步数据输出、微控制器使用该原始 FSK 解调信号。

    这提出了一个问题- FIFO 是仅在发生同步字匹配时才开始填充、还是也会填满噪声?

    同步字检测并不在消息的末尾起作用、因此设为0x06的 GDO2绝不会变为低电平、直到我的定时器启动芯片进入空闲状态并清空 RXFIFO 缓冲区。  这是我使芯片正常工作的唯一方法。  同步字匹配会启动计时器。

    这是别的……

    此致、

    Rob

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

    请共享您的寄存器设置、以便我们进行查看。

    Siri.

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

    Siri:

    我尝试了许多不同的选项、但没有任何选项能使 GDO2引脚输出在消息结束时变为低电平或使 RXFIFO 可读。

    请记住、我是使用 Micro 对消息进行解码、因为 RXFIFO 不能正常工作、这就是 GDO0设置为0x0D 的原因。

    以下是当前寄存器设置:

    0x06、// IOCFG2 GDO2输出同步匹配06
    0x0E、// IOCFG1 RSSI 高于阈值
    0x0D、// IOCFG0 GDO0输出引脚 FSK 数据输出  
    0x47、// FIFOTHR  
    0xCA、// SYNC1  
    0xE1、// SYNC0  
    0x22、// PKLEN  
    0x84、// PKTCTRL1  
    0x00、// PKTCTRL0  
    0x00、// ADDR
    0x00、// CHANNR  
    0x08、// FSCTRL1  
    0x00、// FSCTRL0  
    0x10、// FREQ2  
    0x12、// FREQ1  
    0x34、// FREQ0  
    0x9C、// MDMCFG4
    0x17、// MDMCFG3  
    0x19、// MDMCFG2  
    0x22、// MDMCFG1  
    0xE4、// MDMCFG0  
    0x47、// DEVIATN  
    0x07、// MCSM2  
    0x30、// MCSM1  
    0x18、// MCSM0  
    0x00、// FOCCFG  
    0x00、// BSCFG  
    0x03、// AGCCTRL2  
    0x00、// AGCCTRL1  
    0x22、// AGCCTRL0  
    0x87、// WOREVT1  
    0x6B、// WOREVT0  
    0xFB、// WORCTRL  
    0x56、// FREND1  
    0x10、// FREND0  
    0xE9、// FSCAL3  
    0x2A、// FSCAL2  
    0x00、// FSCAL1  
    0x1F、// FSCAL0  
    0x41、// RCCTRL1
    0x00、// RCCTRL0
    0x59、// FSTEST
    0x7f、//测试
    0x3F、// AGCTEST
    0x81、// TEST2
    0x35、// TEST1
    0x09、// TEST0

    此致、

    Rob Tywlak

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

    发现同步后、无线电只会将数据放入 FIFO 中、使用固定数据包长度模式时、它只会将 PKTLEN 字节放入 FIFO (+附加的状态字节)。

    我已经浏览过您的设置、我不确定它们都来自哪里。 为了进行测试、我已针对您使用的数据包格式和射频参数使用了 SmartRF Studio 提供的设置。 我已将不同于您的设置标记为我的设置

    // Address Config = No address check 
    // Base Frequency = 417.848755 
    // CRC Autoflush = false 
    // CRC Enable = false 
    // Carrier Frequency = 417.848755 
    // Channel Number = 0 
    // Channel Spacing = 192.016602 
    // Data Format = Normal mode 
    // Data Rate = 110.687 
    // Deviation = 47.607422 
    // Device Address = 0 
    // Manchester Enable = true 
    // Modulated = true 
    // Modulation Format = GFSK 
    // PA Ramping = false 
    // Packet Length = 34 
    // Packet Length Mode = Fixed packet length mode. Length configured in PKTLEN register 
    // Preamble Count = 4 
    // RX Filter BW = 162.500000 
    // Sync Word Qualifier Mode = 15/16 sync word bits detected 
    // TX Power = 0 
    // Whitening = false 
    // PA table 
    #define PA_TABLE {0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
    
    static const registerSetting_t preferredSettings[]= 
    {                                  // Customers settings
      {CC1101_IOCFG2,            0x06},
      {CC1101_IOCFG1,            0x0E},
      {CC1101_IOCFG0,            0x0D},
      {CC1101_FIFOTHR,           0x47},
      {CC1101_SYNC1,             0xCA},
      {CC1101_SYNC0,             0xE1},
      {CC1101_PKTLEN,            0x22},
      {CC1101_PKTCTRL1,          0x84},
      {CC1101_PKTCTRL0,          0x00},
      {CC1101_ADDR,              0x00},
      {CC1101_CHANNR,            0x00},
      {CC1101_FSCTRL1,           0x06},// 0x08
      {CC1101_FSCTRL0,           0x00},
      {CC1101_FREQ2,             0x10},
      {CC1101_FREQ1,             0x12},
      {CC1101_FREQ0,             0x34},
      {CC1101_MDMCFG4,           0x9C},
      {CC1101_MDMCFG3,           0x17},
      {CC1101_MDMCFG2,           0x19},
      {CC1101_MDMCFG1,           0x22},
      {CC1101_MDMCFG0,           0xE4},
      {CC1101_DEVIATN,           0x47},
      {CC1101_MCSM2,             0x07},
      {CC1101_MCSM1,             0x30},
      {CC1101_MCSM0,             0x18},
      {CC1101_FOCCFG,            0x16},// 0x00
      {CC1101_BSCFG,             0x6C},// 0x00
      {CC1101_AGCCTRL2,          0x43},// 0x03
      {CC1101_AGCCTRL1,          0x40},
      {CC1101_AGCCTRL0,          0x91},// 0x22
      {CC1101_WOREVT1,           0x87},
      {CC1101_WOREVT0,           0x6B},
      {CC1101_WORCTRL,           0xFB},
      {CC1101_FREND1,            0x56},
      {CC1101_FREND0,            0x10},
      {CC1101_FSCAL3,            0xEA},// 0xE9
      {CC1101_FSCAL2,            0x2A},
      {CC1101_FSCAL1,            0x00},
      {CC1101_FSCAL0,            0x1F},
      {CC1101_RCCTRL1,           0x41},
      {CC1101_RCCTRL0,           0x00},
      {CC1101_FSTEST,            0x59},
      {CC1101_PTEST,             0x7F},
      {CC1101_AGCTEST,           0x3F},
      {CC1101_TEST2,             0x81},
      {CC1101_TEST1,             0x35},
      {CC1101_TEST0,             0x0B},// 0x09
    };

    RX 实现方案:

    void main(void) {
    
        // initialize MCU and peripherals
        initMCU();
    
        // Write radio registers
        registerConfig();
    
        // Enter runRX, never coming back
        runRX();
    }
    
    static void runRX(void) {
    
        uint8 rxBuffer[PKTLEN + 2] = {0}; // 34 data bytes + 2 status bytes
        uint8 rxBytes;
        uint8 marcstate;
    
        // Connect ISR function to GPIO2
        ioPinIntRegister(IO_PIN_PORT_1, GPIO2, &radioRxISR);
    
        // Interrupt on falling edge
        ioPinIntTypeSet(IO_PIN_PORT_1, GPIO2, IO_PIN_FALLING_EDGE);
    
        // Clear ISR flag
        ioPinIntClear(IO_PIN_PORT_1, GPIO2);
    
        // Enable interrupt
        ioPinIntEnable(IO_PIN_PORT_1, GPIO2);
    
        // Update LCD
        updateLcd();
    
        // Set radio in RX
        trxSpiCmdStrobe(CC1101_SRX);
    
        // Infinite loop 
        while(TRUE) {
        
            // wait for packet received interrupt
            while(packetSemaphore != ISR_ACTION_REQUIRED);
            
            // Read PKTLEN bytes from RX FIFO
            cc1101SpiReadRxFifo(rxBuffer,(PKTLEN + 2));
                        
            // Update packet counter
            packetCounter++; // No CRC check is implemented, so always increase packet counter
           
            // Update LCD
            updateLcd();
          
            // Reset packet semaphore
            packetSemaphore = ISR_IDLE;
    
            // Set radio back in RX
            trxSpiCmdStrobe(CC1101_SRX);
        }
    }
    
    static void radioRxISR(void) {
    
        // Set packet semaphore
        packetSemaphore = ISR_ACTION_REQUIRED;
    
        // Clear ISR flag
        ioPinIntClear(IO_PIN_PORT_1, GPIO2);
    }
    

    出于测试目的、我从 SmartRF Studio 发送了一个34字节长的数据包:

    数据包已正确接收、GPIO2信号运行方式如下:

    放置到 FIFO 中的数据将是在 GDO0上接收到的任何内容的曼彻斯特解码表示、因此如果您只在 FIFO 中获得垃圾数据、那么  GDO0线上也只有垃圾数据。

    硬件有问题、导致射频性能不良、或者例如 SPI 通信有问题(不符合规范)、因此您无法使用尝试运行的配置运行。

    您需要尝试找出此问题是什么、而不是尝试为不应发生的错误(GDO2未取消置位)创建权变措施。

    您是否确定您已正确配置了接收器的发送器配置方式/发送器发送的数据包?

    Siri.

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

    Siri:

    我已经验证了 SPI 设置是正确的-模式0、2MHz、并尝试了从1MHz 到4MHz 的所有设置、没有任何差异。  我可以毫无问题地读回所有配置寄存器以及状态字节和 RSSI 寄存器-不仅仅是 RXFIFO。  它不是 SPI 设置...

    你关于 GDO0是垃圾的声明也是不正确的-这是我如何解码消息... 并使用微控制器干净地执行此操作。

    同步字匹配检测工作正常、因此我必须确保调制解调器配置正确、否则该部件将无法正常工作。

    这些设置来自 RF Studio、然后我调整了其中一些设置以适合我的应用、该应用具有115、2K 的符号速率曼彻斯特编码34字节数据包。

    我还使用与发送器相同的电路板进行测试-只是软件负载不同。  它上面有相同的微型和 CC1101。

    我已经试过所有的东西、为什么要在微控制器中使用具有异步数据输出的软件解码、并使用同步字匹配作为触发器来开始读取数据位、所以我在这里寻求帮助。  我更喜欢在 GDO2上使用 RXFIFO 和下降沿、但在这里不起作用。

    您提到的几个设置差异与 GDO2引脚行为无关-我认为这是时序问题或命令字问题、但不知道具体是什么。

    请重试。

    此致、

    Rob Tywlak

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

    Siri:

    尝试了您的所有设置、没有区别。  已将全部更改为匹配。  电压仍是相同的行为。

    此外、在硬件上也不太可能出现、因为我可以将消息降低至-100dBm、这比环境噪声高10dB…… 这非常接近于 数据表的性能。

    请重试、因为事实并非如此。

    此致、

    Rob Tywlak

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

    是否有关于此问题的任何更新?

    我想知道导致这种行为的原因是什么。

    此致、

    Rob Tywlak

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

    很遗憾、我不知道如何继续。

    您声称硬件正常、 设置正常、SPI 通信正常、但仍然无法正常工作。

    为了让我能够进一步帮助您、我需要找到一种在结束时重现问题的方法、也就是说您需要将问题移植到我们的开发平台、这样我就可以在我的办公桌上将失败的数据移植到我们的桌面上、然后对其进行调试。

    根据设计、仅当找到有效的同步字时才填充 FIFO。

    将其重新创建到我们的开发平台。 套件中、您至少需要向我提供完整的逻辑分析仪图、其中显示了从配置无线电、进入 RX 到读取 FIFO 的所有内容(需要所有4条 SPI 线路+ GDO 线路)。

    Siri.

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

    Siri:

    我认为问题是计时问题或缺少 SPI 命令-正如我之前所说的那样、我可以读回配置寄存器和 RSSI 值、以便我的 SPI 可以正常运行。

    数据表中缺少的一个规格是清空 RX 缓冲区需要多长时间?  那么在发出 RX 命令之前、我应该插入多长时间呢?

    我的初始化序列如下:

    1) 1)在 SPI 上发出复位命令并等待10ms -在这里从1ms 尝试到100ms 是没有区别的

    2) 对所有配置寄存器进行突发写入并等待1mS -在这里尝试了各种延迟、没有区别

    3) 将芯片置于空闲状态并等待100us -在此尝试了各种延迟、没有区别

    4) 刷新 RX_FIFO 命令并等待1ms -在此处尝试的最大值为100ms、没有区别

    5) 5) 将芯片置于 RX 模式

    接收数据包时、GDO2设置为在同步字匹配且该上升沿触发我的计时器中断时变为高电平。  该部件的工作方式。 因此、在检测到同步字时、必须正确配置接收器、否则会失败并且不会发生同步字匹配。

    计时器设置为比消息长度6.2ms 长1ms、然后发送 IDLE 命令、发送 FLUSH_RX_FIFO 以及1ms 的延迟、然后发送 RX 命令。  GDO2在消息的末尾永远不会变为低电平,如果我读取 RX_FIFO,它中有垃圾数据... 这迫使我使用 GDO0设置为0x0D 上的异步数据输出进行软件/硬件解码、这一切正常、因此如果存在硬件问题、我将不会可靠地接收到低于-100dBm 的 RSSI 电平的信号。   

    如果我没有发出 IDLE 和 FLUSH_RX_FIFO、那么在 FIFO 溢出时只能接收到一条消息并强制执行 IDLE 操作。

    我的问题仍然是、命令中缺少什么、或者为了导致发生这种情况、我违反了什么时间安排?

    我没有评估板可以与这里进行比较。

    此致、

    Rob Tywlak

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

    SPI 命令之间不需要任何延迟。 如果在 SFRX 之后立即发出 SRX 选通脉冲、则 RX 选通脉冲将在内部排队、直到刷新完成。  

    如果您需要我们深入研究、请再次提供您的 SPI 通信和 GDO 信号的逻辑分析仪图。

    Siri.

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

    Siri:

    随附的示波器图显示了该问题。  GDO1设置为 RXFIFO = 32字节。

    同步字匹配

    文件

    此致、

    Rob Tywlak

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

    你好、Rob

    我再次进行了测试、但仍然看不到任何问题。

    在上面、我将发送一个34字节长的数据包、并且我将 FIFO 阈值设置为32

    SYNC_RECEIVED/packet_RECEIVED 有效时间为4.92ms、对应于34字节曼彻斯特编码、波特率为110.687 kBaud (55.3435kbps):

    (34*8)*(1/55343.5)= 4.915ms

    在32个字节后 GDO1生效。

    您尝试过几种不同的电路板、还是仅一种?

    在进行 SPI 通信之前是否确保始终将 CPIP_RDYn 置为有效?

    您是否确保上升时间、保持时间等符合 SPI 总线的规格?

    同样、我不清楚如何继续、因为我无法重现您看到的任何问题。

    自芯片发布以来、我一直为使用 CC1101的客户提供支持、但我以前从未见过这个问题。

    如果始终从发送器发送相同的数据包、从 FIFO 读取的数据是否始终相同?

    如果不选通空闲、GDO 引脚是否永远不会生效、或者当 FIFO 以64字节溢出时它是否取消置位?

    您是否已回读 PKTLEN 寄存器以验证其值正确?

    Siri.

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

    另一个问题。 您说您使用的数据速率为115.2kBaud、但您的设置显示 110.687kBaud

    您在使用什么晶体频率?

    Siri.

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

    Siri:

    使用27.0000 MHz 10 ppm 晶振。  波特率在115200符号速率下是正确的、曼彻斯特编码= 57.6K 数据速率。

    是的、在发送任何 SPI 命令之前、我正在等待如此进入低电平-首先是芯片复位。

    我只能得出结论:我从我们的生产工厂获得的几个 IC 一定不能存放在足够干燥的环境中、这些 IC 已损坏、因为它们是 MSL 3级部件、我用热风将它们焊接到这些板上...

    所以我将在一个干燥包中放一些新的电池、然后重试。

    此致、

    Rob Tywlak