Возникла проблема с данным трансивером (СС1100)
При работе с переменной длиной пакета всё замечательно работает, но вот при фиксированной длине засада
На приёмной стороне наблюдаю приход синхрослова, флаг контрольной суммы, а в буффере приема мусор
передаю
Код: Выделить всё
halRfSendPacket((char*)&txbuff,sizeof(txbuff));
Код: Выделить всё
void halRfSendPacket(unsigned char *txBuffer,unsigned char size) //собственно передача пакета
{
unsigned short Wait; //счетчик ожидания
halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //запись пакета
halSpiStrobe(CCxxx0_STX); //запуск передачи
Wait=1000; //ждем 1с
while(!GDO0 && Wait) { delay_us(10); Wait--; } // Wait for GDO0 to be set -> sync transmitted
Wait=1000; //ждем 1с
while(GDO0 && Wait) { delay_us(10); Wait--; } // Wait for GDO0 to be cleared -> end of packet
}
Код: Выделить всё
LENG=sizeof(rxbuff);
i= halRfReceivePacket((char*) &rxbuff, &LENG);
Код: Выделить всё
unsigned char txbuff[8];
unsigned char rxbuff[10];
Код: Выделить всё
unsigned char halRfReceivePacket(unsigned char *rxBuffer,unsigned char *length) //проверка наличия пакета и его чтение
{
//Defines
#define CRC_OK 0x80
#define RSSI 0
#define LQI 1
#define BYTES_IN_RXFIFO 0x7F
unsigned char Status[2]; //статус принятого пакета
unsigned char PacketLength; //длина принятого пакета
// This status register is safe to read since it will not be updated after
// the packet has been received (See the CC1100 and 2500 Errata Note)
if((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //если в RXFIFO есть байты
{
PacketLength = halSpiReadReg(CCxxx0_RXFIFO); //Read length byte
if(PacketLength <= *length) //Read data from RX FIFO and store in rxBuffer
{
halSpiReadBurstReg(CCxxx0_RXFIFO,rxBuffer,PacketLength); //чтение всех байт пакета
*length=PacketLength; //возврат длины прочитанного пакета
// Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
halSpiReadBurstReg(CCxxx0_RXFIFO, Status, 2);
return (Status[LQI] & CRC_OK); //MSB of LQI is the CRC_OK bit
}
else //длина буфера приема недостаточна
{
*length = PacketLength; //вернем фактическую длину пакета
// Make sure that the radio is in IDLE state before flushing the FIFO
// (Unless RXOFF_MODE has been changed, the radio should be in IDLE state at this point)
halSpiStrobe(CCxxx0_SIDLE);
// Flush RX FIFO
halSpiStrobe(CCxxx0_SFRX);
return 0; //пакет не принят
}
}
else return 0; //пакет не принят
}да настройки такие
Код: Выделить всё
const unsigned char rfSettings[][2]=
{
{CCxxx0_FSCTRL1 ,0x08}, // FSCTRL1 Frequency synthesizer control.
{CCxxx0_FSCTRL0 ,0x00}, // FSCTRL0 Frequency synthesizer control.
{CCxxx0_FREQ2 ,0x21}, // FREQ2 Frequency control word, high byte.
{CCxxx0_FREQ1 ,0x65}, // FREQ1 Frequency control word, middle byte.
{CCxxx0_FREQ0 ,0x6A}, // FREQ0 Frequency control word, low byte.
{CCxxx0_MDMCFG4 ,0x5B}, // MDMCFG4 Modem configuration.
{CCxxx0_MDMCFG3 ,0xF8}, // MDMCFG3 Modem configuration.
{CCxxx0_MDMCFG2 ,0x03}, // MDMCFG2 Modem configuration.
{CCxxx0_MDMCFG1 ,0x22}, // MDMCFG1 Modem configuration.
{CCxxx0_MDMCFG0 ,0xF8}, // MDMCFG0 Modem configuration.
{CCxxx0_CHANNR ,0x00}, // CHANNR Channel number.
{CCxxx0_DEVIATN ,0x47}, // DEVIATN Modem deviation setting (when FSK modulation is enabled).
{CCxxx0_FREND1 ,0xB6}, // FREND1 Front end RX configuration.
{CCxxx0_FREND0 ,0x10}, // FREND0 Front end RX configuration.
// {CCxxx0_MCSM1 ,0x33}, // MCSM1 Main Radio Control State Machine configuration.
{CCxxx0_MCSM0 ,0x18}, // MCSM0 Main Radio Control State Machine configuration.
{CCxxx0_FOCCFG ,0x1D}, // FOCCFG Frequency Offset Compensation Configuration.
{CCxxx0_BSCFG ,0x1C}, // BSCFG Bit synchronization Configuration.
{CCxxx0_AGCCTRL2,0xC7}, // AGCCTRL2 AGC control.
{CCxxx0_AGCCTRL1,0x00}, // AGCCTRL1 AGC control.
{CCxxx0_AGCCTRL0,0xB2}, // AGCCTRL0 AGC control.
{CCxxx0_FSCAL3 ,0xEA}, // FSCAL3 Frequency synthesizer calibration.
{CCxxx0_FSCAL2 ,0x2A}, // FSCAL2 Frequency synthesizer calibration.
{CCxxx0_FSCAL1 ,0x00}, // FSCAL1 Frequency synthesizer calibration.
{CCxxx0_FSCAL0 ,0x1F}, // FSCAL0 Frequency synthesizer calibration.
{CCxxx0_FSTEST ,0x59}, // FSTEST Frequency synthesizer calibration.
{CCxxx0_TEST2 ,0x81}, // TEST2 Various test settings.
{CCxxx0_TEST1 ,0x35}, // TEST1 Various test settings.
{CCxxx0_TEST0 ,0x09}, // TEST0 Various test settings.
{CCxxx0_FIFOTHR ,0x07}, //
{CCxxx0_IOCFG2 ,0x07}, // IOCFG2 GDO2 output pin configuration.
{CCxxx0_IOCFG0 ,0x06}, // IOCFG0D GDO0 output pin configuration.
{CCxxx0_PKTCTRL1,0x04}, // PKTCTRL1 Packet automation control.
{CCxxx0_PKTCTRL0,0x04}, // PKTCTRL0 Packet automation control.
{CCxxx0_ADDR ,0x00}, // ADDR Device address.
{CCxxx0_PKTLEN ,0x08} // PKTLEN Packet length.
};