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.

[参考译文] CC1125:CC1125无法以19200bps 的速率传输

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1170722/cc1125-cc1125-can-not-transmit-at-19200bps

器件型号:CC1125

尊敬的 TI 团队:

我使用的模式是同步串行模式,9600bps 的无线波特率可以正常传输和接收,但19200bps 的无线波特率只能接收,TX 不正确。 我使用示波器测量 TX_ RX_ CLK 波形、发现速率波形不正确、TX_数据波形也错误我的配置 IOCFG3=0x08、IOCFG2=0x09、IOCFG1=0XB0、IOCFG0=0X30.9600bps 和19200bps 开关是符号、速率1/2/3与频率偏移不同。 其他所有内容都是相同的。 谢谢你。

下面是我的 SCH 和波形、CLK 为330KHz、无数据 波形。

static const registerSetting_t registerSettings[]= 
{
    {CC112X_IOCFG3, 0x08},
    {CC112X_IOCFG2, 0x09},
    {CC112X_IOCFG1, 0xB0},
    {CC112X_IOCFG0, 0x30},
    {CC112X_SYNC3,  0xCC},
    {CC112X_SYNC2,  0xCC},
    {CC112X_SYNC1,  0xCC},
    {CC112X_SYNC0,  0xCC},
    {CC112X_SYNC_CFG1, 0x0B},
    {CC112X_SYNC_CFG0, 0x17},
    {CC112X_DEVIATION_M, 0x70}, // Frequency Deviation 
    {CC112X_MODCFG_DEV_E, 0x0A},
    {CC112X_DCFILT_CFG,  0x56},
    {CC112X_PREAMBLE_CFG1, 0x00},
    {CC112X_PREAMBLE_CFG0, 0x35},
    {CC112X_FREQ_IF_CFG, 0x31},
    {CC112X_IQIC, 0xCE},
    {CC112X_CHAN_BW, 0x0D},// RX Filter BW 
    {CC112X_MDMCFG1, 0x06},
    //{CC112X_MDMCFG0, 0x0A}, //RX
    {CC112X_MDMCFG0, 0x05},  //TX
    {CC112X_SYMBOL_RATE2, 0x7F},
    {CC112X_SYMBOL_RATE1, 0x75},
    {CC112X_SYMBOL_RATE0, 0x10},
   // {CC112X_AGC_REF,      0x20},
    {CC112X_AGC_CS_THR, 0xEA},
    //{CC112X_AGC_CFG1, 0x0A}, //RX
    {CC112X_AGC_CFG1, 0x2D}, //TX
    {CC112X_AGC_CFG0, 0x5F},
    {CC112X_FIFO_CFG, 0x00},
    {CC112X_FS_CFG, 0x14},
    {CC112X_PKT_CFG2, 0x05},
    {CC112X_PKT_CFG1, 0x00},
    {CC112X_PKT_CFG0, 0x20},
    {CC112X_PA_CFG2, 0x5D},
    {CC112X_PA_CFG0, 0x7E},//PA = 0dBm
    {CC112X_IF_MIX_CFG, 0x00},
    {CC112X_FREQOFF_CFG, 0x22}, //rx
    //{CC112X_FREQOFF_CFG, 0x24}, //Tx
    {CC112X_FREQ2, 0x5A},
    {CC112X_FREQ1, 0x5F},
    {CC112X_FREQ0, 0x5C},
    {CC112X_IF_ADC0, 0x05},
    {CC112X_FS_DIG1, 0x00},
    {CC112X_FS_DIG0, 0x5F},
    {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_XOSC5, 0x0E},
    {CC112X_XOSC3, 0xC7},
    {CC112X_XOSC1, 0x07},
    {CC112X_SERIAL_STATUS, 0x08},
};
void Init_CC112x_TX()
{
       uint8_t writeByte;
      //Set serial mode specific registers
      writeByte = 0x08;
      cc112xSpiWriteReg(CC112X_IOCFG3, &writeByte, 1);
      writeByte = 0xb0;
      cc112xSpiWriteReg(CC112X_IOCFG2, &writeByte, 1);
      writeByte = 0x30;
      cc112xSpiWriteReg(CC112X_IOCFG0, &writeByte, 1);
      writeByte = 0x08;
      cc112xSpiWriteReg(CC112X_SYNC_CFG1, &writeByte, 1);
      writeByte = 0x00;
      cc112xSpiWriteReg(CC112X_PREAMBLE_CFG1, &writeByte, 1);
      writeByte = 0x06;
      cc112xSpiWriteReg(CC112X_MDMCFG1, &writeByte, 1);
      writeByte = 0x05;
      cc112xSpiWriteReg(CC112X_MDMCFG0, &writeByte, 1);
      writeByte = 0x2D;
      cc112xSpiWriteReg(CC112X_AGC_CFG1, &writeByte, 1);
      writeByte = 0x05;
      cc112xSpiWriteReg(CC112X_PKT_CFG2, &writeByte, 1);
      writeByte = 0x00;
      cc112xSpiWriteReg(CC112X_PKT_CFG1, &writeByte, 1);
      writeByte = 0x08;
      cc112xSpiWriteReg(CC112X_SERIAL_STATUS, &writeByte, 1);
      
}
void Init_CC112x_RX()
{
      uint8_t writeByte;
      //Set serial mode specific registers
      writeByte = 0x08;
      cc112xSpiWriteReg(CC112X_IOCFG3, &writeByte, 1);
      writeByte = 0x09;
      cc112xSpiWriteReg(CC112X_IOCFG2, &writeByte, 1);
      writeByte = 0xb0;
      cc112xSpiWriteReg(CC112X_IOCFG0, &writeByte, 1);
      writeByte = 0x1F;
      cc112xSpiWriteReg(CC112X_SYNC_CFG1, &writeByte, 1);
      writeByte = 0x00;
      cc112xSpiWriteReg(CC112X_PREAMBLE_CFG1, &writeByte, 1);
      writeByte = 0x06;
      cc112xSpiWriteReg(CC112X_MDMCFG1, &writeByte, 1);
      writeByte = 0x0A;
      cc112xSpiWriteReg(CC112X_MDMCFG0, &writeByte, 1);
      writeByte = 0x0A;
      cc112xSpiWriteReg(CC112X_AGC_CFG1, &writeByte, 1);
      writeByte = 0x05;
      cc112xSpiWriteReg(CC112X_PKT_CFG2, &writeByte, 1);
      writeByte = 0x00;
      cc112xSpiWriteReg(CC112X_PKT_CFG1, &writeByte, 1);
      writeByte = 0x08;
      cc112xSpiWriteReg(CC112X_SERIAL_STATUS, &writeByte, 1);
}
void CC112x_19200()
{
       uint8_t writeByte;
       
       writeByte = 0xA3; //4K
       cc112xSpiWriteReg(CC112X_DEVIATION_M, &writeByte, 1);
       writeByte = 0x0A;
       cc112xSpiWriteReg(CC112X_MODCFG_DEV_E, &writeByte, 1);
       
       writeByte = 0x4E; //IQ image compensation disabled 
       cc112xSpiWriteReg(CC112X_IQIC, &writeByte, 1);
       writeByte = 0x06; //CHAN_BW 41.7 20
       cc112xSpiWriteReg(CC112X_CHAN_BW, &writeByte, 1);
       
       writeByte = 0x7F; //19.2KHz
       cc112xSpiWriteReg(CC112X_SYMBOL_RATE2, &writeByte, 1);
       writeByte = 0x75;
       cc112xSpiWriteReg(CC112X_SYMBOL_RATE1, &writeByte, 1);
       writeByte = 0x10;
       cc112xSpiWriteReg(CC112X_SYMBOL_RATE0, &writeByte, 1);
       
}
void CC112x_9600()
{
       uint8_t writeByte;
       
       writeByte = 0xF7; //2.4k
       cc112xSpiWriteReg(CC112X_DEVIATION_M, &writeByte, 1);
       writeByte = 0x09;
       cc112xSpiWriteReg(CC112X_MODCFG_DEV_E, &writeByte, 1);
       
       writeByte = 0xCE; //IQ image compensation disabled 
       cc112xSpiWriteReg(CC112X_IQIC, &writeByte, 1);
       writeByte = 0x0D; //CHAN_BW 19.2  20 
       cc112xSpiWriteReg(CC112X_CHAN_BW, &writeByte, 1);
       
       writeByte = 0x6F; //9.6KBPS
       cc112xSpiWriteReg(CC112X_SYMBOL_RATE2, &writeByte, 1);
       writeByte = 0x75;
       cc112xSpiWriteReg(CC112X_SYMBOL_RATE1, &writeByte, 1);
       writeByte = 0x10;
       cc112xSpiWriteReg(CC112X_SYMBOL_RATE0, &writeByte, 1);
       
}

void Air_Rate_Init() //
{
	Radio_Para.Wireless_Link_Rate = Memory_Content[2];
	switch(Radio_Para.Wireless_Link_Rate)
	{
		case '4':
		CC112x_19200();
		break;
		case '2':
		CC112x_9600();
		break;
		default:
		Radio_Para.Wireless_Link_Rate = '2';
		CC112x_9600();;
		break;		
	}
}
void Exti_Init()
{
   /* TRX_SCK*/
    GPIO_MODER(RADIO_TRX_CLK_PORT,RADIO_TRX_CLK_PIN,0);//PA8
    GPIO_Speed(RADIO_TRX_CLK_PORT,RADIO_TRX_CLK_PIN,3);//50MHz
    GPIO_Pull_Up_Down(RADIO_TRX_CLK_PORT,RADIO_TRX_CLK_PIN,0);
    
    SYSCFG_EXTILineConfig(0,8); 
    
    if(Radio_Para.Operating_Mode == '2')  //RX
    {
          Ex_NVIC_Config(0,8,1);//PA8 FALLING
    }
    else if(Radio_Para.Operating_Mode == '0') //TX
    {
         Ex_NVIC_Config(0,8,2);//PA8 RISE
    }

    NVIC_Init(0,2,EXTI9_5_IRQn,2);

}
void InitCC112x()
{ 
      uint8_t writeByte;
      trxSpiCmdStrobe(CC112X_SRES); // Reset radio
      for(uint16_t i = 0; i < (sizeof(registerSettings)/sizeof(registerSetting_t)); i++) 
      {
          writeByte =registerSettings[i].data;
          cc112xSpiWriteReg( registerSettings[i].addr, &writeByte, 1);
      }
      cc112xSpiReadReg(CC112X_IOCFG3, &writeByte, 1);
      if(writeByte !=registerSettings[0].data)while(1);
      trxSpiCmdStrobe(CC112X_SCAL); 
      //cc112xSpiReadReg(CC112X_PARTNUMBER, &writeByte, 1);
      //if(writeByte!=0x58)while(1);
}

void Init_Radio()//TX
{
	Init_Sys();
    InitCC112x();
    ManualCalibration();
    Air_Rate_Init();
	Init_CC112x_TX();
    Exti_Init();
}

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

    请注意 ,串行模式仅支持2元调制格式。 SmartRF Studio 中的9.6kbps 设置将起作用、因为它们是2GFSK、而19.2kbps 是4GFSK、不起作用。 您需要更改调制格式。

    我使用以下设置进行了测试、结果正常:

    // Address Config = No address check 
    // Bit Rate = 19.2 
    // Carrier Frequency = 869.224854 
    // Deviation = 9.994507 
    // Device Address = 0 
    // Manchester Enable = false 
    // Modulation Format = 2-FSK 
    // PA Ramping = true 
    // Packet Bit Length = 0 
    // Packet Length = 255 
    // Packet Length Mode = Variable 
    // Performance Mode = High Performance 
    // RX Filter BW = 50.000000 
    // Symbol rate = 19.2 
    // TX Power = 15 
    // Whitening = false 
    
    static const registerSetting_t preferredSettings[]= 
    {
      {CC112X_IOCFG3,            0xB0},
      {CC112X_IOCFG2,            0x06},
      {CC112X_IOCFG1,            0xB0},
      {CC112X_IOCFG0,            0x40},
      {CC112X_SYNC_CFG1,         0x0B},
      {CC112X_SYNC_CFG0,         0x08},
      {CC112X_MODCFG_DEV_E,      0x04},
      {CC112X_DCFILT_CFG,        0x1C},
      {CC112X_FREQ_IF_CFG,       0x33},
      {CC112X_IQIC,              0x46},
      {CC112X_CHAN_BW,           0x05},
      {CC112X_MDMCFG0,           0x05},
      {CC112X_SYMBOL_RATE2,      0x7F},
      {CC112X_SYMBOL_RATE1,      0x75},
      {CC112X_SYMBOL_RATE0,      0x10},
      {CC112X_AGC_REF,           0x28},
      {CC112X_AGC_CS_THR,        0xEA},
      {CC112X_AGC_CFG1,          0xA0},
      {CC112X_FIFO_CFG,          0x00},
      {CC112X_SETTLING_CFG,      0x03},
      {CC112X_FS_CFG,            0x12},
      {CC112X_PKT_CFG0,          0x20},
      {CC112X_PA_CFG0,           0x7D},
      {CC112X_PKT_LEN,           0xFF},
      {CC112X_IF_MIX_CFG,        0x00},
      {CC112X_FREQ2,             0x56},
      {CC112X_FREQ1,             0xEC},
      {CC112X_FREQ0,             0x28},
      {CC112X_IF_ADC0,           0x05},
      {CC112X_FS_DIG1,           0x00},
      {CC112X_FS_DIG0,           0x5F},
      {CC112X_FS_CAL0,           0x0E},
      {CC112X_FS_CHP,            0x30},
      {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_XOSC5,             0x0E},
      {CC112X_XOSC3,             0xC7},
      {CC112X_XOSC1,             0x07},
      {CC112X_PARTNUMBER,        0x58},
      {CC112X_PARTVERSION,       0x21},
      {CC112X_MODEM_STATUS1,     0x10},
      {CC112X_XOSC_TEST1,        0x00},
    };

    Siri

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

    您好、Siri、   

    您是说串行模式 仅支持2fsk、但不支持4fsk、对吧?

    在9600bps 和19200bps 之间的2fsk 串行模式下、需要修改密钥寄存 器呢? 太棒了!

    Kevin    

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

    是的、用户指南中对此进行了说明

    我向您展示了我在上面使用的寄存器。

    我在网上使用了串行示例、并使用 SmartRF Studio 生成了新设置。

    我使用19.2kbps 设置作为起点、然后更改了调制格式(我使用2-FSK、但也可以使用2-GFSK)。 然后、我更改了符号速率、偏差和 RX BW。

    Siri

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

    您好 Siri,

      我尝试在    串行模式下使用上面显示的寄存器、但我失败了。我尝试使用 FIFO 模式、但又失败了、可能还有硬件错误。

    Kevin

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

    您想使用 同步串行模式与 FIFO 模式的任何原因?  

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

    原因是我无法以19200bps 的波特率与 CC1125一起传输。 我以前在串行模式中、但发现无法生成数据和 clk。 后来、我使用 FIFO 模式、发现传输的频谱也是错误的。

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

    使用串行模式而不是 FIFO 模式的唯一原因是使用 FIFO 模式不支持的数据包格式。

    如果您将器件配置为串行模式而不是生成时钟、则需要查看您的硬件。

    在使用9.6kbps 时生成时钟也没有意义、但在使用19.2kbps 时生成时钟也没有意义。

    您是否已验证 SPI 通信并发现它符合 speck?

    您是否已读出所有寄存器并验证它们是正确的值?

    您应该通过制作一个非常简单的测试代码来开始测试:

    配置 MCU

    复位 CC1125

    使用 SmartRF Studio 的默认9.6kbps 设置初始化 CC1125 (无线电现在配置为 FIFO 模式)

    选通 STX

    由于 FIFO 为空、无线电现在应该永远发送前导码。

    验证发送的前导码频率是否正确且数据速率是否正确。

    如果这起作用、您可以首先尝试传输一个真实的数据包。

    Siri