尊敬的 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(); }