реклама на сайте
подробности

 
 
> сс2500 - не до конца очищается буфер.
Salamander
сообщение Dec 4 2012, 14:29
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Коллеги, что-то я запутался...
Есть две платки с 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);
                
       }


Что я делаю не так?
Спасибо.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 03:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.03075 секунд с 7
ELECTRONIX ©2004-2016