|
cc1101 - переключение из режима передачи в режим приема и наоборот. |
|
|
|
 |
Ответов
|
Sep 19 2013, 05:44
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 28-11-07
Пользователь №: 32 772

|
У меня возник очередной затык на пути освоения СС1101. Использую MCU STM8L. Еще вчера у меня получалось обмениваться данными между двумя платками: одна передавала, другая все время принимала. Все пакеты проходили успешно. Решил настроить двухсторонний обмен. Т.е. чтобы после получения пакета высылалось подтверждение. После очередной доработки, вообще все перестало работать. SPI, вроде, работает: регистры пишутся и читаются правильно. Одна плата совсем выключена, при этом вторая все время что-то принимает. Даже если предположить, что эфир сильно засорен, некоторые моменты совсем не понятны: 1. RXBYTES все время равен 0x1F. Из RXFIFO читается все время одна и та же последовательность. 2. После команд TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); TI_CC_SPIStrobe(TI_CCxxx0_SFRX); RXBYTES возвращает 0xF. 3. MARCSTATE равен 0x5F, PKTSTATUS - 0x2F - значения этих регистров вызывают подозрение на проблемы в SPI Подскажите, что может быть? CODE CC1101_WriteReg(CCxxx0_IOCFG2, 0x45); //GDO2 Output Pin Configuration CC1101_WriteReg(CCxxx0_IOCFG0, 0x41); //GDO0 Output Pin Configuration CC1101_WriteReg(CCxxx0_PKTLEN, 0xFE); //Packet Length CC1101_WriteReg(CCxxx0_PKTCTRL1,0x0C); //Packet Automation Control CC1101_WriteReg(CCxxx0_PKTCTRL0,0x05); //Packet Automation Control CC1101_WriteReg(CCxxx0_CHANNR, 0x15); //Channel Number CC1101_WriteReg(CCxxx0_FSCTRL1, 0x0C); //Frequency Synthesizer Control CC1101_WriteReg(CCxxx0_FREQ2, 0x10); //Frequency Control Word, High Byte CC1101_WriteReg(CCxxx0_FREQ1, 0xB1); //Frequency Control Word, Middle Byte CC1101_WriteReg(CCxxx0_FREQ0, 0x3B); //Frequency Control Word, Low Byte CC1101_WriteReg(CCxxx0_MDMCFG4, 0x2D); //Modem Configuration CC1101_WriteReg(CCxxx0_MDMCFG3, 0x3B); //Modem Configuration CC1101_WriteReg(CCxxx0_MDMCFG2, 0x13); //Modem Configuration CC1101_WriteReg(CCxxx0_DEVIATN, 0x62); //Modem Deviation Setting CC1101_WriteReg(CCxxx0_MCSM1, 0x3F); //Main Radio Control State Machine Configuration CC1101_WriteReg(CCxxx0_MCSM0, 0x18); //Main Radio Control State Machine Configuration CC1101_WriteReg(CCxxx0_FOCCFG, 0x1D); //Frequency Offset Compensation Configuration CC1101_WriteReg(CCxxx0_BSCFG, 0x1C); //Bit Synchronization Configuration CC1101_WriteReg(CCxxx0_AGCCTRL2,0xC7); //AGC Control CC1101_WriteReg(CCxxx0_AGCCTRL1,0x20); //AGC Control CC1101_WriteReg(CCxxx0_AGCCTRL0,0xB0); //AGC Control CC1101_WriteReg(CCxxx0_WORCTRL, 0xFB); //Wake On Radio Control CC1101_WriteReg(CCxxx0_FREND1, 0xB6); //Front End RX Configuration CC1101_WriteReg(CCxxx0_FSCAL3, 0xEA); //Frequency Synthesizer Calibration CC1101_WriteReg(CCxxx0_FSCAL2, 0x2A); //Frequency Synthesizer Calibration CC1101_WriteReg(CCxxx0_FSCAL1, 0x00); //Frequency Synthesizer Calibration CC1101_WriteReg(CCxxx0_FSCAL0, 0x1F); //Frequency Synthesizer Calibration CC1101_WriteReg(CCxxx0_TEST0, 0x09); //Various Test Settings
|
|
|
|
|
Sep 19 2013, 08:35
|
Частый гость
 
Группа: Участник
Сообщений: 166
Регистрация: 8-09-09
Из: Украина
Пользователь №: 52 244

|
Цитата(Boriska @ Sep 19 2013, 08:44)  CC1101_WriteReg(CCxxx0_PKTLEN, 0xFE); //Packet Length CC1101_WriteReg(CCxxx0_PKTCTRL1,0x0C); //Packet Automation Control CC1101_WriteReg(CCxxx0_PKTCTRL0,0x05); //Packet Automation Control у Вас переменная или фиксированная длина пакета? У Вас стоит бил autoflush(CCxxx0_PKTCTRL1,0x0C), т.е. чтобы сбрасывать буфер в случае неправильного CRC, и в то же время стоит переменная длина пакета. autoflush вроде бы работает только с фиксированной длиной пакета при условии что этот пакет полностью помещается в приемный буфер.
|
|
|
|
|
Sep 19 2013, 11:01
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 28-11-07
Пользователь №: 32 772

|
Цитата(Pasha_a13 @ Sep 19 2013, 12:35)  у Вас переменная или фиксированная длина пакета? У Вас стоит бил autoflush(CCxxx0_PKTCTRL1,0x0C), т.е. чтобы сбрасывать буфер в случае неправильного CRC, и в то же время стоит переменная длина пакета. autoflush вроде бы работает только с фиксированной длиной пакета при условии что этот пакет полностью помещается в приемный буфер. Длина пакета - переменная. Но Autoflush работает и в этом режиме. Там, правда, есть условие "The MCU must not read from the current packet until the CRC has been checked as OK." Попробую вообще отключить Autoflush. Я его установил в ходе очередного эксперимента и забыл вернуть обратно.
|
|
|
|
|
Sep 19 2013, 11:18
|
Частый гость
 
Группа: Участник
Сообщений: 166
Регистрация: 8-09-09
Из: Украина
Пользователь №: 52 244

|
Цитата(Boriska @ Sep 19 2013, 14:01)  Длина пакета - переменная. Но Autoflush работает и в этом режиме. Там, правда, есть условие "The MCU must not read from the current packet until the CRC has been checked as OK." Попробую вообще отключить Autoflush. Я его установил в ходе очередного эксперимента и забыл вернуть обратно. Да, точно. Главное чтобы длина пакета не превышала 63 байта. Вообще действительно есть ощущение что как-то из SPI неправильно читаются данные. Т.к. после строба IDLE и очистки приемного буфера там никак не должно быть каких-то данных.
|
|
|
|
|
Sep 19 2013, 17:41
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 28-11-07
Пользователь №: 32 772

|
Цитата(Pasha_a13 @ Sep 19 2013, 15:18)  Вообще действительно есть ощущение что как-то из SPI неправильно читаются данные. Т.к. после строба IDLE и очистки приемного буфера там никак не должно быть каких-то данных. Вообщем, разобрался. Упустил один момент: "For register addresses in the range 0x30- 0x3D, the burst bit is used to select between status registers when burst bit is one, and between command strobes when burst bit is zero"
Сообщение отредактировал Boriska - Sep 19 2013, 17:42
|
|
|
|
Сообщений в этой теме
zheka cc1101 - переключение из режима передачи в режим приема и наоборот. Aug 6 2013, 16:15 Pasha_a13 Вы можете, в зависимости от нужного режима работы,... Aug 7 2013, 16:38 zheka У меня одно устройство ведущее, другое ведомое.
Ве... Aug 8 2013, 15:44 Pasha_a13 Цитата(zheka @ Aug 8 2013, 18:44) У меня ... Aug 8 2013, 18:45 zheka пока что я не пользовался автоопустошением, но пла... Aug 8 2013, 18:47 Pasha_a13 Цитата(zheka @ Aug 8 2013, 21:45) пока чт... Aug 8 2013, 18:47 zheka Настроил автоматические переходы. Убрал принудител... Aug 9 2013, 03:34 Pasha_a13 Цитата(zheka @ Aug 9 2013, 06:34) Настрои... Aug 9 2013, 08:32 zheka Вот код Ping_RF - на ведущем. Ping_RF_Answer() - н... Aug 9 2013, 13:14 Pasha_a13 я всегда использовал постоянную длину пакета, пото... Aug 9 2013, 13:25 zheka А у меня острая необходимость в переменной длине. ... Aug 9 2013, 13:30 Pasha_a13 а зачем после строба передачи у Вас отслеживается ... Aug 9 2013, 13:36 zheka Я вас обманул - у меня CRC_AUTOFLUSH включен.
Цит... Aug 9 2013, 13:42 Pasha_a13 уже понял. Я просто не использовал этой функции(оп... Aug 9 2013, 14:10 zheka Простите, а калибровку нужно делать периодически? ... Aug 9 2013, 16:36 Pasha_a13 да, калибровать нужно периодически. Я не скажу нас... Aug 9 2013, 16:40 zheka Цитатасли пакет не пришел или побился(преамбула не... Aug 9 2013, 16:43 Pasha_a13 может попробуйте увеличить хотя бы до 2-3мс и посм... Aug 9 2013, 16:44 zheka Чип что, от переключений так частоту уводит сильно... Aug 9 2013, 16:46 Pasha_a13 Цитата(zheka @ Aug 9 2013, 19:46) Чип что... Aug 9 2013, 16:55 zheka Продолжаю биться.
С переходом в RX после TX все по... Aug 10 2013, 09:01 Pasha_a13 Цитата(zheka @ Aug 10 2013, 12:01) Далее ... Aug 11 2013, 16:04 DASM Калибровка нужна только при включении или сильной ... Sep 19 2013, 10:25
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|