Коллеги, что-то я запутался...
Есть две платки с cc2500 и LCD.
Я пытаюсь передавать пакет переменной длины (длина - 1 байт адрес +1 байт длины+62 байта данных = 64 байт)
Регистры такие
Код
void writeRFSettings(void)
{
// Write register settings
TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL1,0x0c);
TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL0,0x00);
TI_CC_SPIWriteReg(TI_CCxxx0_FREQ2,0x5B);
TI_CC_SPIWriteReg(TI_CCxxx0_FREQ1,0xFB);
TI_CC_SPIWriteReg(TI_CCxxx0_FREQ0,0x04);//04 rx 7c jeep
TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG4,0x2d);
TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG3,0x36);
TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG2,0x73);
TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG1,0xc2);
TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG0,0xEF);
TI_CC_SPIWriteReg(TI_CCxxx0_CHANNR,0x00);
TI_CC_SPIWriteReg(TI_CCxxx0_DEVIATN,0x01);
TI_CC_SPIWriteReg(TI_CCxxx0_FREND1,0x56);
TI_CC_SPIWriteReg(TI_CCxxx0_FREND0,0x10);
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM2,0x07);
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1,0x3c);//30
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0,0x18);
TI_CC_SPIWriteReg(TI_CCxxx0_FOCCFG,0x15);
TI_CC_SPIWriteReg(TI_CCxxx0_BSCFG,0x6C);
TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL2,0xc3);
TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL1,0x00);
TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL0,0x91);
TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL3,0xea);
TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL2,0x0A);
TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL1,0x00);
TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL0,0x11);
TI_CC_SPIWriteReg(TI_CCxxx0_FSTEST,0x59);
TI_CC_SPIWriteReg(TI_CCxxx0_TEST2,0x8f);
TI_CC_SPIWriteReg(TI_CCxxx0_TEST1,0x21);
TI_CC_SPIWriteReg(TI_CCxxx0_TEST0,0x0B);
TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2,0x0F);
TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0,0x06);
TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL1,0x0d);//05
TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL0,0x05);
TI_CC_SPIWriteReg(TI_CCxxx0_ADDR,0x01);
TI_CC_SPIWriteReg(TI_CCxxx0_PKTLEN,0x00);
TI_CC_SPIWriteReg(TI_CCxxx0_FIFOTHR,0x07);
}
ПРиемник ловит сигнал, ловит синхрослово и одобряет CRC.
Однако число принятых байт всегда равно нулю.
Читаю так:
Код
char RFReceivePacket(char *rxBuffer, char *length)
{
char status[2];
char pktLen;
if ((TI_CC_SPIReadStatus(TI_CCxxx0_RXBYTES) & TI_CCxxx0_NUM_RXBYTES))
{
pktLen = TI_CC_SPIReadReg(TI_CCxxx0_RXFIFO); // Read length byte
if (pktLen <= *length) // If pktLen size <= rxBuffer
{
TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, rxBuffer, pktLen); // Pull data
*length = pktLen; // Return the actual size
TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, status, 2);
// LQI=status[1];
//RSSI=status[0]; // Read appended status bytes
return (char)(status[TI_CCxxx0_LQI_RX]&TI_CCxxx0_CRC_OK);
} // Return CRC_OK bit
else
{
*length = pktLen; // Return the large size
TI_CC_SPIStrobe(TI_CCxxx0_SFRX); // Flush RXFIFO
return 0; // Error
}
}
else{
return 0; // Error
}
}
Функция каждый раз возвращает 128 в десятичном формате (0x80 в HEX)
RSSI- 190-210, LQI всегда 0.
Может быть как-то проблема связана с передачей? Там тоже не все чисто - после передачи в буфере остается один байт.
Передаю так:
Код
while (1)
{
RF_TX_Buffer[0]=0x3E;
RF_TX_Buffer[1]=0x01;
for (i=2;i<64;i++) { RF_TX_Buffer[i]=i+F;} //Caaiiyai aaiiua a ia?aiaiio? aooa?a
TI_CC_SPIWriteBurstReg(TI_CCxxx0_TXFIFO, RF_TX_Buffer, leng); // Caiieiyai FIFO
st=TI_CC_SPIReadStatus(TI_CCxxx0_TXBYTES); // Auaiaei ia ye?ai eiee?anoai aaeo a FIFO
sprintf(str,"Before STX %u",st);
WriteString(0,40,str,BLUE);
//delay_ms(2);
TI_CC_SPIStrobe(TI_CCxxx0_STX); // Aee??aai ia?aaa?o
//delay_ms(2);
while (!(CCxx00_GD0));
while (CCxx00_GD0);
//delay_ms(5);
st=TI_CC_SPIReadStatus(TI_CCxxx0_TXBYTES); // Auaiaei ia ye?ai eiee?anoai aaeo a FIFO
sprintf(str,"After sTX %u",st);
WriteString(0,80,str,BLUE);
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX); // iionoioaai FIFO
st=TI_CC_SPIReadStatus(TI_CCxxx0_TXBYTES);
sprintf(str,"After buffer flush %u",st);
WriteString(0,100,str,BLUE);
delay_ms(500);
LCD_Clear(RED);
delay_ms(30);
}
Что я делаю не так?
Спасибо.