| Автоматика и аппаратура связи Дистанционное и непосредственное управление исполнительными механизмами, сотовая, а также радиосвязь. |
CC1101 нет связи
02.04.2014, 21:08
|
|
|
Частый гость
Регистрация: 02.04.2014
Сообщений: 10
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
CC1101 нет связи
Доброго дня уважаемые разработчики.
Долго мучаюсь но увы не как не могу запустить микросхему приемо-передатчик СС1101. Взят пример от TI с процессором MSP430... Переделан под STM ..... На анализаторе SPI все как должно происходить в коде. Делается отправка..... На втором модуле прием..... Но увы передача происходит в редких случаях..... Возможно данное проишествие в связи с близким нахождением модулей между друг другом...... Реальные условия 1м .... Пробовал 10......
Заранее спасибо.
|
|
|
|
03.04.2014, 08:18
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: CC1101 нет связи
А у меня работает
И на 1 м, и на 10, и на 100
|
|
|
|
03.04.2014, 09:27
|
|
|
Частый гость
Регистрация: 14.10.2009
Сообщений: 14
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: CC1101 нет связи
И у меня всё работает, STM + китайские модули. Правда в процессе отладки выяснилось, что модули настроены не на 433 МГц, как обещано, а на 446.
|
|
|
|
Сказали "Спасибо" Detoxificator
|
|
|
04.04.2014, 18:14
|
|
|
Частый гость
Регистрация: 02.04.2014
Сообщений: 10
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: CC1101 нет связи
Сообщение от Detoxificator
|
|
И у меня всё работает, STM + китайские модули. Правда в процессе отладки выяснилось, что модули настроены не на 433 МГц, как обещано, а на 446.
|
А как проверить на какую частоту настроены модули.... ???? В радиомодулях разбираюсь впервые так что немного тяжеловато еще....
|
|
|
|
04.04.2014, 18:24
|
|
|
Частый гость
Регистрация: 02.04.2014
Сообщений: 10
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: CC1101 нет связи
Сидел разбирался с анализатором ... Программа вроде работает корректно.... Но связи так и нет. Конфигурация взята из примера.. Пока тяжеловато освоить даташит.... Стараюсь....Но пример то должен работать... хоть он и на 425 мГц.... Может поможете разобраться с данным чудом. Протокол обмена и конфиг во вложение. Хоть подтолкните куда ковырять...
Заранее спасибо.
|
|
|
|
06.04.2014, 11:05
|
|
|
Частый гость
Регистрация: 14.10.2009
Сообщений: 14
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: CC1101 нет связи
Конфиг надо брать не из левого примера, а генерировать в SmartRF Studio с сайта Тексаса. А то он от другого чипа, и частота там задаётся 2,4 ГГц.
Последний раз редактировалось Detoxificator; 06.04.2014 в 12:35.
Причина: upd
|
|
|
|
Сказали "Спасибо" Detoxificator
|
|
|
06.04.2014, 12:40
|
|
|
Частый гость
Регистрация: 14.10.2009
Сообщений: 14
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: CC1101 нет связи
И лучше показывайте код, а не протокол.
ЗЫ Частоту, на которой лучше всего работают модули я смотрел по RSSI (гл. 17.3 даташита), понемногу двигая радиочастоту.
|
|
|
|
Сказали "Спасибо" Detoxificator
|
|
|
13.04.2014, 15:09
|
|
|
Частый гость
Регистрация: 02.04.2014
Сообщений: 10
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: CC1101 нет связи
Сообщение от Detoxificator
|
|
Конфиг надо брать не из левого примера, а генерировать в SmartRF Studio с сайта Тексаса. А то он от другого чипа, и частота там задаётся 2,4 ГГц.
|
Да не посмотрел, решил быстренько пример переделать и запустить не тут то было.....
|
|
|
|
13.04.2014, 15:21
|
|
|
Частый гость
Регистрация: 02.04.2014
Сообщений: 10
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: CC1101 нет связи
Доброго времени суток.
Так и не получилось запустить данную микросхему.
Переделал код из примера, события обрабатываются от прерываний.
Ну и не как все таки не получилось запустить данную микросхему.
Нашел даже перевод регистров на русский язык.
При конфиге который приведен в примере иногда проскакивают
пакеты.....
А вот самому конфиг с помощью rfstudio не получается сделать
молчит на глухо...
Пробовал изменить настройки в конфиге из примера относящиеся к частоте
тоже не как.....
Уже в тупик зашел.
Про RSSI прочитал, даже В ПО на компе сделал отображение
но смысл этого RSSI если не чего запустить не могу....
Выложу куски кода без инициализации SPI т.д.
Т.К его много....И отправка по SPI работает.
|
Код:
|
const uint8 myPaTable[] = {0xC0};
const uint8 myPaTableLen = 1;
main
halRfResetChip();
Delay_mS_(10);
halRfStrobe1(CC1100_SPWD);
Delay_mS_(10);
// Setup chip with register settings from SmartRF Studio &myRfConfig1
halRfConfig1(0, myPaTable1, myPaTableLen1);
Delay_mS_(10);
// Additional chip configuration for this example
halRfWriteReg1(CC1100_MCSM0, 0x18); // Calibration from IDLE to TX/RX
halRfWriteReg1(CC1100_MCSM1, 0x00); // No CCA, IDLE after TX and RX
halRfWriteReg1(CC1100_PKTCTRL0, 0x45); // Enable data whitening and CRC
halRfWriteReg1(CC1100_PKTCTRL1, 0x04); // Enable append mode
/*
Delay_mS_(10);
rxInit1();
Delay_mS_(10);
while(1)
{
StatusRX = rxRecvPacket1(data, &payloadLength);
if (StatusRX == 0)
{
Отправляю в USB пакет
}
}
*/
/*
Delay_mS_(10);
txInit1();
Delay_mS_(10);
while(1)
{
preparePacket1(counter, data, &packetLength);
// Send packet
status = txSendPacket1(data, packetLength);
Delay_mS_(1000);
}
*/
static void preparePacket1(uint8 id, uint8* data, uint8* length)
{
uint8 i;
static uint8 payloadLength=20;
payloadLength++;
if (payloadLength › 254)
payloadLength = 1;
// First byte of packet contains the length of the payload
data[0] = payloadLength;
// First byte of payload contains an id
data[1] = id;
// Fill rest of packet with dummy data
for (i = 2; i ‹= payloadLength; i++)
data[i] = i;
// Packet length is payload + length byte
*length = payloadLength + 1;
} |
Раскомментирую либо передатчик либо приемник.
И остальные функции
Функции отправки
|
Код:
|
void txInit1(void)
{
// Set TX FIFO threshold
halRfWriteReg1(CC1100_FIFOTHR, FIFO_THRESHOLD);
// Set GDO0 to be TX FIFO threshold signal
halRfWriteReg1(CC1100_IOCFG0, 0x02);
// Set up interrupt on GDO0
IRQGpioInit(5,&txFifoHalfFull1);
// Set GDO2 to be packet sent signal
halRfWriteReg1(CC1100_IOCFG2, 0x06);
// Set up interrupt on GDO2
IRQGpioInit(2,&txPacketSent1);
}
uint8 txSendPacket1(uint8* data, uint8 length)
{
uint16 bytesRemaining = (uint16)length;
uint16 bytesWritten = 0;
uint16 bytesToWrite;
nPacketsPending1++;
while (bytesRemaining › 0)
{
//HAL_INT_LOCK(key);
bytesToWrite = MIN(FIFO_SIZE - nBytesInFifo1, bytesRemaining);
if (bytesToWrite == 0)
{
}
else
{
halRfWriteFifo1(&data[bytesWritten], bytesToWrite);
nBytesInFifo1 += bytesToWrite;
bytesWritten += bytesToWrite;
bytesRemaining -= bytesToWrite;
if (txStrobeNeeded1)
{
txStrobeNeeded1 = false;
halRfStrobe1(CC1100_STX);
}
}
}
return(0);
}
Функция прерывания GDO2
static void txPacketSent1(void)
{
nPacketsPending1--;
nBytesInFifo1 = halRfReadStatusReg1(CC1100_TXBYTES);
if (nBytesInFifo1 & 0x80)
{
Через какоето колличество посылок залетает сюда
// Oops! TX underflow. There is something seriously wrong
// Don't try to do anything more.
while(true);
}
if (nPacketsPending1 › 0 && nBytesInFifo1 › 0)
{
txStrobeNeeded1 = false;
halRfStrobe1(CC1100_STX);
}
else
{
txStrobeNeeded1 = true;
}
return;
} |
Функции приема.
|
Код:
|
void rxInit1(void)
{
// Set RX FIFO threshold
halRfWriteReg1(CC1100_FIFOTHR, FIFO_THRESHOLD); //CC1100_FIFOTHR 0x03 FIFO_THRESHOLD 0x07
// Set GDO0 to be RX FIFO threshold signal
halRfWriteReg1(CC1100_IOCFG0, 0x00); //CC1100_IOCFG2 0x02
// Set up interrupt on GDO0
IRQGpioInit(1,&rxFifoHalfFull1);
// Set GDO2 to be packet received signal
halRfWriteReg1(CC1100_IOCFG2, 0x06); //CC1100_IOCFG2 0x00
// Set up interrupt on GDO2
IRQGpioInit(2,&rxPacketRecvd1);
halRfStrobe1(CC1100_SIDLE); //CC1100_SIDLE 0x36
halRfStrobe1(CC1100_SFRX); //CC1100_SFRX 0x3A
}
uint8 rxRecvPacket1(uint8* data, uint8* length)
{
uint8 done = false;
uint8 lengthByteRead = false;
uint8 appendStatus[2];
uint8 bytesRead = 0;
uint8 bytesRemaining = 0;
packetComplete1 = false;
dataPending1 = false;
halRfStrobe1(CC1100_SRX);
while (!done)
{
if (!packetComplete1 && !dataPending1)
{
}
if (packetComplete1 && !lengthByteRead)
{
packetComplete1 = false;
halRfReadFifo1(length, 1);
lengthByteRead = true;
if (*length == 0 || *length › FIFO_SIZE)
{
halRfStrobe1(CC1100_SIDLE);
halRfStrobe1(CC1100_SFRX);
return(RX_LENGTH_VIOLATION);
}
// Get the complete packet from the FIFO
halRfReadFifo1(data, *length);
done = true;
}
else if (packetComplete1 && lengthByteRead)
{
packetComplete1 = false;
halRfReadFifo1(&data[bytesRead], bytesRemaining);
done = true;
}
else if (dataPending1 && !lengthByteRead)
{
dataPending1 = false;
halRfReadFifo1(length, 1);
lengthByteRead = true;
if (*length == 0)
{
halRfStrobe1(CC1100_SIDLE);
halRfStrobe1(CC1100_SFRX);
//HAL_INT_UNLOCK(key);
return(RX_LENGTH_VIOLATION);
}
// Read remaining bytes in FIFO, but don't empty the
// FIFO because of RX FIFO behaviour
halRfReadFifo1(data, FIFO_THRESHOLD_BYTES - 2);
bytesRead += FIFO_THRESHOLD_BYTES - 2;
bytesRemaining = *length - bytesRead;
}
else if (dataPending1 && lengthByteRead)
{
dataPending1 = false;
// Read remaining bytes in FIFO, but don't empty the
// FIFO because of RX FIFO behaviour
halRfReadFifo1(&data[bytesRead], FIFO_THRESHOLD_BYTES - 1);
bytesRead += FIFO_THRESHOLD_BYTES - 1;
bytesRemaining = *length - bytesRead;
}
}
// Get the appended status bytes [RSSI, LQI]
halRfReadFifo1(appendStatus, 2);
// Check CRC
if ((appendStatus[1] & CC1100_LQI_CRC_OK_BM) != CC1100_LQI_CRC_OK_BM)
{
return(RX_CRC_MISMATCH);
}
return(RX_OK);
}
Функция прерывания GDO2
void rxPacketRecvd1(void)
{
packetComplete1 = true;
} |
Лучше наверно протокол общения чипа и МК выложить кажеться.
Пробовал конфиги.
|
Код:
|
Экспортировать все регистры
433 мГц
halRfWriteReg1(CC1100_FSCTRL1, rfConfig-›fsctrl1); // Frequency synthesizer control.
halRfWriteReg1(CC1100_FSCTRL0, rfConfig-›fsctrl0); // Frequency synthesizer control.
halRfWriteReg1(CC1100_FREQ2, rfConfig-›freq2); // Frequency control word, high byte.
halRfWriteReg1(CC1100_FREQ1, rfConfig-›freq1); // Frequency control word, middle byte.
halRfWriteReg1(CC1100_FREQ0, rfConfig-›freq0); // Frequency control word, low byte.
halRfWriteReg1(CC1100_MDMCFG4, rfConfig-›mdmcfg4); // Modem configuration.
halRfWriteReg1(CC1100_MDMCFG3, rfConfig-›mdmcfg3); // Modem configuration.
halRfWriteReg1(CC1100_MDMCFG2, rfConfig-›mdmcfg2); // Modem configuration.
halRfWriteReg1(CC1100_MDMCFG1, rfConfig-›mdmcfg1); // Modem configuration.
halRfWriteReg1(CC1100_MDMCFG0, rfConfig-›mdmcfg0); // Modem configuration.
halRfWriteReg1(CC1100_CHANNR, rfConfig-›channr); // Channel number.
halRfWriteReg1(CC1100_DEVIATN, rfConfig-›deviatn); // Modem deviation setting (when FSK modulation is enabled).
halRfWriteReg1(CC1100_FREND1, rfConfig-›frend1); // Front end RX configuration.
halRfWriteReg1(CC1100_FREND0, rfConfig-›frend0); // Front end RX configuration.
halRfWriteReg1(CC1100_MCSM0, rfConfig-›mcsm0); // Main Radio Control State Machine configuration.
halRfWriteReg1(CC1100_FOCCFG, rfConfig-›foccfg); // Frequency Offset Compensation Configuration.
halRfWriteReg1(CC1100_BSCFG, rfConfig-›bscfg); // Bit synchronization Configuration.
halRfWriteReg1(CC1100_AGCCTRL2, rfConfig-›agcctrl2); // AGC control.
halRfWriteReg1(CC1100_AGCCTRL1, rfConfig-›agcctrl1); // AGC control.
halRfWriteReg1(CC1100_AGCCTRL0, rfConfig-›agcctrl0); // AGC control.
halRfWriteReg1(CC1100_FSCAL3, rfConfig-›fscal3); // Frequency synthesizer calibration.
halRfWriteReg1(CC1100_FSCAL2, rfConfig-›fscal2); // Frequency synthesizer calibration.
halRfWriteReg1(CC1100_FSCAL1, rfConfig-›fscal1); // Frequency synthesizer calibration.
halRfWriteReg1(CC1100_FSCAL0, rfConfig-›fscal0); // Frequency synthesizer calibration.
halRfWriteReg1(CC1100_FSTEST, rfConfig-›fstest); // Frequency synthesizer calibration.
halRfWriteReg1(CC1100_TEST2, rfConfig-›test2); // Various test settings.
halRfWriteReg1(CC1100_TEST1, rfConfig-›test1); // Various test settings.
halRfWriteReg1(CC1100_TEST0, rfConfig-›test0); // Various test settings.
halRfWriteReg1(CC1100_IOCFG2, rfConfig-›iocfg2); // GDO2 output pin configuration.
halRfWriteReg1(CC1100_IOCFG0, rfConfig-›iocfg0); // GDO0 output pin configuration.
halRfWriteReg1(CC1100_PKTCTRL1, rfConfig-›pktctrl1); // Packet automation control.
halRfWriteReg1(CC1100_PKTCTRL0, rfConfig-›pktctrl0); // Packet automation control.
halRfWriteReg1(CC1100_ADDR, rfConfig-›addr); // Device address.
halRfWriteReg1(CC1100_PKTLEN, rfConfig-›pktlen); // Packet length.
halSpiWrite1(CC1100_PATABLE | CC1100_WRITE_BURST, rfPaTable, rfPaTableLen);
Экспортировать регистры по умолчанию
halRfWriteReg1(CC1100_IOCFG0,0x06); //GDO0 Output Pin Configuration
halRfWriteReg1(CC1100_FIFOTHR,0x47); //RX FIFO and TX FIFO Thresholds
halRfWriteReg1(CC1100_PKTCTRL0,0x05);//Packet Automation Control
halRfWriteReg1(CC1100_FSCTRL1,0x06); //Frequency Synthesizer Control
halRfWriteReg1(CC1100_FREQ2,0x10); //Frequency Control Word, High Byte
halRfWriteReg1(CC1100_FREQ1,0xB1); //Frequency Control Word, Middle Byte
halRfWriteReg1(CC1100_FREQ0,0x3A); //Frequency Control Word, Low Byte
halRfWriteReg1(CC1100_MDMCFG4,0xFD); //Modem Configuration
halRfWriteReg1(CC1100_MDMCFG3,0x3B); //Modem Configuration
halRfWriteReg1(CC1100_MDMCFG2,0xF3); //Modem Configuration
halRfWriteReg1(CC1100_DEVIATN,0x11); //Modem Deviation Setting
halRfWriteReg1(CC1100_MCSM0,0x18); //Main Radio Control State Machine Configuration
halRfWriteReg1(CC1100_FOCCFG,0x16); //Frequency Offset Compensation Configuration
halRfWriteReg1(CC1100_WORCTRL,0xFB); //Wake On Radio Control
halRfWriteReg1(CC1100_FSCAL3,0xEA); //Frequency Synthesizer Calibration
halRfWriteReg1(CC1100_FSCAL2,0x2A); //Frequency Synthesizer Calibration
halRfWriteReg1(CC1100_FSCAL1,0x00); //Frequency Synthesizer Calibration
halRfWriteReg1(CC1100_FSCAL0,0x1F); //Frequency Synthesizer Calibration
halRfWriteReg1(CC1100_TEST2,0x81); //Various Test Settings
halRfWriteReg1(CC1100_TEST1,0x35); //Various Test Settings
halRfWriteReg1(CC1100_TEST0,0x09); //Various Test Settings
И переделать пример от TI изменив настройки частоты.
halRfWriteReg1(CC1100_IOCFG2,0x0B); //GDO2 Output Pin Configuration
halRfWriteReg1(CC1100_IOCFG0,0x06); //GDO0 Output Pin Configuration
halRfWriteReg1(CC1100_FIFOTHR,0x47); //RX FIFO and TX FIFO Thresholds
//halRfWriteReg1(CC1100_PKTLEN,0xFF); //Packet Length
halRfWriteReg1(CC1100_PKTCTRL0,0x32);//Packet Automation Control
//halRfWriteReg1(CC1100_ADDR,0x00); //Device Address
//halRfWriteReg1(CC1100_CHANNR,0x05); //Channel Number
halRfWriteReg1(CC1100_FSCTRL1,0x06); //Frequency Synthesizer Control
halRfWriteReg1(CC1100_FSCTRL0,0x00); //Frequency Synthesizer Control
halRfWriteReg1(CC1100_FREQ2,0x10); //Frequency Control Word, High Byte
halRfWriteReg1(CC1100_FREQ1,0xB0); //Frequency Control Word, Middle Byte
halRfWriteReg1(CC1100_FREQ0,0x71); //Frequency Control Word, Low Byte
halRfWriteReg1(CC1100_MDMCFG4,0xA7); //Modem Configuration
halRfWriteReg1(CC1100_MDMCFG3,0x32); //Modem Configuration
halRfWriteReg1(CC1100_MDMCFG2,0x30); //Modem Configuration
halRfWriteReg1(CC1100_MDMCFG1,0x22); //Modem Configuration
halRfWriteReg1(CC1100_MDMCFG0,0xF8); //Modem Configuration
//halRfWriteReg1(CC1100_DEVIATN,0x23); //Modem Deviation Setting
halRfWriteReg1(CC1100_MCSM2,0x07); //Main Radio Control State Machine Configuration
halRfWriteReg1(CC1100_MCSM1,0x30); //Main Radio Control State Machine Configuration
halRfWriteReg1(CC1100_MCSM0,0x18); //Main Radio Control State Machine Configuration
//halRfWriteReg1(CC1100_FOCCFG,0x16); //Frequency Offset Compensation Configuration
//halRfWriteReg1(CC1100_BSCFG,0x6C); //Bit Synchronization Configuration
halRfWriteReg1(CC1100_AGCCTRL2,0x04);//AGC Control
halRfWriteReg1(CC1100_AGCCTRL1,0x00);//AGC Control
halRfWriteReg1(CC1100_AGCCTRL0,0x92);//AGC Control
//halRfWriteReg1(CC1100_WORCTRL,0xFB); //Wake On Radio Control
halRfWriteReg1(CC1100_FREND1,0xB6); //Front End RX Configuration
halRfWriteReg1(CC1100_FREND0,0x11); //Front End TX Configuration
halRfWriteReg1(CC1100_FSCAL3,0xE9); //Frequency Synthesizer Calibration
halRfWriteReg1(CC1100_FSCAL2,0x2A); //Frequency Synthesizer Calibration
halRfWriteReg1(CC1100_FSCAL1,0x00); //Frequency Synthesizer Calibration
halRfWriteReg1(CC1100_FSCAL0,0x1F); //Frequency Synthesizer Calibration
halRfWriteReg1(CC1100_TEST2,0x81); //Various Test Settings
halRfWriteReg1(CC1100_TEST1,0x35); //Various Test Settings
halRfWriteReg1(CC1100_TEST0,0x09); //Various Test Settings
halSpiWrite1(CC1100_PATABLE | CC1100_WRITE_BURST, rfPaTable, rfPaTableLen); |
Как я понял.
Конфигурация регистров GDO0 и GDO2 конфигурируеться
при инициализации приема или передачи.
Так что стоит обращать внимание на настройку частоты..
Не понял ни чего про настройки модуляци.
2-fsk
Gfsk
ASK/OOK
4-fsk
MSK
В примере стоит MSK.....
Лучше бы NRF взял.... Вон тема целая и люди запускали, есть примеры...
Сложный чип с нахрапу тяжеловато взять..
В приложение стандартный пример от TI для MSP.
Кто компитентен в данном вопросе прошу помощи
на какие регистры стоит обращать внимания при настройке частоты и модуляции.
Заранее спасибо.
|
|
|
|
15.04.2014, 15:46
|
|
|
Частый гость
Регистрация: 02.04.2014
Сообщений: 10
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: CC1101 нет связи
Добрый ....
Так понял компетентных в данном вопросе не нашлось за несколько дней.
Может хоть кто то за делиться 100% рабочим конфигом на 433мГц, протестированном на железе....
А то когда не знаешь в чем причина очень тяжело.
Настройки портов GDO1 и 2 разберусь настрою.
С длинной пакета тоже разобрался переменной или постоянной.
Когда хоть связь какая то появиться, легче ставить эксперименты и учиться .... Шаг в лево, не работает . Шаг в право работать стало лучше...
А то как в центре поля сижу не знаю в какую сторону идти....
Заранее спасибо.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:40.
|
|