cc1200: added nullrdc timing parameters to rf configuration file
This commit is contained in:
parent
584b6ae4ca
commit
557091b710
|
@ -1,3 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2015, Weptech elektronik GmbH Germany
|
||||||
|
* http://www.weptech.de
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the name of the copyright holder nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* This file is part of the Contiki operating system.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "cc1200-rf-cfg.h"
|
#include "cc1200-rf-cfg.h"
|
||||||
#include "cc1200-const.h"
|
#include "cc1200-const.h"
|
||||||
|
|
||||||
|
@ -6,9 +40,9 @@
|
||||||
*
|
*
|
||||||
* 802.15.4g
|
* 802.15.4g
|
||||||
* =========
|
* =========
|
||||||
* Table 86f: Frequency band identifier 4 (863-870 MHz)
|
* Table 68f: Frequency band identifier 4 (863-870 MHz)
|
||||||
* Table 86g: Modulation scheme identifier 0 (Filtered FSK)
|
* Table 68g: Modulation scheme identifier 0 (Filtered FSK)
|
||||||
* Table 86h: Mode #1 (50kbps)
|
* Table 68h: Mode #1 (50kbps)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Base frequency in kHz */
|
/* Base frequency in kHz */
|
||||||
|
@ -23,7 +57,36 @@
|
||||||
#define RF_CFG_MAX_TXPOWER CC1200_CONST_TX_POWER_MAX
|
#define RF_CFG_MAX_TXPOWER CC1200_CONST_TX_POWER_MAX
|
||||||
/* The carrier sense level used for CCA in dBm */
|
/* The carrier sense level used for CCA in dBm */
|
||||||
#define RF_CFG_CCA_THRESHOLD (-91)
|
#define RF_CFG_CCA_THRESHOLD (-91)
|
||||||
|
/*
|
||||||
|
* ACK_WAIT_TIME is the time between sending a packet and detecting
|
||||||
|
* an arbitrary incoming packet (hopefully an ACK).
|
||||||
|
* An incoming packet is detected using either
|
||||||
|
* - receiving_packet()
|
||||||
|
* - pending_packet()
|
||||||
|
* - channel_clear()
|
||||||
|
* Let's assume we use receiving_packet() as the latest (reliable)
|
||||||
|
* indication for an incoming packet. It returns 1 as soon as the sync word
|
||||||
|
* is detected. We can then estimate this time (assuming an 802.15.4-2011 frame)
|
||||||
|
* by:
|
||||||
|
* - 1ms RX/TX turnarround (also FIFO read-out -> depends on packet length!)
|
||||||
|
* + length of preamble (4 bytes)
|
||||||
|
* + length of sync word (2 bytes)
|
||||||
|
* -> let's use 2.5 ms for 50kbps
|
||||||
|
*/
|
||||||
|
#define NULLRDC_CONF_ACK_WAIT_TIME RTIMER_SECOND/400
|
||||||
|
/*
|
||||||
|
* NULLRDC_AFTER_ACK_DETECTED_WAIT_TIME is the time after an incoming
|
||||||
|
* paket is detected (using the means described above) and the ACK is
|
||||||
|
* available for read-out by the MAC layer (pending_packet(), read()).
|
||||||
|
* If we assume that channel_clear() indicated the incoming packet, the maximum
|
||||||
|
* time it takes for the ACK to be available calulates as following:
|
||||||
|
* - length of preamble (4 bytes)
|
||||||
|
* + length of ACK (3 bytes)
|
||||||
|
* + length of CRC (2 bytes)
|
||||||
|
* - 1ms safety margin
|
||||||
|
* -> let's use 2.5 ms for 50kbps
|
||||||
|
*/
|
||||||
|
#define NULLRDC_CONF_AFTER_ACK_DETECTED_WAIT_TIME RTIMER_SECOND/400
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static const char rf_cfg_descriptor[] = "802.15.4g 863-870MHz MR-FSK mode #1";
|
static const char rf_cfg_descriptor[] = "802.15.4g 863-870MHz MR-FSK mode #1";
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
|
@ -215,22 +215,5 @@
|
||||||
#define CC1200_SNIFFER 0
|
#define CC1200_SNIFFER 0
|
||||||
#endif
|
#endif
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/*
|
|
||||||
* Wether to use USB for SNIFF mode or not
|
|
||||||
*/
|
|
||||||
#ifdef CC1200_CONF_SNIFFER_USB
|
|
||||||
#define CC1200_SNIFFER_USB CC1200_CONF_SNIFFER_USB
|
|
||||||
#else
|
|
||||||
#define CC1200_SNIFFER_USB 0
|
|
||||||
#endif
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
/*
|
|
||||||
* Which UART to use for the Sniffer unless USB is used
|
|
||||||
*/
|
|
||||||
#ifdef CC1200_CONF_SNIFFER_UART
|
|
||||||
#define CC1200_SNIFFER_UART CC1200_CONF_SNIFFER_UART
|
|
||||||
#else
|
|
||||||
#define CC1200_SNIFFER_UART 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* CC1200_H_ */
|
#endif /* CC1200_H_ */
|
||||||
|
|
|
@ -535,9 +535,11 @@ calculate_freq(uint8_t channel);
|
||||||
/* Update rf channel if possible, else postpone it (-> pollhandler). */
|
/* Update rf channel if possible, else postpone it (-> pollhandler). */
|
||||||
static int
|
static int
|
||||||
set_channel(uint8_t channel);
|
set_channel(uint8_t channel);
|
||||||
|
#if !CC1200_SNIFFER
|
||||||
/* Check broadcast address. */
|
/* Check broadcast address. */
|
||||||
static int
|
static int
|
||||||
is_broadcast_addr(uint8_t mode, uint8_t *addr);
|
is_broadcast_addr(uint8_t mode, uint8_t *addr);
|
||||||
|
#endif /* CC1200_SNIFFER */
|
||||||
/* Validate address and send ACK if requested. */
|
/* Validate address and send ACK if requested. */
|
||||||
static int
|
static int
|
||||||
addr_check_auto_ack(uint8_t *frame, uint16_t frame_len);
|
addr_check_auto_ack(uint8_t *frame, uint16_t frame_len);
|
||||||
|
@ -1480,6 +1482,34 @@ configure(void)
|
||||||
single_write(CC1200_FREQ0, ((uint8_t *)&freq)[0]);
|
single_write(CC1200_FREQ0, ((uint8_t *)&freq)[0]);
|
||||||
single_write(CC1200_FREQ1, ((uint8_t *)&freq)[1]);
|
single_write(CC1200_FREQ1, ((uint8_t *)&freq)[1]);
|
||||||
single_write(CC1200_FREQ2, ((uint8_t *)&freq)[2]);
|
single_write(CC1200_FREQ2, ((uint8_t *)&freq)[2]);
|
||||||
|
|
||||||
|
printf("RF: Freq0 0x%02x\n", ((uint8_t *)&freq)[0]);
|
||||||
|
printf("RF: Freq1 0x%02x\n", ((uint8_t *)&freq)[1]);
|
||||||
|
printf("RF: Freq2 0x%02x\n", ((uint8_t *)&freq)[2]);
|
||||||
|
|
||||||
|
#if (RF_TESTMODE == 1)
|
||||||
|
single_write(CC1200_SYNC_CFG1, 0xE8);
|
||||||
|
single_write(CC1200_PREAMBLE_CFG1, 0x00);
|
||||||
|
single_write(CC1200_MDMCFG1, 0x46);
|
||||||
|
single_write(CC1200_PKT_CFG0, 0x40);
|
||||||
|
single_write(CC1200_FS_DIG1, 0x07);
|
||||||
|
single_write(CC1200_FS_DIG0, 0xAA);
|
||||||
|
single_write(CC1200_FS_DVC1, 0xFF);
|
||||||
|
single_write(CC1200_FS_DVC0, 0x17);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (RF_TESTMODE == 2)
|
||||||
|
single_write(CC1200_SYNC_CFG1, 0xE8);
|
||||||
|
single_write(CC1200_PREAMBLE_CFG1, 0x00);
|
||||||
|
single_write(CC1200_MDMCFG1, 0x06);
|
||||||
|
single_write(CC1200_PA_CFG1, 0x3F);
|
||||||
|
single_write(CC1200_MDMCFG2, 0x03);
|
||||||
|
single_write(CC1200_FS_DIG1, 0x07);
|
||||||
|
single_write(CC1200_FS_DIG0, 0xAA);
|
||||||
|
single_write(CC1200_FS_DVC0, 0x17);
|
||||||
|
single_write(CC1200_SERIAL_STATUS, 0x08);
|
||||||
|
#endif
|
||||||
|
|
||||||
strobe(CC1200_STX);
|
strobe(CC1200_STX);
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
|
@ -2066,6 +2096,7 @@ set_channel(uint8_t channel)
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/* Check broadcast address. */
|
/* Check broadcast address. */
|
||||||
|
#if !CC1200_SNIFFER
|
||||||
static int
|
static int
|
||||||
is_broadcast_addr(uint8_t mode, uint8_t *addr)
|
is_broadcast_addr(uint8_t mode, uint8_t *addr)
|
||||||
{
|
{
|
||||||
|
@ -2081,6 +2112,7 @@ is_broadcast_addr(uint8_t mode, uint8_t *addr)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif /* CC12100_SNIFFER */
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/* Validate address and send ACK if requested. */
|
/* Validate address and send ACK if requested. */
|
||||||
#if CC1200_SNIFFER
|
#if CC1200_SNIFFER
|
||||||
|
@ -2103,7 +2135,7 @@ addr_check_auto_ack(uint8_t *frame, uint16_t frame_len)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#else /* #if CC1200_SNIFFER */
|
#else /* CC1200_SNIFFER */
|
||||||
static int
|
static int
|
||||||
addr_check_auto_ack(uint8_t *frame, uint16_t frame_len)
|
addr_check_auto_ack(uint8_t *frame, uint16_t frame_len)
|
||||||
{
|
{
|
||||||
|
@ -2172,7 +2204,7 @@ addr_check_auto_ack(uint8_t *frame, uint16_t frame_len)
|
||||||
return INVALID_FRAME;
|
return INVALID_FRAME;
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif /* #if CC1200_SNIFFER */
|
#endif /* CC1200_SNIFFER */
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/*
|
/*
|
||||||
* The CC1200 interrupt handler: called by the hardware interrupt
|
* The CC1200 interrupt handler: called by the hardware interrupt
|
||||||
|
@ -2288,10 +2320,19 @@ cc1200_rx_interrupt(void)
|
||||||
PHR_LEN);
|
PHR_LEN);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if((payload_len < ACK_LEN) ||
|
if(payload_len < ACK_LEN) {
|
||||||
payload_len > CC1200_MAX_PAYLOAD_LEN) {
|
/* Packet to short. Discard it */
|
||||||
/* Invalid payload length. Discard packet */
|
WARNING("RF: Packet too short!\n");
|
||||||
WARNING("RF: Invalid payload length!\n");
|
RIMESTATS_ADD(tooshort);
|
||||||
|
rx_rx();
|
||||||
|
RELEASE_SPI();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(payload_len > CC1200_MAX_PAYLOAD_LEN) {
|
||||||
|
/* Packet to long. Discard it */
|
||||||
|
WARNING("RF: Packet to long!\n");
|
||||||
|
RIMESTATS_ADD(toolong);
|
||||||
rx_rx();
|
rx_rx();
|
||||||
RELEASE_SPI();
|
RELEASE_SPI();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue