blox 0 20 сентября, 2014 Опубликовано 20 сентября, 2014 · Жалоба Здравствуйте!!! Подскажите кто использовал фиксированную длину пакета передачи данных в этом трансивере, как правильно нужно сконфигурировать сс1100. Когда использую переменную длину пакета всё работает, захотелось использовать FEC а он работает только с фиксированной длиной пакета. const unsigned char rfSettings[][2]= { {CCxxx0_FSCTRL1 ,0x06}, // FSCTRL1 Frequency synthesizer control. {CCxxx0_FSCTRL0 ,0x00}, // FSCTRL0 Frequency synthesizer control. {CCxxx0_FREQ2 ,0x20}, // FREQ2 Frequency control word, high byte. {CCxxx0_FREQ1 ,0x28}, // FREQ1 Frequency control word, middle byte. {CCxxx0_FREQ0 ,0xC5}, // FREQ0 Frequency control word, low byte. {CCxxx0_MDMCFG4 ,0xF6}, // MDMCFG4 Modem configuration. {CCxxx0_MDMCFG3 ,0x75}, // MDMCFG3 Modem configuration. {CCxxx0_MDMCFG2 ,0x72}, // MDMCFG2 Modem configuration. {CCxxx0_MDMCFG1 ,0x22}, // MDMCFG1 Modem configuration. {CCxxx0_MDMCFG0 ,0xE5}, // MDMCFG0 Modem configuration. {CCxxx0_CHANNR ,0x00}, // CHANNR Channel number. {CCxxx0_DEVIATN ,0x00}, // DEVIATN Modem deviation setting (when FSK modulation is enabled). {CCxxx0_FREND1 ,0x56}, // 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 ,0x16}, // FOCCFG Frequency Offset Compensation Configuration. {CCxxx0_BSCFG ,0x6C}, // BSCFG Bit synchronization Configuration. {CCxxx0_AGCCTRL2,0x03}, // AGCCTRL2 AGC control. {CCxxx0_AGCCTRL1,0x40}, // AGCCTRL1 AGC control. {CCxxx0_AGCCTRL0,0x91}, // AGCCTRL0 AGC control. {CCxxx0_FSCAL3 ,0xE9}, // 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. }; передаю 8 байт данных проверка адреса не используеться, длина фиксированая поэтому передаю только полезные 8 байт данных вопросы 1 в pktlen значение должно быть только длина данных или длина + 2 байта rssi и lqi насколько понимаю без двух байт 2 длина пакета фиксированая и сс1100 сам знает длину данных(pktlen), то-есть нулевой байт буффера TX это полезные данные 3 согласно моим настройкам адрес не используеться и я также его непередаю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба PKTLEN = 8, независимо от того, дополняется ли принимаемая информация статусом и RSSI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
miheyk 0 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба 1. В PKTLEN именно длина самих данных без учета CRC и LQI, т.е. надо учитывать, что перед отправкой добавится 2 байта, поэтому не более 62 байт для передачи без разбиения. 2. При фиксированной передаче после преамбулы байт длины пакета не передается, сразу полезные данные, т.е. при переменной длине к длине бы пакета с CRC и LQI добавилась бы еще LENGTH. 3. Адрес в настройках выключен и не передается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blox 0 27 сентября, 2014 Опубликовано 27 сентября, 2014 · Жалоба Спасибо за ответы!!! проблема осталась, при чтении пакета crc совпадает, но данные состоят из мусора, длину возвращает как и должно быть 8 байт пишу так 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; //пакет не принят } не могу понять в чем проблема Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blox 0 29 сентября, 2014 Опубликовано 29 сентября, 2014 · Жалоба да переделывал функцию приема на фиксированную длину пакета [code]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 = halSpiReadStatus(CCxxx0_RXBYTES); //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; //пакет не принят } не помогло Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blox 0 16 октября, 2014 Опубликовано 16 октября, 2014 · Жалоба Что-то долго мучился с проблемой, как всегда невнимательность :rolleyes: нужно было убрать чтение RSSI и LQI в функции чтения(она написана для переменной длины пакета) получалось что пакет я уже прочитал, и пытаюсь считать еще два байта unsigned char halRfReceivePacket(unsigned char *rxBuffer,unsigned char *length) //проверка наличия пакета и его чтение { //Defines #define BYTES_IN_RXFIFO 0x7F 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 = halSpiReadStatus(CCxxx0_RXBYTES); //Read length byte if(PacketLength == *length) //Read data from RX FIFO and store in rxBuffer { halSpiReadBurstReg(CCxxx0_RXFIFO,rxBuffer,PacketLength); //чтение всех байт пакета *length=PacketLength; //возврат длины прочитанного пакета return (1); } else //длина буфера приема недостаточна { *length = PacketLength; //вернем фактическую длину пакета halSpiStrobe(CCxxx0_SIDLE); // Flush RX FIFO halSpiStrobe(CCxxx0_SFRX); return 0; //пакет не принят } } else return 0; //пакет не принят } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться