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.

CC1110-CC1111: Unexplained spurious emissions

Part Number: CC1110-CC1111

Hello!

I am looking for help with tracking down the cause of some unexplained spurious emissions we have been seeing from the CC1110 when it is operated around 433 MHz in our custom layout. We observe that when we transmit, spurs appear in a symmetrical manner around the carrier. The amplitude of these spurs changes linearly with that of the carrier - when the carrier power is decreased by 10dB, the power of the spurs does so. Backing off the transmit power from 10dBm to 0dBm does not help either. Below are some examples with an unmodulated carrier.

Carrier power 0 dBm:

Carrier power 10 dBm:

The GERBER files are attached below, while the full Altium design can be found here; gitlab.com/.../poc-gs-board

poc-gs-bard-r1-gerbers.zip

What are the reasons for these spurs? What can we do to get rid of them?

Thank you!

  • If you move the center frequency, is the frequency delta between the fundamental and the spurs constant or does it change with frequency? 

  • Yes, the frequency delta between the fundamental and the spurs constant. I have changed the fundamental from 436.5 MHz to 433.5 MHz to come to this conclusion. The captures are attached. The delta between the fundamental and the first spur is ~1.33 MHz and the fundamental and the second spur ~2.67 MHz in both cases.

    Fundamental at 433.5 MHz:

    Fundamental at 436.5 MHz:

  • Which settings have you used to generate this plot? 

  • This one - just changed the frequency manually as needed:

    tx.xml
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE configuration SYSTEM "C:/Program Files (x86)/Texas Instruments/SmartRF Tools/SmartRF Studio 7/config/xml/configdata.dtd"[]>
    <dcpanelconfiguration>
        <Devicename>CC1110</Devicename>
        <Description>Saved configuration data</Description>
        <registersettings>
            <Register>
                <Name>DEVIATN</Name>
                <Value>0x17</Value>
            </Register>
            <Register>
                <Name>FOCCFG</Name>
                <Value>0x17</Value>
            </Register>
            <Register>
                <Name>FREQ0</Name>
                <Value>0xfa</Value>
            </Register>
            <Register>
                <Name>FREQ1</Name>
                <Value>0x2f</Value>
            </Register>
            <Register>
                <Name>FREQ2</Name>
                <Value>0x10</Value>
            </Register>
            <Register>
                <Name>FSCAL0</Name>
                <Value>0x1f</Value>
            </Register>
            <Register>
                <Name>FSCAL1</Name>
                <Value>0x00</Value>
            </Register>
            <Register>
                <Name>FSCAL2</Name>
                <Value>0x2a</Value>
            </Register>
            <Register>
                <Name>FSCAL3</Name>
                <Value>0xe9</Value>
            </Register>
            <Register>
                <Name>FSCTRL1</Name>
                <Value>0x06</Value>
            </Register>
            <Register>
                <Name>IOCFG0</Name>
                <Value>0x06</Value>
            </Register>
            <Register>
                <Name>IOCFG1</Name>
                <Value>0x5b</Value>
            </Register>
            <Register>
                <Name>IOCFG2</Name>
                <Value>0x5b</Value>
            </Register>
            <Register>
                <Name>LQI</Name>
                <Value>0x7f</Value>
            </Register>
            <Register>
                <Name>MCSM0</Name>
                <Value>0x18</Value>
            </Register>
            <Register>
                <Name>MDMCFG0</Name>
                <Value>0xe5</Value>
            </Register>
            <Register>
                <Name>MDMCFG2</Name>
                <Value>0x03</Value>
            </Register>
            <Register>
                <Name>MDMCFG3</Name>
                <Value>0x8b</Value>
            </Register>
            <Register>
                <Name>MDMCFG4</Name>
                <Value>0xf8</Value>
            </Register>
            <Register>
                <Name>PA_TABLE0</Name>
                <Value>0x12</Value>
            </Register>
            <Register>
                <Name>TEST0</Name>
                <Value>0x09</Value>
            </Register>
            <Register>
                <Name>TEST1</Name>
                <Value>0x31</Value>
            </Register>
            <Register>
                <Name>VERSION</Name>
                <Value>0x04</Value>
            </Register>
        </registersettings>
        <dcpanel>
            <Property name="m_chkRegView" role="44">2</Property>
            <Property name="m_chkCmdView" role="44">0</Property>
            <Property name="m_chkRfParameters" role="44">2</Property>
            <Property name="m_cmbUserMode" role="46">1</Property>
            <Property name="m_easyModeSettings" role="33">-1</Property>
            <Property name="m_typicalSettings" role="33">-1</Property>
            <Property name="m_testFuncPanel" role="37">2</Property>
        </dcpanel>
        <rfparameters>
            <Property name="Xtal Frequency" role="46">27.000000</Property>
        </rfparameters>
        <conttx>
            <Property name="m_rbtModulated" role="45">1</Property>
            <Property name="m_rbtUnmodulated" role="45">0</Property>
            <Property name="m_cmbDataFormat" role="46">-1</Property>
            <Property name="m_chkFreqSweep" role="44">0</Property>
            <Property name="m_chkChanSweep" role="44">0</Property>
        </conttx>
        <contrx>
            <Property name="m_cmbDataFormat" role="46">-1</Property>
            <Property name="m_chkAutoScroll" role="44">2</Property>
        </contrx>
        <packettx>
            <Property name="m_edtPayloadSize" role="42">20</Property>
            <Property name="m_edtPacketCount" role="42">100</Property>
            <Property name="m_edtPacketCountEsy" role="42">100</Property>
            <Property name="m_edtRandomPacketData" role="42">13 0d 89 0a 1c db ae 32 20 9a 50 ee 40 78 36 fd 12 49 32 f6 9e 7d 49 dc ad 4f 14 f2 </Property>
            <Property name="m_edtPacketData" role="42">91 c8 39 d9 93 42 8a e5 af 75 a3 c7 bf 5f d8 93 5a cc</Property>
            <Property name="m_edtAccessAddress" role="42"></Property>
            <Property name="m_edtDeviceAddress" role="42"></Property>
            <Property name="m_chkAddSeqNbr" role="44">2</Property>
            <Property name="m_chkInfinite" role="44">2</Property>
            <Property name="m_chkInfiniteEsy" role="44">2</Property>
            <Property name="m_rbtRandom" role="45">0</Property>
            <Property name="m_rbtText" role="45">0</Property>
            <Property name="m_rbtHex" role="45">1</Property>
            <Property name="m_chkAdvanced" role="44">2</Property>
            <Property name="m_cmbSyncWord" role="46">3</Property>
            <Property name="m_cmbPreambleCount" role="46">2</Property>
            <Property name="m_chkAddress" role="44">0</Property>
            <Property name="m_edtAddress" role="42"></Property>
            <Property name="m_cmbLengthConfig" role="46">1</Property>
            <Property name="m_edtLengthConfig" role="42">28</Property>
            <Property name="m_spnPktInterval" role="52">600</Property>
            <Property name="m_chkDefPktInterval" role="44">2</Property>
        </packettx>
        <packetrx>
            <Property name="m_edtPacketCount" role="42">100</Property>
            <Property name="m_edtPacketCountEsy" role="42">100</Property>
            <Property name="m_edtAccessAddress" role="42"></Property>
            <Property name="m_chkInfinite" role="44">0</Property>
            <Property name="m_chkInfiniteEsy" role="44">0</Property>
            <Property name="m_cmbViewFormat" role="46">0</Property>
            <Property name="m_chkSeqNbrIncluded" role="44">2</Property>
            <Property name="m_edtDumpFile" role="42"></Property>
            <Property name="m_chkAdvanced" role="44">0</Property>
            <Property name="m_chk802154gMode" role="44">0</Property>
        </packetrx>
        <commandpanel>
            <Property name="m_chkInsertLength" role="44">0</Property>
            <Property name="m_edtTxFifo" role="42"></Property>
            <Property name="m_edtRxFifo" role="42"></Property>
            <Property name="m_cmbInstrInput" role="46">-1</Property>
        </commandpanel>
    </dcpanelconfiguration>
    

  • It looks like you are sending packets. When you are sending packets you will get something like this in the frequency domain. In the time domain you have a "rectangle" of energy and if you do a FFT you will get a sinc. 

    If you want to check for spurious, use just a tone (CW). Also test  according to the standard/ regulation you want to comply with. 

  • Thank you for this update. I have realized that I have changed more than I originally remembered from the file which I sent you - the measurements were done using an unmodulated carrier. No packets were sent.  I apologize for the confusion resulting form this.

    The testing we conduct is to meet the spurious emission limits outlined in ITU-R SM.329-12. Testing is done according to ITU guidelines. We are currently failing to meet the limits outlined in this document, this is why I have posted this issue.

    I have attached an updated SmartRF configuration which now accurately reflect what settings were used to collect the data above. Do you have any further insights into this issue? Your expert advice is much needed and appreciated, we are not sure how to proceed to resolve this.

    smartrf-spurii.xml
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE configuration SYSTEM "C:/Program Files (x86)/Texas Instruments/SmartRF Tools/SmartRF Studio 7/config/xml/configdata.dtd"[]>
    <dcpanelconfiguration>
        <Devicename>CC1110</Devicename>
        <Description>Saved configuration data</Description>
        <registersettings>
            <Register>
                <Name>DEVIATN</Name>
                <Value>0x17</Value>
            </Register>
            <Register>
                <Name>FOCCFG</Name>
                <Value>0x17</Value>
            </Register>
            <Register>
                <Name>FREND0</Name>
                <Value>0x11</Value>
            </Register>
            <Register>
                <Name>FREQ0</Name>
                <Value>0xaa</Value>
            </Register>
            <Register>
                <Name>FREQ1</Name>
                <Value>0x2a</Value>
            </Register>
            <Register>
                <Name>FREQ2</Name>
                <Value>0x10</Value>
            </Register>
            <Register>
                <Name>FSCAL0</Name>
                <Value>0x1f</Value>
            </Register>
            <Register>
                <Name>FSCAL1</Name>
                <Value>0x00</Value>
            </Register>
            <Register>
                <Name>FSCAL2</Name>
                <Value>0x2a</Value>
            </Register>
            <Register>
                <Name>FSCAL3</Name>
                <Value>0xe9</Value>
            </Register>
            <Register>
                <Name>FSCTRL1</Name>
                <Value>0x06</Value>
            </Register>
            <Register>
                <Name>IOCFG1</Name>
                <Value>0x5b</Value>
            </Register>
            <Register>
                <Name>IOCFG2</Name>
                <Value>0x5b</Value>
            </Register>
            <Register>
                <Name>MCSM0</Name>
                <Value>0x18</Value>
            </Register>
            <Register>
                <Name>MDMCFG0</Name>
                <Value>0xe5</Value>
            </Register>
            <Register>
                <Name>MDMCFG2</Name>
                <Value>0x30</Value>
            </Register>
            <Register>
                <Name>MDMCFG3</Name>
                <Value>0x8b</Value>
            </Register>
            <Register>
                <Name>MDMCFG4</Name>
                <Value>0xf8</Value>
            </Register>
            <Register>
                <Name>PA_TABLE0</Name>
                <Value>0xc0</Value>
            </Register>
            <Register>
                <Name>PA_TABLE1</Name>
                <Value>0xc0</Value>
            </Register>
            <Register>
                <Name>PKTCTRL0</Name>
                <Value>0x22</Value>
            </Register>
            <Register>
                <Name>TEST0</Name>
                <Value>0x09</Value>
            </Register>
            <Register>
                <Name>TEST1</Name>
                <Value>0x31</Value>
            </Register>
        </registersettings>
        <dcpanel>
            <Property name="m_chkRegView" role="44">2</Property>
            <Property name="m_chkCmdView" role="44">0</Property>
            <Property name="m_chkRfParameters" role="44">2</Property>
            <Property name="m_cmbUserMode" role="46">1</Property>
            <Property name="m_easyModeSettings" role="33">-1</Property>
            <Property name="m_typicalSettings" role="33">-1</Property>
            <Property name="m_testFuncPanel" role="37">0</Property>
        </dcpanel>
        <rfparameters>
            <Property name="Xtal Frequency" role="46">27.000000</Property>
        </rfparameters>
        <conttx>
            <Property name="m_rbtModulated" role="45">0</Property>
            <Property name="m_rbtUnmodulated" role="45">1</Property>
            <Property name="m_cmbDataFormat" role="46">-1</Property>
            <Property name="m_chkFreqSweep" role="44">0</Property>
            <Property name="m_chkChanSweep" role="44">0</Property>
        </conttx>
        <contrx>
            <Property name="m_cmbDataFormat" role="46">-1</Property>
            <Property name="m_chkAutoScroll" role="44">2</Property>
        </contrx>
        <packettx>
            <Property name="m_edtPayloadSize" role="42">55</Property>
            <Property name="m_edtPacketCount" role="42">100</Property>
            <Property name="m_edtPacketCountEsy" role="42">100</Property>
            <Property name="m_edtRandomPacketData" role="42">13 0d 89 0a 1c db ae 32 20 9a 50 ee 40 78 36 fd 12 49 32 f6 9e 7d 49 dc ad 4f 14 f2 </Property>
            <Property name="m_edtPacketData" role="42">3931206338203339206439203933203432203861206535206166203735206133206337206266203566206438203933203561206363</Property>
            <Property name="m_edtAccessAddress" role="42"></Property>
            <Property name="m_edtDeviceAddress" role="42"></Property>
            <Property name="m_chkAddSeqNbr" role="44">2</Property>
            <Property name="m_chkInfinite" role="44">2</Property>
            <Property name="m_chkInfiniteEsy" role="44">2</Property>
            <Property name="m_rbtRandom" role="45">0</Property>
            <Property name="m_rbtText" role="45">0</Property>
            <Property name="m_rbtHex" role="45">1</Property>
            <Property name="m_chkAdvanced" role="44">2</Property>
            <Property name="m_cmbSyncWord" role="46">0</Property>
            <Property name="m_cmbPreambleCount" role="46">2</Property>
            <Property name="m_chkAddress" role="44">0</Property>
            <Property name="m_edtAddress" role="42"></Property>
            <Property name="m_cmbLengthConfig" role="46">2</Property>
            <Property name="m_edtLengthConfig" role="42">28</Property>
            <Property name="m_spnPktInterval" role="52">600</Property>
            <Property name="m_chkDefPktInterval" role="44">2</Property>
        </packettx>
        <packetrx>
            <Property name="m_edtPacketCount" role="42">100</Property>
            <Property name="m_edtPacketCountEsy" role="42">100</Property>
            <Property name="m_edtAccessAddress" role="42"></Property>
            <Property name="m_chkInfinite" role="44">0</Property>
            <Property name="m_chkInfiniteEsy" role="44">0</Property>
            <Property name="m_cmbViewFormat" role="46">0</Property>
            <Property name="m_chkSeqNbrIncluded" role="44">2</Property>
            <Property name="m_edtDumpFile" role="42"></Property>
            <Property name="m_chkAdvanced" role="44">0</Property>
            <Property name="m_chk802154gMode" role="44">0</Property>
        </packetrx>
        <commandpanel>
            <Property name="m_chkInsertLength" role="44">0</Property>
            <Property name="m_edtTxFifo" role="42"></Property>
            <Property name="m_edtRxFifo" role="42"></Property>
            <Property name="m_cmbInstrInput" role="46">-1</Property>
        </commandpanel>
    </dcpanelconfiguration>
    

  • I measured on a CC1110 EM (with 26 MHz xtal) and didn't see any spurs. Also the frequency offset issue you have indicate something strange with your design or testing. 

  • I have also done that measurement - I have built a carbon copy of the CC1110 EM as it is tough/expensive to buy and I have not seen the spurs below are the measurement results for that board, at 0 and 10 dBm drive level. You can find the repo with Altium files and Gerbers for this other "CC1110 EM" board at this link. The major differences between this design and our own take which has the spurs are the use of a 4 layer board, the missing filter (only balun, no filter section) in our design and the addition of an SPDT RF switch (see here). But we are not driving the switch into compression (P1dB +33.5dBm) and the filter only helps with harmonics, right? These symmetric spurs would not be affected by a low pass harmonic filter, right?

    Given the Gerbers/Altium info I gave for the problem board in my original post, is there anything in the hardware which could be causing this issue? We are planning to manufacture a new board revision soon, so if we missed something that would be a great opportunity to deal with any changes which may be needed to resolve this.

    In house CC1110 EM, 0dBm drive:

    In house CC1110 EM, 10dBm drive:

  • I looked at the schematic linked to in the first post. It looks like you have added a FEM capable of +32 dBm but the plots show only +10 dBm. 

    To confirm: The measurements are done on the output of the FEM but with very low output power? If that is the case, are the spurs present at the output of the balun? 

  • Overlooked something else on the schematic: Could you bypass the LDO and try to supply using a lab supply? This is to check if you get some power noise into the RF signal. 

  • Thank you for this update. I realize now that I made a mistake in my first post and grabbed the Gitlab repo for the wrong product. I have three different custom boards featuring the CC1110, two of which have a FEM (Qorvo RFFM6406) with +32dBm output, and one does not. This latter board is what the measurements in my original post were done on - the CC1110 fed the spectrum analyzer via an on-board SPDT switch (pSemi PE4259) and no external attenuation. While the spurs also appear on the boards with the FEM, I am inclined to conclude that the problem is related to the CC1110 configuration, layout or support circuitry because the spurs are present regardless of the presence of the FEM. What are your thoughts? I am apologize for the confusion.

    This is the correct link for the custom board with the CC1110 only: https://gitlab.com/ORCASat/ttc/poc-hardware/-/tree/master/poc-dev-board

    Also, bypassing the LDO is certainly feasible, I will do some rework today and post a measurement while running off a lab supply. I don't think that will be the problem, however - I have evaluated the no load and full load ripple of the LDO supplying the CC1110 before and it was in the < 2 mV range for both of those cases. As well, the CC1110 is on its separate sub-power plane which is isolated from the main 3V3 LDO output with a ferrite bead.

  • I have bypassed the LDO and powered the board (https://gitlab.com/ORCASat/ttc/poc-hardware/-/tree/master/poc-dev-board) from a GW GPS-3030D supply. The spurs look practically unchanged. SA capture and config file below. I have used 100x linear trace averaging to make the SA capture more readable. 

    tx-no-ldo-cfg.xml
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE configuration SYSTEM "C:/Program Files (x86)/Texas Instruments/SmartRF Tools/SmartRF Studio 7/config/xml/configdata.dtd"[]>
    <dcpanelconfiguration>
        <Devicename>CC1110</Devicename>
        <Description>Saved configuration data</Description>
        <registersettings>
            <Register>
                <Name>DEVIATN</Name>
                <Value>0x17</Value>
            </Register>
            <Register>
                <Name>FOCCFG</Name>
                <Value>0x17</Value>
            </Register>
            <Register>
                <Name>FREND0</Name>
                <Value>0x11</Value>
            </Register>
            <Register>
                <Name>FREQ0</Name>
                <Value>0xaa</Value>
            </Register>
            <Register>
                <Name>FREQ1</Name>
                <Value>0x2a</Value>
            </Register>
            <Register>
                <Name>FREQ2</Name>
                <Value>0x10</Value>
            </Register>
            <Register>
                <Name>FSCAL0</Name>
                <Value>0x1f</Value>
            </Register>
            <Register>
                <Name>FSCAL1</Name>
                <Value>0x00</Value>
            </Register>
            <Register>
                <Name>FSCAL2</Name>
                <Value>0x2a</Value>
            </Register>
            <Register>
                <Name>FSCAL3</Name>
                <Value>0xe9</Value>
            </Register>
            <Register>
                <Name>FSCTRL1</Name>
                <Value>0x06</Value>
            </Register>
            <Register>
                <Name>IOCFG1</Name>
                <Value>0x5b</Value>
            </Register>
            <Register>
                <Name>IOCFG2</Name>
                <Value>0x5b</Value>
            </Register>
            <Register>
                <Name>LQI</Name>
                <Value>0x7f</Value>
            </Register>
            <Register>
                <Name>MCSM0</Name>
                <Value>0x18</Value>
            </Register>
            <Register>
                <Name>MDMCFG0</Name>
                <Value>0xe5</Value>
            </Register>
            <Register>
                <Name>MDMCFG2</Name>
                <Value>0x30</Value>
            </Register>
            <Register>
                <Name>MDMCFG3</Name>
                <Value>0x8b</Value>
            </Register>
            <Register>
                <Name>MDMCFG4</Name>
                <Value>0xf8</Value>
            </Register>
            <Register>
                <Name>PA_TABLE0</Name>
                <Value>0xc0</Value>
            </Register>
            <Register>
                <Name>PA_TABLE1</Name>
                <Value>0xc0</Value>
            </Register>
            <Register>
                <Name>PKTCTRL0</Name>
                <Value>0x22</Value>
            </Register>
            <Register>
                <Name>TEST0</Name>
                <Value>0x09</Value>
            </Register>
            <Register>
                <Name>TEST1</Name>
                <Value>0x31</Value>
            </Register>
            <Register>
                <Name>VERSION</Name>
                <Value>0x04</Value>
            </Register>
        </registersettings>
        <dcpanel>
            <Property role="44" name="m_chkRegView">2</Property>
            <Property role="44" name="m_chkCmdView">0</Property>
            <Property role="44" name="m_chkRfParameters">2</Property>
            <Property role="46" name="m_cmbUserMode">1</Property>
            <Property role="33" name="m_easyModeSettings">-1</Property>
            <Property role="33" name="m_typicalSettings">-1</Property>
            <Property role="37" name="m_testFuncPanel">0</Property>
        </dcpanel>
        <rfparameters>
            <Property role="46" name="Xtal Frequency">27.000000</Property>
        </rfparameters>
        <conttx>
            <Property role="45" name="m_rbtModulated">0</Property>
            <Property role="45" name="m_rbtUnmodulated">1</Property>
            <Property role="46" name="m_cmbDataFormat">-1</Property>
            <Property role="44" name="m_chkFreqSweep">0</Property>
            <Property role="44" name="m_chkChanSweep">0</Property>
        </conttx>
        <contrx>
            <Property role="46" name="m_cmbDataFormat">-1</Property>
            <Property role="44" name="m_chkAutoScroll">2</Property>
        </contrx>
        <packettx>
            <Property role="42" name="m_edtPayloadSize">20</Property>
            <Property role="42" name="m_edtPacketCount">100</Property>
            <Property role="42" name="m_edtPacketCountEsy">100</Property>
            <Property role="42" name="m_edtRandomPacketData">13 0d 89 0a 1c db ae 32 20 9a 50 ee 40 78 36 fd 12 49 32 f6 9e 7d 49 dc ad 4f 14 f2 </Property>
            <Property role="42" name="m_edtPacketData">91 c8 39 d9 93 42 8a e5 af 75 a3 c7 bf 5f d8 93 5a cc</Property>
            <Property role="42" name="m_edtAccessAddress"></Property>
            <Property role="42" name="m_edtDeviceAddress"></Property>
            <Property role="44" name="m_chkAddSeqNbr">2</Property>
            <Property role="44" name="m_chkInfinite">2</Property>
            <Property role="44" name="m_chkInfiniteEsy">2</Property>
            <Property role="45" name="m_rbtRandom">0</Property>
            <Property role="45" name="m_rbtText">0</Property>
            <Property role="45" name="m_rbtHex">1</Property>
            <Property role="44" name="m_chkAdvanced">2</Property>
            <Property role="46" name="m_cmbSyncWord">0</Property>
            <Property role="46" name="m_cmbPreambleCount">2</Property>
            <Property role="44" name="m_chkAddress">0</Property>
            <Property role="42" name="m_edtAddress"></Property>
            <Property role="46" name="m_cmbLengthConfig">2</Property>
            <Property role="42" name="m_edtLengthConfig">28</Property>
            <Property role="52" name="m_spnPktInterval">600</Property>
            <Property role="44" name="m_chkDefPktInterval">2</Property>
        </packettx>
        <packetrx>
            <Property role="42" name="m_edtPacketCount">100</Property>
            <Property role="42" name="m_edtPacketCountEsy">100</Property>
            <Property role="42" name="m_edtAccessAddress"></Property>
            <Property role="44" name="m_chkInfinite">0</Property>
            <Property role="44" name="m_chkInfiniteEsy">0</Property>
            <Property role="46" name="m_cmbViewFormat">0</Property>
            <Property role="44" name="m_chkSeqNbrIncluded">2</Property>
            <Property role="42" name="m_edtDumpFile"></Property>
            <Property role="44" name="m_chkAdvanced">0</Property>
            <Property role="44" name="m_chk802154gMode">0</Property>
        </packetrx>
        <commandpanel>
            <Property role="44" name="m_chkInsertLength">0</Property>
            <Property role="42" name="m_edtTxFifo"></Property>
            <Property role="42" name="m_edtRxFifo"></Property>
            <Property role="46" name="m_cmbInstrInput">-1</Property>
        </commandpanel>
    </dcpanelconfiguration>
    

  • Would you be able to test with a different clock source than the TCXO? If you have a signal generator with a sine wave output (use a serial cap), test with this to see if that change the output spectrum. 

  • Yes certainly I have access to a few different signal generators. Will do tomorrow morning. Could you please elaborate a little bit more on what I need to do? I assume I would use a 27 MHz sine wave fed into the same pin on the CC1110 as the TCXO now? But with what peak to peak voltage? And why is the series capacitor needed and what value/type would be suitable? 

  • Try 0.6 Vpp, try 10 nF (ceramic like in used in the CC1110 design), test with both 26 MHz and 27 MHz on the same pin at the TCXO is used today. 

  • I have done the measurements. The captures are below. I have used a Stanford Research System DS345 synthesized function generator to generate a 0.6Vpp 26 or 27 MHz sine wave at its 50 Ohm output, which I have connected to the series cap (AVX 06031C103K4Z2A). The captures are below, as well as an image of the frequency reference to board connection. 

    The problematic spurs have basically remained the same, but some other lesser spurs appeared, which changed frequency depending on the value of the frequency reference. What do you think? I am looking forward to hearing your insights.

    Signal generator, 27 MHz:

    Signal generator, 26 MHz:

    Test setup - blue wire is frequency reference soldered to cap:

    SmartRF setup - reference value was changed manually:

    6278.tx-no-ldo-cfg.xml
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE configuration SYSTEM "C:/Program Files (x86)/Texas Instruments/SmartRF Tools/SmartRF Studio 7/config/xml/configdata.dtd"[]>
    <dcpanelconfiguration>
        <Devicename>CC1110</Devicename>
        <Description>Saved configuration data</Description>
        <registersettings>
            <Register>
                <Name>DEVIATN</Name>
                <Value>0x17</Value>
            </Register>
            <Register>
                <Name>FOCCFG</Name>
                <Value>0x17</Value>
            </Register>
            <Register>
                <Name>FREND0</Name>
                <Value>0x11</Value>
            </Register>
            <Register>
                <Name>FREQ0</Name>
                <Value>0xaa</Value>
            </Register>
            <Register>
                <Name>FREQ1</Name>
                <Value>0x2a</Value>
            </Register>
            <Register>
                <Name>FREQ2</Name>
                <Value>0x10</Value>
            </Register>
            <Register>
                <Name>FSCAL0</Name>
                <Value>0x1f</Value>
            </Register>
            <Register>
                <Name>FSCAL1</Name>
                <Value>0x00</Value>
            </Register>
            <Register>
                <Name>FSCAL2</Name>
                <Value>0x2a</Value>
            </Register>
            <Register>
                <Name>FSCAL3</Name>
                <Value>0xe9</Value>
            </Register>
            <Register>
                <Name>FSCTRL1</Name>
                <Value>0x06</Value>
            </Register>
            <Register>
                <Name>IOCFG1</Name>
                <Value>0x5b</Value>
            </Register>
            <Register>
                <Name>IOCFG2</Name>
                <Value>0x5b</Value>
            </Register>
            <Register>
                <Name>LQI</Name>
                <Value>0x7f</Value>
            </Register>
            <Register>
                <Name>MCSM0</Name>
                <Value>0x18</Value>
            </Register>
            <Register>
                <Name>MDMCFG0</Name>
                <Value>0xe5</Value>
            </Register>
            <Register>
                <Name>MDMCFG2</Name>
                <Value>0x30</Value>
            </Register>
            <Register>
                <Name>MDMCFG3</Name>
                <Value>0x8b</Value>
            </Register>
            <Register>
                <Name>MDMCFG4</Name>
                <Value>0xf8</Value>
            </Register>
            <Register>
                <Name>PA_TABLE0</Name>
                <Value>0xc0</Value>
            </Register>
            <Register>
                <Name>PA_TABLE1</Name>
                <Value>0xc0</Value>
            </Register>
            <Register>
                <Name>PKTCTRL0</Name>
                <Value>0x22</Value>
            </Register>
            <Register>
                <Name>TEST0</Name>
                <Value>0x09</Value>
            </Register>
            <Register>
                <Name>TEST1</Name>
                <Value>0x31</Value>
            </Register>
            <Register>
                <Name>VERSION</Name>
                <Value>0x04</Value>
            </Register>
        </registersettings>
        <dcpanel>
            <Property role="44" name="m_chkRegView">2</Property>
            <Property role="44" name="m_chkCmdView">0</Property>
            <Property role="44" name="m_chkRfParameters">2</Property>
            <Property role="46" name="m_cmbUserMode">1</Property>
            <Property role="33" name="m_easyModeSettings">-1</Property>
            <Property role="33" name="m_typicalSettings">-1</Property>
            <Property role="37" name="m_testFuncPanel">0</Property>
        </dcpanel>
        <rfparameters>
            <Property role="46" name="Xtal Frequency">27.000000</Property>
        </rfparameters>
        <conttx>
            <Property role="45" name="m_rbtModulated">0</Property>
            <Property role="45" name="m_rbtUnmodulated">1</Property>
            <Property role="46" name="m_cmbDataFormat">-1</Property>
            <Property role="44" name="m_chkFreqSweep">0</Property>
            <Property role="44" name="m_chkChanSweep">0</Property>
        </conttx>
        <contrx>
            <Property role="46" name="m_cmbDataFormat">-1</Property>
            <Property role="44" name="m_chkAutoScroll">2</Property>
        </contrx>
        <packettx>
            <Property role="42" name="m_edtPayloadSize">20</Property>
            <Property role="42" name="m_edtPacketCount">100</Property>
            <Property role="42" name="m_edtPacketCountEsy">100</Property>
            <Property role="42" name="m_edtRandomPacketData">13 0d 89 0a 1c db ae 32 20 9a 50 ee 40 78 36 fd 12 49 32 f6 9e 7d 49 dc ad 4f 14 f2 </Property>
            <Property role="42" name="m_edtPacketData">91 c8 39 d9 93 42 8a e5 af 75 a3 c7 bf 5f d8 93 5a cc</Property>
            <Property role="42" name="m_edtAccessAddress"></Property>
            <Property role="42" name="m_edtDeviceAddress"></Property>
            <Property role="44" name="m_chkAddSeqNbr">2</Property>
            <Property role="44" name="m_chkInfinite">2</Property>
            <Property role="44" name="m_chkInfiniteEsy">2</Property>
            <Property role="45" name="m_rbtRandom">0</Property>
            <Property role="45" name="m_rbtText">0</Property>
            <Property role="45" name="m_rbtHex">1</Property>
            <Property role="44" name="m_chkAdvanced">2</Property>
            <Property role="46" name="m_cmbSyncWord">0</Property>
            <Property role="46" name="m_cmbPreambleCount">2</Property>
            <Property role="44" name="m_chkAddress">0</Property>
            <Property role="42" name="m_edtAddress"></Property>
            <Property role="46" name="m_cmbLengthConfig">2</Property>
            <Property role="42" name="m_edtLengthConfig">28</Property>
            <Property role="52" name="m_spnPktInterval">600</Property>
            <Property role="44" name="m_chkDefPktInterval">2</Property>
        </packettx>
        <packetrx>
            <Property role="42" name="m_edtPacketCount">100</Property>
            <Property role="42" name="m_edtPacketCountEsy">100</Property>
            <Property role="42" name="m_edtAccessAddress"></Property>
            <Property role="44" name="m_chkInfinite">0</Property>
            <Property role="44" name="m_chkInfiniteEsy">0</Property>
            <Property role="46" name="m_cmbViewFormat">0</Property>
            <Property role="44" name="m_chkSeqNbrIncluded">2</Property>
            <Property role="42" name="m_edtDumpFile"></Property>
            <Property role="44" name="m_chkAdvanced">0</Property>
            <Property role="44" name="m_chk802154gMode">0</Property>
        </packetrx>
        <commandpanel>
            <Property role="44" name="m_chkInsertLength">0</Property>
            <Property role="42" name="m_edtTxFifo"></Property>
            <Property role="42" name="m_edtRxFifo"></Property>
            <Property role="46" name="m_cmbInstrInput">-1</Property>
        </commandpanel>
    </dcpanelconfiguration>
    

  • One more thing - when I did this measurement, I have just connected the 50Ohm output of the signal generator the the board via the cap. I have not done any impedance matching/adjustments to check that the signal across the XOSC_Q1 pin (unknown impedance) is 0.6V. Is that a problem?

  • Please do this measurement with 0.6 Vpp on Q1. When I have done similar measurements I have adjusted the amplitude on the signal generator until I have the wanted amplitude.

    Spurs like this most often come from the reference clock.

  • @TER I have re-done the measurements while measuring the voltage at the CC1110 XOSC_Q1 and ensuring that it is 0.6V. It seems to me that some minor spurs appear and move around, but the major ones stay the same. Any insights? I appreciate your time and effort helping me with this.

    Reference signal 26 MHz:

    Reference signal 27 MHz:

  • I have done one additional measurement to try and gain further insights into this. I have used the 26 MHz Epson TSX-3225 26.0000MF10Z-B6 crystal loaded by 2x 15 pF ceramic caps on one of my in-house made copies of the CC1110433EMK (the one I referenced above which does not have the spurs) to feed the XOSC_1 and XOSC_2 pins on the problem board via a pair of length matched 30AWG wire (~2"). Below is the spectrum. Spurs are still present, as well as some additional ones have shown up, based on which I am inclined to conclude that the issue is not with the TXCO. Would you agree?

    Spectrum:

    Setup:

  • I would not trust the last measurement you did. The traces to the xtal are sensitive to noise and you add a fairly large L with the long wires.

    But it could look like that the spurs may come from somewhere else. If the spurs are not caused by something on the reference clock it's likely that noise on power cause this. Isolate the CC1110 on the board ensuring that nothing else on the board could create noise, also look into the decoupling and see if the placement and values make sense. 

  • Thank you!

    I am pretty certain it is not the  power source/LDOs, as the problem has not improved when I bypassed them. 

    Looking at the layout, is there anything you would improve upon? I will be making a new PCB revision soon, that would be a good opportunity to deal with this.

    Some of my decoupling caps on the CC1110 are 0603 instead of the 0402 is that an issue?

    Here is the link to the Altium repo and the Gerbers again:

    https://gitlab.com/ORCASat/ttc/poc-hardware/-/tree/master/poc-gs-board

    3480.poc-gs-bard-r1-gerbers.zip

    Thank you very much for your insights so far!

  • It looks like you have linked to the wrong design (again) since the design you link to is the one with FEM. This is something that I can't debug remotely. Close in spurs can only come from the clock source and through power. 

  • @TER I apologize for the confusion, here is the correct repo: https://gitlab.com/ORCASat/ttc/poc-hardware/-/tree/master/poc-dev-board

    If you could take a look and give me any suggestions on how to improve on the clock and power arrangements, I would really appreciate it.

    I understand and appreciate that this is not something you can debug remotely, but I really appreciate your advice and insights nontheless.

  • I can't see something that clearly require a change. But you are using a balun that is not recommended (see https://www.ti.com/lit/pdf/swra168 and the ref design), different physical cap size which changes the behavior of the decoupling some and TCXO which we have no experience with on this device. 

  • @TER Thank you for your feedback, what you said makes sense and it will help me resolve this issue with a new PCB layout. I have a few questions regarding what you wrote in your last post and what I have read in the CC1110 datasheet (https://www.ti.com/lit/gpn/cc1110-cc1111) as well as DN017 (https://www.ti.com/lit/pdf/swra168) though. Could you please help me answer these questions?

    1. The reference design what you provide (https://www.ti.com/lit/zip/swrr047) is for a 2-layer FR4 stackup, and in DN017 Section 3.1 it is quoted that the ideal distance from the RF layer to ground is 0.8mm-1mm. Our products are using a 4-layer stackup from OSH Park (https://docs.oshpark.com/services/four-layer/). The CC1110 is on the top layer, and the ground reference is a layer below, with the distance between them being 0.2021mm only. When we copied the reference design, we have adjusted the width of all of the traces after DC block (C235) to give 50 Ohm impedance for our stackup, and routed the filterbalun before the DC block with 5mil traces (arbitrary choice). Is this fine or do we need to do anything else to account for our stackup being different than in the reference design? What do you recommend?
    2. In your post you write that we are using a balun what is not recommended. On Page 9 Figures 9-11 of DN017 there are indeed three different versions of the filterbalun, however, in the newest 433 MHz reference design published by TI (Rev. C) as well as the latest CC1110 datasheet (Rev. H) the oldest filterbalun design from Figrue 11 in DN017 was suggested. Which one are we to use given these conflicting documents? If it is the newest design from DN017, how are we supposed to use it without layout information being available for it? Maybe I am missing something? Do you have more information on how to lay out this new filterbalun version?
    3. Can you give me a list of crystals and TCXOs you have experience with for the CC1110? Unfortunately the one in the reference design isn't an option for us, as we are required by ITU regulations to have an overall frequency accuracy of better than 20 ppm over temperature.

    Thanks for your time! Looking forward to hearing your insights.

  • @TER Just following up on my questions above, what are your thoughts?