Other Parts Discussed in Thread: WMBUS, CC1310, SIMPLICITI
Some Background:
I have 4x CC1310 Launhpad XL dev kits, i am trying to Evaluate the WMBUS capability in modes C1/C2, I installed the "wmbus_cc13x0_rtos_1_2_0.exe" which i am usng with the "simplelink_cc13x0_sdk_1_40_00_10.exe" and that seems to work at 868.95MHz, I also have a patch "swra522d.zip" to use with the "rfPacketRx" and "rfPacketTx" projects and that seems to work at 868MHz, I slightly modified it to work at 923 (WMBus in Australia) and it seemed to work as well, but i can't find how to add metering data in the WMBus API? anyone knows how to add metering data in the WMBus API?.
Now, to be able to test this works for us I have a meter and a USB receiver for WMBUS that works at 433MHz, so I need to modify the radio settings, to get the radio settings I tried to use SmartRF Studio, until i got to the centre freq which was 434.45MHz for this modules, so i know the radio/antenna are ok at this frequency/distance, but, SmartRF only has 2-GFSK, so i tried changing only the sensitivity and the frequency on the WMBUS project radio settings, leaving what I thought were the modulation settings intact, see below under the questions the settings I used, but what I did doesn't work, i don't get anything on the USART RX and it doesn't transmit at all on the RF (it did show some data on the serial TX interface but nothing on serial RX), I confirmed that the RF doesn't work with a spectrum analyser.
I read here (http://e2e.ti.com/support/wireless_connectivity/proprietary_sub_1_ghz_simpliciti/f/156/p/425845/1522270) that 1310 does somehow support 4-GFSK by changing some registers, but I cannot find even the address of them on the datasheet.
Questions I have:
-How do i enable 4-GFSK 100kbaud on the CC1310?.
-How do i test/check 4-GFSK 100kbaud on SmartRF Studio? is there an XML for this?
-How can i test/check WMbus with SmartRF? is the an XML for this?
-Alternatively is there a WMBUS example project for the CC1310 that supports 433MHz? (which i guess is WMBUS-F)
-How/where in the API do I log/send metering data ? could not find this in the API.
-How do I send serial/uart debug messages in the APL application? TI-RTOS UART API works once then crashes, looks like the WMBus uses the UART, but i cannot find the UART API calls either., i do this:
UART_init(); //Without this and sf_uart_init there is no uart...
sf_uart_init();
sf_uart_write("Start\r\n", 1); // this is sent, then the APL crashes.
-I also tried enabling logging (via -define=LOG_ENABLE) for debugging, but it's unresolved ( sf_log_init AND sf_log_write), i am guessing is not included on the lib file?
Alternatively who is the best person (TI rep) to contact here in Melbourne Australia? tried contacting derrick.kickel@ti.com to no success.
I also tried contacting Stackforce for support, they say that support for TI WMBus stack is only given by TI.
Thanks and Best Regards.
Rob.
//********************************************************************************* // Generated by SmartRF Studio version 2.5.0 (build #27) // Tested for SimpleLink SDK version: CC13x0 SDK 1.0.xx // Device: CC1310 Rev. 2.1 // //********************************************************************************* //********************************************************************************* // Parameter summary // Address: aa-bb // Frequency: 434.45000 MHz // Data Format: Serial mode disable // Deviation: 50.000 kHz // Packet Length Config: Variable // Max Packet Length: 128 // Packet Length: 30 // RX Filter BW: 196 kHz // Symbol Rate: 100.00038 kBaud // Sync Word Length: 16 Bits // TX Power: 14 dBm (requires define CCFG_FORCE_VDDR_HH = 1 in ccfg.c, see CC13xx/CC26xx Technical Reference Manual) // Whitening: No whitening #include <driverlib/rf_mailbox.h> #include <driverlib/rf_common_cmd.h> #include <driverlib/rf_prop_cmd.h> #include "sf_cc13xx_434_45.h" uint32_t txShapeTMode[] = { 0x00000000, 0x00000000, 0x00000000, 0x4B110200, 0xF2F0E1A6, 0xF2F2F2F2 }; uint32_t txShapeCMode[] = { 0x00000000, 0x00000000, 0x00000000, 0x440F0200, 0xD9D8CA96, 0xD9D9D9D9 }; /* Custom data strucure(s) */ /* Overrides for CMD_PROP_RADIO_DIV_SETUP */ uint32_t RF_434_45_pOverridesT[] = { //Run the MCE and RFE patches MCE_RFE_OVERRIDE(1, 0, 0, 1, 0, 0),//MCE_RFE_OVERRIDE(0, 4, 0, 1, 0, 0), // override_synth_prop_430_510_div10.xml // Synth: Set recommended RTRIM to 7 HW_REG_OVERRIDE(0x4038, 0x0037), // Synth: Set Fref to 4 MHz (uint32_t) 0x000684A3, // Synth: Configure fine calibration setting HW_REG_OVERRIDE(0x4020, 0x7F00), // Synth: Configure fine calibration setting HW_REG_OVERRIDE(0x4064, 0x0040), // Synth: Configure fine calibration setting (uint32_t) 0xB1070503, // Synth: Configure fine calibration setting (uint32_t) 0x05330523, // Synth: Set loop bandwidth after lock to 20 kHz (uint32_t) 0x0A480583, // Synth: Set loop bandwidth after lock to 20 kHz (uint32_t) 0x7AB80603, // Synth: Configure VCO LDO (in ADI1, set VCOLDOCFG=0x9F to use voltage input reference) ADI_REG_OVERRIDE(1, 4, 0x9F), // Synth: Configure synth LDO (in ADI1, set SLDOCTL0.COMP_CAP=1) ADI_HALFREG_OVERRIDE(1, 7, 0x4, 0x4), // Synth: Use 24 MHz XOSC as synth clock, enable extra PLL filtering (uint32_t) 0x02010403, // Synth: Configure extra PLL filtering (uint32_t) 0x00108463, // Synth: Increase synth programming timeout (0x04B0 RAT ticks = 300 us) (uint32_t) 0x04B00243, // override_synth_disable_bias_div10.xml // Synth: Set divider bias to disabled HW32_ARRAY_OVERRIDE(0x405C, 1), // Synth: Set divider bias to disabled (specific for loDivider=10) (uint32_t) 0x18000280, // override_phy_rx_aaf_bw_0xd.xml // Rx: Set anti-aliasing filter bandwidth to 0xD (in ADI0, set IFAMPCTL3[7:4]=0xD) ADI_HALFREG_OVERRIDE(0, 61, 0xF, 0xD), // override_phy_gfsk_rx.xml // Rx: Set LNA bias current trim offset to 3 (uint32_t) 0x00038883, // Rx: Freeze RSSI on sync found event HW_REG_OVERRIDE(0x6084, 0x35F1), // override_phy_gfsk_pa_ramp_agc_reflevel_0x2e.xml // Tx: Configure PA ramping setting and set AGC reference level to 0x2E HW_REG_OVERRIDE(0x6088, 0x082E), // Tx: Configure PA ramping setting and set AGC settle wait = (0x7+1)*2 = 16 samples HW_REG_OVERRIDE(0x608C, 0x0407), // override_phy_rx_rssi_offset_5db.xml // Rx: Set RSSI offset to adjust reported RSSI by +5 dB (uint32_t) 0x00FB88A3, // TX power override // Tx: Set PA trim to max (in ADI0, set PACTL0=0xF8) ADI_REG_OVERRIDE(0, 12, 0xF8), // AGC winsize 2 samples HW_REG_OVERRIDE(0x6064, 0x1101), // CS threshold to �107 dBm HW_REG_OVERRIDE(0x6090, 0xA095), // Let the patch control the correlator setting (uint32_t) 0x00048103, // Clear state in internal radio register due to frequency change HW_REG_OVERRIDE(0x51F8, 0x0000), HW_REG_OVERRIDE(0x52B4, 0x0000), // Set divider bias to disabled HW32_ARRAY_OVERRIDE(0x405C, 1), (uint32_t) 0x18000200, // TX shape in T-mode 0xC0040031, (uint32_t) &txShapeTMode[0], // TX shape in C-mode //0xC0040031, //(uint32_t)&txShapeCMode[0], (uint32_t) 0xFFFFFFFF,}; /* Overrides for CMD_PROP_RADIO_DIV_SETUP */ uint32_t RF_434_45_pOverridesC[] = { //Run the MCE and RFE patches MCE_RFE_OVERRIDE(1, 0, 0, 1, 0, 0),//MCE_RFE_OVERRIDE(0, 4, 0, 1, 0, 0), // override_synth_prop_430_510_div10.xml // Synth: Set recommended RTRIM to 7 HW_REG_OVERRIDE(0x4038, 0x0037), // Synth: Set Fref to 4 MHz (uint32_t) 0x000684A3, // Synth: Configure fine calibration setting HW_REG_OVERRIDE(0x4020, 0x7F00), // Synth: Configure fine calibration setting HW_REG_OVERRIDE(0x4064, 0x0040), // Synth: Configure fine calibration setting (uint32_t) 0xB1070503, // Synth: Configure fine calibration setting (uint32_t) 0x05330523, // Synth: Set loop bandwidth after lock to 20 kHz (uint32_t) 0x0A480583, // Synth: Set loop bandwidth after lock to 20 kHz (uint32_t) 0x7AB80603, // Synth: Configure VCO LDO (in ADI1, set VCOLDOCFG=0x9F to use voltage input reference) ADI_REG_OVERRIDE(1, 4, 0x9F), // Synth: Configure synth LDO (in ADI1, set SLDOCTL0.COMP_CAP=1) ADI_HALFREG_OVERRIDE(1, 7, 0x4, 0x4), // Synth: Use 24 MHz XOSC as synth clock, enable extra PLL filtering (uint32_t) 0x02010403, // Synth: Configure extra PLL filtering (uint32_t) 0x00108463, // Synth: Increase synth programming timeout (0x04B0 RAT ticks = 300 us) (uint32_t) 0x04B00243, // override_synth_disable_bias_div10.xml // Synth: Set divider bias to disabled HW32_ARRAY_OVERRIDE(0x405C, 1), // Synth: Set divider bias to disabled (specific for loDivider=10) (uint32_t) 0x18000280, // override_phy_rx_aaf_bw_0xd.xml // Rx: Set anti-aliasing filter bandwidth to 0xD (in ADI0, set IFAMPCTL3[7:4]=0xD) ADI_HALFREG_OVERRIDE(0, 61, 0xF, 0xD), // override_phy_gfsk_rx.xml // Rx: Set LNA bias current trim offset to 3 (uint32_t) 0x00038883, // Rx: Freeze RSSI on sync found event HW_REG_OVERRIDE(0x6084, 0x35F1), // override_phy_gfsk_pa_ramp_agc_reflevel_0x2e.xml // Tx: Configure PA ramping setting and set AGC reference level to 0x2E HW_REG_OVERRIDE(0x6088, 0x082E), // Tx: Configure PA ramping setting and set AGC settle wait = (0x7+1)*2 = 16 samples HW_REG_OVERRIDE(0x608C, 0x0407), // override_phy_rx_rssi_offset_5db.xml // Rx: Set RSSI offset to adjust reported RSSI by +5 dB (uint32_t) 0x00FB88A3, // TX power override // Tx: Set PA trim to max (in ADI0, set PACTL0=0xF8) ADI_REG_OVERRIDE(0, 12, 0xF8), // AGC winsize 2 samples HW_REG_OVERRIDE(0x6064, 0x1101), // CS threshold to �107 dBm HW_REG_OVERRIDE(0x6090, 0xA095), // Let the patch control the correlator setting (uint32_t) 0x00048103, // Clear state in internal radio register due to frequency change HW_REG_OVERRIDE(0x51F8, 0x0000), HW_REG_OVERRIDE(0x52B4, 0x4000), // Set divider bias to disabled HW32_ARRAY_OVERRIDE(0x405C, 1), (uint32_t) 0x18000200, // TX shape in T-mode //0xC0040031, //(uint32_t)&txShapeTMode[0], // TX shape in C-mode 0xC0040031, (uint32_t) &txShapeCMode[0], (uint32_t) 0xFFFFFFFF,}; /* CMD_PROP_RADIO_DIV_SETUP */ rfc_CMD_PROP_RADIO_DIV_SETUP_t RF_434_45_cmdPropRadioDivSetupT = {.commandNo = 0x3807, .status = 0x0000, .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx .startTime = 0x00000000, .startTrigger.triggerType = 0x0, .startTrigger.bEnaCmd = 0x0, .startTrigger.triggerNo = 0x0, .startTrigger.pastTrig = 0x0, .condition.rule = 0x1, .condition.nSkip = 0x0, .modulation.modType = 0x0, .modulation.deviation = 0xC8,// T-Mode: 0xC8, C-Mode: 0xB4 .symbolRate.preScale = 0xC, .symbolRate.rateWord = 0xCCCD, .rxBw = 0x27, .preamConf.nPreamBytes = 0x4, .preamConf.preamMode = 0x0, .formatConf.nSwBits = 0x10, .formatConf.bBitReversal = 0x0, .formatConf.bMsbFirst = 0x1, .formatConf.fecMode = 0x0, .formatConf.whitenMode = 0x0, .config.frontEndMode = 0x0, .config.biasMode = 0x1, .config.analogCfgMode = 0x0, .config.bNoFsPowerUp = 0x0, .pRegOverride = RF_434_45_pOverridesT, .txPower = 0xA73F, .centerFreq = 0x01B2,//433MHz .intFreq = 0x8000, .loDivider = 0x0A,}; rfc_CMD_PROP_RADIO_DIV_SETUP_t RF_434_45_cmdPropRadioDivSetupC = {.commandNo = 0x3807, .status = 0x0000, .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx .startTime = 0x00000000, .startTrigger.triggerType = 0x0, .startTrigger.bEnaCmd = 0x0, .startTrigger.triggerNo = 0x0, .startTrigger.pastTrig = 0x0, .condition.rule = 0x1, .condition.nSkip = 0x0, .modulation.modType = 0x0, .modulation.deviation = 0xB4,// T-Mode: 0xC8, C-Mode: 0xB4. /* According to swra522d we have to change the deviation setting for C-meters */ .symbolRate.preScale = 0xC, .symbolRate.rateWord = 0xCCCD, .rxBw = 0x27, .preamConf.nPreamBytes = 0x4, .preamConf.preamMode = 0x0, .formatConf.nSwBits = 0x10, .formatConf.bBitReversal = 0x0, .formatConf.bMsbFirst = 0x1, .formatConf.fecMode = 0x0, .formatConf.whitenMode = 0x0, .config.frontEndMode = 0x0, .config.biasMode = 0x1, .config.analogCfgMode = 0x0, .config.bNoFsPowerUp = 0x0, .pRegOverride = RF_434_45_pOverridesC, .txPower = 0xA73F, .centerFreq = 0x01B2,//433MHz .intFreq = 0x8000, .loDivider = 0x0A,}; /* CMD_FS */ rfc_CMD_FS_t RF_434_45_cmdFs = { .commandNo = 0x0803, .status = 0x0000, .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx .startTime = 0x00000000, .startTrigger.triggerType = 0x0, .startTrigger.bEnaCmd = 0x0, .startTrigger.triggerNo = 0x0, .startTrigger.pastTrig = 0x0, .condition.rule = 0x1, .condition.nSkip = 0x0, .frequency = 0x01B2,//434MHz .fractFreq = 0x7334, .synthConf.bTxMode = 0x0, .synthConf.refFreq = 0x0, .__dummy0 = 0x00, .__dummy1 = 0x00, .__dummy2 = 0x00, .__dummy3 = 0x0000,}; // CMD_PROP_TX_ADV rfc_CMD_PROP_TX_ADV_t RF_434_45_cmdPropTxAdv = {.commandNo = 0x3803, .status = 0x0000, .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx .startTime = 0x00000000, .startTrigger.triggerType = 0x0, .startTrigger.bEnaCmd = 0x0, .startTrigger.triggerNo = 0x0, .startTrigger.pastTrig = 0x0, .condition.rule = 0x1, .condition.nSkip = 0x0, .pktConf.bFsOff = 0x0, .pktConf.bUseCrc = 0x0, .pktConf.bCrcIncSw = 0x0, .pktConf.bCrcIncHdr = 0x0, .numHdrBits = 0x00, .pktLen = 0x0000, .startConf.bExtTxTrig = 0x0, .startConf.inputMode = 0x0, .startConf.source = 0x0, .preTrigger.triggerType = 0x0, .preTrigger.bEnaCmd = 0x0, .preTrigger.triggerNo = 0x0, .preTrigger.pastTrig = 0x0, .preTime = 0x00000000, .syncWord = 0x0000543D, .pPkt = 0, /*INSERT APPLICABLE POINTER: (uint8_t*)&xxx */ }; // CMD_PROP_RX_ADV rfc_CMD_PROP_RX_ADV_t RF_434_45_cmdPropRxAdv = { .commandNo = 0x3804, .status = 0x0000, .pNextOp = 0, /*INSERT APPLICABLE POINTER: (uint8_t*)&xxx */ .startTime = 0x00000000, .startTrigger.triggerType = 0x0, .startTrigger.bEnaCmd = 0x0, .startTrigger.triggerNo = 0x0, .startTrigger.pastTrig = 0x0, .condition.rule = 0x1, .condition.nSkip = 0x0, .pktConf.bFsOff = 0x0, .pktConf.bRepeatOk = 0x0, .pktConf.bRepeatNok = 0x0, .pktConf.bUseCrc = 0x0, .pktConf.bCrcIncSw = 0x0, .pktConf.bCrcIncHdr = 0x0, .pktConf.endType = 0x0, .pktConf.filterOp = 0x0, .rxConf.bAutoFlushIgnored = 0x0, .rxConf.bAutoFlushCrcErr = 0x0, .rxConf.bIncludeHdr = 0x0, .rxConf.bIncludeCrc = 0x0, .rxConf.bAppendRssi = 0x0, .rxConf.bAppendTimestamp = 0x0, .rxConf.bAppendStatus = 0x0, .syncWord0 = 0x0000543D, .syncWord1 = 0x00000000, .maxPktLen = 0x0000, .hdrConf.numHdrBits = 0x0, .hdrConf.lenPos = 0x0, .hdrConf.numLenBits = 0x0, .addrConf.addrType = 0x0, .addrConf.addrSize = 0x0, .addrConf.addrPos = 0x0, .addrConf.numAddr = 0x0, .lenOffset = 0x00, .endTrigger.triggerType = 0x0, .endTrigger.bEnaCmd = 0x0, .endTrigger.triggerNo = 0x0, .endTrigger.pastTrig = 0x0, .endTime = 0x00000000, .pAddr = 0, /*INSERT APPLICABLE POINTER: (uint8_t*)&xxx */ .pQueue = 0, /*INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx */ .pOutput = 0, /*INSERT APPLICABLE POINTER: (uint8_t*)&xxx */ };