Other Parts Discussed in Thread: CC1020,
Hello again TI community,
I come back to you with my project of developing a CC1120 RF module compatible with the CC1020 RF module.
here is a brief overview:
The main purpose is to replace our old brand working on CC1020 :
MCU - [CC1020] <------air-------> [CC1020] - MCU
with a new product based on the CC1120 but software compatible (software in MCU can't be alterated) :
MCU - [MCUb-CC1120] <----air-----> [CC1120-MCUb] - MCU
In my previous post (around 2 month ago CC1120EMK-420-470: CC1120 - synchronous mode - SMARTRFTRXEBK), I asked some help about hardware configuration.
I found out why it didn't work, it was a quartz deviation. I had to reprogram a new frequency to compensate the deviation.
This time I need your help about the "functionality". The CC1120 is programmed in synchronous serial mode with no sync/preamble detection/generation so i have my clock always running.
I have a main transmitter and a main receiver. We have 2 type of communications (for my testing the transmitter send a message every 100ms) :
- 1 way : transmitter --> receiver
- 2 way : -->
transmitter receiver (send response after each valid reception)
<--
I have a LED on the receiver side which change state every valid message received.
With the "1 way mode", the LED change state every 100ms with (indicate no data loss)
With the "2 way mode", the LED change state but is not stable (indicate data loss)
My question is :
- is strobing RX and TX is enough to correctly switch to their respective mode ? Do I need to reprogram other registers ?
You will find in attached the configuration code and my main (simplified) program.
If you need complementary informations dont hesitate.
Best Regards
Charles
/*************************************************************** * SmartRF Studio(tm) Export * * Radio register settings specifed with C-code * compatible #define statements. * * RF device: CC1120 * ***************************************************************/ #ifndef SMARTRF_CC1120_H #define SMARTRF_CC1120_H #define SMARTRF_RADIO_CC1120 #define SMARTRF_SETTING_IOCFG3 0xB0 #define SMARTRF_SETTING_IOCFG2 0x08 #define SMARTRF_SETTING_IOCFG1 0xB0 #define SMARTRF_SETTING_IOCFG0 0x09 #define SMARTRF_SETTING_SYNC3 0xAA #define SMARTRF_SETTING_SYNC2 0xAA//0xD3 /**///TX #define SMARTRF_SETTING_SYNC1 0xAA//0x91 /**/// #define SMARTRF_SETTING_SYNC0 0xAA//0xDA /**/// #define SMARTRF_SETTING_SYNC_CFG1 0x1F//0x0B /**/// #define SMARTRF_SETTING_SYNC_CFG0 0x03 #define SMARTRF_SETTING_DEVIATION_M 0x7F//0xA0 #define SMARTRF_SETTING_MODCFG_DEV_E 0x03//0x04 #define SMARTRF_SETTING_DCFILT_CFG 0x1C #define SMARTRF_SETTING_PREAMBLE_CFG1 0x00 #define SMARTRF_SETTING_PREAMBLE_CFG0 0x2A #define SMARTRF_SETTING_FREQ_IF_CFG 0x40 #define SMARTRF_SETTING_IQIC 0xC6 #define SMARTRF_SETTING_CHAN_BW 0x08 #define SMARTRF_SETTING_MDMCFG1 0x06 #define SMARTRF_SETTING_MDMCFG0 0x0A//0x05 /**/// 05 TX #define SMARTRF_SETTING_SYMBOL_RATE2 0x73 #define SMARTRF_SETTING_SYMBOL_RATE1 0xA9 #define SMARTRF_SETTING_SYMBOL_RATE0 0x2A #define SMARTRF_SETTING_AGC_REF 0x20 #define SMARTRF_SETTING_AGC_CS_THR 0x19 #define SMARTRF_SETTING_AGC_GAIN_ADJUST 0x00 #define SMARTRF_SETTING_AGC_CFG3 0x91 #define SMARTRF_SETTING_AGC_CFG2 0x20 #define SMARTRF_SETTING_AGC_CFG1 0x0A//0xAA /**/// AA in TX Freeze both AGC and RSSi update #define SMARTRF_SETTING_AGC_CFG0 0xCF #define SMARTRF_SETTING_FIFO_CFG 0x00 #define SMARTRF_SETTING_DEV_ADDR 0x00 #define SMARTRF_SETTING_SETTLING_CFG 0x03 #define SMARTRF_SETTING_FS_CFG 0x14 #define SMARTRF_SETTING_WOR_CFG1 0x08 #define SMARTRF_SETTING_WOR_CFG0 0x21 #define SMARTRF_SETTING_WOR_EVENT0_MSB 0x00 #define SMARTRF_SETTING_WOR_EVENT0_LSB 0x00 #define SMARTRF_SETTING_PKT_CFG2 0x01 #define SMARTRF_SETTING_PKT_CFG1 0x00 #define SMARTRF_SETTING_PKT_CFG0 0x20 #define SMARTRF_SETTING_RFEND_CFG1 0x0F #define SMARTRF_SETTING_RFEND_CFG0 0x00 #define SMARTRF_SETTING_PA_CFG2 0x7F #define SMARTRF_SETTING_PA_CFG1 0x56 #define SMARTRF_SETTING_PA_CFG0 0x7D #define SMARTRF_SETTING_PKT_LEN 0x03 #define SMARTRF_SETTING_IF_MIX_CFG 0x00 #define SMARTRF_SETTING_FREQOFF_CFG 0x22 #define SMARTRF_SETTING_TOC_CFG 0x0B #define SMARTRF_SETTING_MARC_SPARE 0x00 #define SMARTRF_SETTING_ECG_CFG 0x00 #define SMARTRF_SETTING_CFM_DATA_CFG 0x00 #define SMARTRF_SETTING_EXT_CTRL 0x01 #define SMARTRF_SETTING_RCCAL_FINE 0x00 #define SMARTRF_SETTING_RCCAL_COARSE 0x00 #define SMARTRF_SETTING_RCCAL_OFFSET 0x00 #define SMARTRF_SETTING_FREQOFF1 0x00 #define SMARTRF_SETTING_FREQOFF0 0x00 #define SMARTRF_SETTING_FREQ2 0x6C #define SMARTRF_SETTING_FREQ1 0xAA//0xAB//0x46 #define SMARTRF_SETTING_FREQ0 0xB0//0x33//0x66 #define SMARTRF_SETTING_IF_ADC2 0x02 #define SMARTRF_SETTING_IF_ADC1 0xA6 #define SMARTRF_SETTING_IF_ADC0 0x04 #define SMARTRF_SETTING_FS_DIG1 0x00 #define SMARTRF_SETTING_FS_DIG0 0x5F #define SMARTRF_SETTING_FS_CAL3 0x00 #define SMARTRF_SETTING_FS_CAL2 0x20 #define SMARTRF_SETTING_FS_CAL1 0x40 #define SMARTRF_SETTING_FS_CAL0 0x0E #define SMARTRF_SETTING_FS_CHP 0x28 #define SMARTRF_SETTING_FS_DIVTWO 0x03 #define SMARTRF_SETTING_FS_DSM1 0x00 #define SMARTRF_SETTING_FS_DSM0 0x33 #define SMARTRF_SETTING_FS_DVC1 0xFF #define SMARTRF_SETTING_FS_DVC0 0x17 #define SMARTRF_SETTING_FS_LBI 0x00 #define SMARTRF_SETTING_FS_PFD 0x50 #define SMARTRF_SETTING_FS_PRE 0x6E #define SMARTRF_SETTING_FS_REG_DIV_CML 0x14 #define SMARTRF_SETTING_FS_SPARE 0xAC #define SMARTRF_SETTING_FS_VCO4 0x14 #define SMARTRF_SETTING_FS_VCO3 0x00 #define SMARTRF_SETTING_FS_VCO2 0x00 #define SMARTRF_SETTING_FS_VCO1 0x00 #define SMARTRF_SETTING_FS_VCO0 0xB4 #define SMARTRF_SETTING_GBIAS6 0x00 #define SMARTRF_SETTING_GBIAS5 0x02 #define SMARTRF_SETTING_GBIAS4 0x00 #define SMARTRF_SETTING_GBIAS3 0x00 #define SMARTRF_SETTING_GBIAS2 0x10 #define SMARTRF_SETTING_GBIAS1 0x00 #define SMARTRF_SETTING_GBIAS0 0x00 #define SMARTRF_SETTING_IFAMP 0x01 #define SMARTRF_SETTING_LNA 0x01 #define SMARTRF_SETTING_RXMIX 0x01 #define SMARTRF_SETTING_XOSC5 0x0E #define SMARTRF_SETTING_XOSC4 0xA0 #define SMARTRF_SETTING_XOSC3 0x03 #define SMARTRF_SETTING_XOSC2 0x04 #define SMARTRF_SETTING_XOSC1 0x03 #define SMARTRF_SETTING_XOSC0 0x00 #define SMARTRF_SETTING_ANALOG_SPARE 0x00 #define SMARTRF_SETTING_PA_CFG3 0x00 #define SMARTRF_SETTING_WOR_TIME1 0x00 #define SMARTRF_SETTING_WOR_TIME0 0x00 #define SMARTRF_SETTING_WOR_CAPTURE1 0x00 #define SMARTRF_SETTING_WOR_CAPTURE0 0x00 #define SMARTRF_SETTING_BIST 0x00 #define SMARTRF_SETTING_DCFILTOFFSET_I1 0x00 #define SMARTRF_SETTING_DCFILTOFFSET_I0 0x00 #define SMARTRF_SETTING_DCFILTOFFSET_Q1 0x00 #define SMARTRF_SETTING_DCFILTOFFSET_Q0 0x00 #define SMARTRF_SETTING_IQIE_I1 0x00 #define SMARTRF_SETTING_IQIE_I0 0x00 #define SMARTRF_SETTING_IQIE_Q1 0x00 #define SMARTRF_SETTING_IQIE_Q0 0x00 #define SMARTRF_SETTING_RSSI1 0x80 #define SMARTRF_SETTING_RSSI0 0x00 #define SMARTRF_SETTING_MARCSTATE 0x41 #define SMARTRF_SETTING_LQI_VAL 0x00 #define SMARTRF_SETTING_PQT_SYNC_ERR 0xFF #define SMARTRF_SETTING_DEM_STATUS 0x00 #define SMARTRF_SETTING_FREQOFF_EST1 0x00 #define SMARTRF_SETTING_FREQOFF_EST0 0x00 #define SMARTRF_SETTING_AGC_GAIN3 0x00 #define SMARTRF_SETTING_AGC_GAIN2 0xD1 #define SMARTRF_SETTING_AGC_GAIN1 0x00 #define SMARTRF_SETTING_AGC_GAIN0 0x3F #define SMARTRF_SETTING_CFM_RX_DATA_OUT 0x00 #define SMARTRF_SETTING_CFM_TX_DATA_IN 0x00 #define SMARTRF_SETTING_ASK_SOFT_RX_DATA 0x30 #define SMARTRF_SETTING_RNDGEN 0x7F #define SMARTRF_SETTING_MAGN2 0x00 #define SMARTRF_SETTING_MAGN1 0x00 #define SMARTRF_SETTING_MAGN0 0x00 #define SMARTRF_SETTING_ANG1 0x00 #define SMARTRF_SETTING_ANG0 0x00 #define SMARTRF_SETTING_CHFILT_I2 0x08 #define SMARTRF_SETTING_CHFILT_I1 0x00 #define SMARTRF_SETTING_CHFILT_I0 0x00 #define SMARTRF_SETTING_CHFILT_Q2 0x00 #define SMARTRF_SETTING_CHFILT_Q1 0x00 #define SMARTRF_SETTING_CHFILT_Q0 0x00 #define SMARTRF_SETTING_GPIO_STATUS 0x00 #define SMARTRF_SETTING_FSCAL_CTRL 0x01 #define SMARTRF_SETTING_PHASE_ADJUST 0x00 #define SMARTRF_SETTING_PARTNUMBER 0x48 #define SMARTRF_SETTING_PARTVERSION 0x21 #define SMARTRF_SETTING_SERIAL_STATUS 0x08 #define SMARTRF_SETTING_MODEM_STATUS1 0x10 #define SMARTRF_SETTING_MODEM_STATUS0 0x00 #define SMARTRF_SETTING_MARC_STATUS1 0x00 #define SMARTRF_SETTING_MARC_STATUS0 0x00 #define SMARTRF_SETTING_PA_IFAMP_TEST 0x00 #define SMARTRF_SETTING_FSRF_TEST 0x00 #define SMARTRF_SETTING_PRE_TEST 0x00 #define SMARTRF_SETTING_PRE_OVR 0x00 #define SMARTRF_SETTING_ADC_TEST 0x00 #define SMARTRF_SETTING_DVC_TEST 0x0B #define SMARTRF_SETTING_ATEST 0x40 #define SMARTRF_SETTING_ATEST_LVDS 0x00 #define SMARTRF_SETTING_ATEST_MODE 0x00 #define SMARTRF_SETTING_XOSC_TEST1 0x3C #define SMARTRF_SETTING_XOSC_TEST0 0x00 #define SMARTRF_SETTING_RXFIRST 0x00 #define SMARTRF_SETTING_TXFIRST 0x00 #define SMARTRF_SETTING_RXLAST 0x00 #define SMARTRF_SETTING_TXLAST 0x00 #define SMARTRF_SETTING_NUM_TXBYTES 0x00 #define SMARTRF_SETTING_NUM_RXBYTES 0x00 #define SMARTRF_SETTING_FIFO_NUM_TXBYTES 0x0F #define SMARTRF_SETTING_FIFO_NUM_RXBYTES 0x00 #endif
while(1){ if(End_Send){ /* response sent */ End_Send=0; switch(Config[HF_MODE]){ case 0x00:{ /*1way*/ //ret_fct = (unsigned char)(SetupCC1020RX(HF[0x17],0x00U)); /*CC1020*/ Write_StrobeRegister(CC112X_SRX); /*CC1120*/ What_Do_Hf=Receive_Mode; /*receive in interrupt*/ EX0=1; /*enable interrupt for receiving*/ break; } case 0x01:{ /*2way*/ What_Do_Hf=Receive_Mode; /*receive in interrupt*/ //ret_fct = (unsigned char)(SetupCC1020RX(HF[0x17],0x00U)); /*CC1020*/ Write_StrobeRegister(CC112X_SRX); /*CC1120*/ EX0=1; /*enable interrupt for receiving*/ break; } default:{ /*do nothing*/ break; } } } if(End_Receive){ /*Message received*/ End_Receive=0; EX0=0; switch(Config[HF_MODE]){ case 0x00:{ /*1way*/ What_Do_Hf=Receive_Mode; /*receive in interrupt*/ Write_StrobeRegister(CC112X_SRX); /*CC1120*/ EX0=1; /*enable interrupt for receiving*/ break; } case 0x01:{ /*2way*/ /* coding response */ What_Do_Hf=Transmit_Mode; /*transmit in interrupt*/ //ret_fct = (unsigned char)(SetupCC1020TX(HF[0x17],0xFFU)); /*CC1020*/ Write_StrobeRegister(CC112X_STX); /*CC1120*/ pos_bit=0U; EX0=1; /*enable interrupt for transmitting*/ break; } default:{ /*do nothing*/ break; } } } if(MESS_READY){ /*correct address received*/ for(i=0U;i!=NBRE_BYTE_IN;i++){ /*copy dans variable de travail*/ data_all[i]=data_in_tmp[i]; data_in_tmp[i]=0xF0U; } MESS_READY=0U; /*clear flag*/ if((crc_tmp==0x00U)&&(count_start==count_start_mini)){ /*CRC ok*/ /* decoding message */ LED^=1; for(i=0U;i!=NBRE_BYTE_IN;i++){ /*reset variable travail*/ data_all[i]=0xFBU; } } } }