Освежу немного тему...
Сделал похожий проект на cc1101 и stm8 по информации из этого топика, поэтому делюсь своими наработками.
Девайс - радионяня, в рабочем режиме через микрофон следит за уровнем шума и при превышении порога посылает тоновые сигналы в LPD диапазоне.
Пакетный режим победил следующим образом: по команде STX трансивер начинает передавать преамбулу (последовательность 01010101) пока в FIFO не появятся данные. Об этом сказано в п.15.2 даташита на чип. Т.е. процедура отправки сигнала выглядит примерно так:
void send_alrm(uint8_t len, uint8_t power)
Код:
{
uint8_t i;
CC1101_SPITransfer(CC1101_PATABLE,power);
CC1101_SPITransfer(CC1101_STX,0x00);
for (i=0;i<len;i++)
delay(10000);
CC1101_SPITransfer(CC1101_SIDLE,0x00);
}
Конфиг инициализации модуля для 10 канала LPD:
Код:
uint8_t config_cc1101_gfsk[]={
CC1101_IOCFG0, 0x06,
CC1101_FIFOTHR, 0x47,
CC1101_PKTLEN, 0x20,//packet length
CC1101_PKTCTRL0, 0x04,
CC1101_FSCTRL1, 0x06,
CC1101_FSCTRL0, 0x00,
CC1101_FREQ2, 0x10,
CC1101_FREQ1, 0xAA,
CC1101_FREQ0, (0x56+FREQ_CORR), //433.300 - lpd/10
CC1101_MDMCFG4, 0xf6,
CC1101_MDMCFG3, 0xE4,
CC1101_MDMCFG2, 0x13,
CC1101_MDMCFG1, 0x20,
CC1101_MDMCFG0, 0x00,
CC1101_DEVIATN, 0x10,
CC1101_MCSM0, 0x18,
CC1101_FOCCFG, 0x16,
CC1101_WORCTRL, 0xFB,
CC1101_FSCAL3, 0xE9,
CC1101_FSCAL2, 0x2A,
CC1101_FSCAL1, 0x00,
CC1101_FSCAL0, 0x1F,
CC1101_TEST2, 0x81,
CC1101_TEST1, 0x35,
CC1101_TEST0, 0x09,
};
FREQ_CORR инедивидуальна для каждого модуля и частоты. Можно вычислить опытным путем, например при помощи sdr свистка.