Я сделал радиолинк на этих трансиверах: один передает пакет другому и тот эхом отправляет пакет обратно. Частота посылок раз в секунду. Прием/передача на обеих платах индицируется светодиодами. Работает примерно на 10 метров при минимальной мощности передачи.
С выключенной FOC радиолинк нормально работает в течении нескольких дней без потери связи, а как только включаю FOC связь становится неустойчивой. Если FOCCFG=0x16, как отрекомендовала Smart RF Studio, проходит всегда около 20 линков и частоты видимо расстраиваются окончательно, связь пропадает. Если FOCCFG=0x36 как по дефолту, связь живет примерно до часа и отваливается. Делал все по аппликухе swra159.pdf, но там лишь общий принцип реализации. Ниже привожу функцию, которая корректирует чатоту:
Код
// производит компенсацию частот RX и TX
// на основании тайминга валидного пакета принимающей стороной
// выполнять только в IDLE, сразу после перехода RX -> IDLE
// отдельная статистика для каждой передающей стороны
void SynCalibrate(unsigned char TXnodeAdr,unsigned char Direction){
if (Direction == Read){// аккумуляторы ухода частоты
if(TXnodeAdr == cc1100adr01) dSynFreq_01 += cc1100readStatus(FREQEST);
return;
}
if (Direction == Write){// подготовка к последующей скорректированной передаче
if(TXnodeAdr == cc1100adr01)cc1100write(FSCTRL0,dSynFreq_01);
return;
}
}
Так как слейвов всего один применение функции осуществляем просто:
Код
SynCalibrate(cc1100adr01,Read);// чтение данных калибровки синтезатора
SynCalibrate(cc1100adr01,Write);// запись данных калибровки синтезатора
Вызовы вставлены сразу после перехода чипа в IDLE после режима RX.
От себя: возможно все из-за сильного шума сэмплов корректировки и нужно ставить программный ФНЧ? И что-то я не до конца понимаю назначение этого бита FOC_BS_CS_GATE в регистре FOCCFG. Комментарий к этому биту на стр. 76 даташита:
If set, the demodulator freezes the frequency offset compensation and clock
recovery feedback loops until the CS signal goes high.
У меня пакет обрабатывается только когда он пришел с верной CRC. В момент прихода естественно трансивер находится в режиме приема и CS имеет высокий уровень. Тогда получается что данный бит практически отключает FOC? Или нет?
Так в какой момент содержимое "замораживается" и когда его нужно читать? Действительно, один из трансиверов предполагается довольно долго держать в режиме RX, CS высокий практически постоянно, трафика нет...