打印

CC1101发送时间长问题

[复制链接]
2008|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
usbyt|  楼主 | 2016-3-4 17:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
dirtwillfly| | 2016-3-4 20:58 | 只看该作者
单片机通过spi控制的吧?这个要看程序了,看看这段时间都做啥了

使用特权

评论回复
板凳
usbyt|  楼主 | 2016-3-4 21:42 | 只看该作者
GDO0 不是单片机控制的,CC1101给的状态指示信号,发送前为低发送时为高,发送完在变低,那段时间SPI没写东西出来(看得到啊)。
这个时间是那个寄存器设置的?

使用特权

评论回复
地板
dirtwillfly| | 2016-3-4 22:24 | 只看该作者
怎么配置的GPO0

使用特权

评论回复
5
ayl439| | 2016-3-5 00:09 | 只看该作者
把你的寄存器配置和发送代码传上来看看

使用特权

评论回复
6
usbyt|  楼主 | 2016-3-5 00:10 | 只看该作者
DataSheet  第41页如下描述

a) Interrupt Driven Solution
The GDO pins can be used in both RX and TX
to give an interrupt when a sync word has
been received/transmitted or when a complete
packet has been received/transmitted by
setting IOCFGx.GDOx_CFG=0x06. In addition,
there are two configurations for the
IOCFGx.GDOx_CFG register that can be used
as an interrupt source to provide information

使用特权

评论回复
7
usbyt|  楼主 | 2016-3-5 00:35 | 只看该作者
/* Private define ------------------------------------------------------------*/
#define WRITE      0x82  /* Write to Memory instruction */
#define READ       0xD3  /* Read from Memory instruction */
#define RDSR       0xD7  /* Read Status Register instruction  */
#define RDID       0x9F  /* Read identification */
#define PE         0x81  /* Page Erase instruction */
#define BE1        0xC7  /* Bulk Erase instruction */
#define BE2        0x94  /* Bulk Erase instruction */
#define BE3        0x80  /* Bulk Erase instruction */
#define BE4        0x9A  /* Bulk Erase instruction */

#define BUSY_Flag  0x01 /* Ready/busy status flag */

#define Dummy_Byte 0xff

/*******************************************************************************/
#define                         WRITE_BURST             0x40                                                //连续写入
#define                         READ_SINGLE             0x80                                                //读
#define                         READ_BURST              0xC0                                                //连续读
#define                         BYTES_IN_RXFIFO     0x7F                                                  //接收缓冲区的有效字节数
#define                         CRC_OK              0x80                                                 //CRC校验通过位标志
// CC1100 STROBE, CONTROL AND STATUS REGSITER
#define                         CCxxx0_IOCFG2       0x00        // GDO2 output pin configuration
#define                         CCxxx0_IOCFG1       0x01        // GDO1 output pin configuration
#define                         CCxxx0_IOCFG0       0x02        // GDO0 output pin configuration
#define                         CCxxx0_FIFOTHR      0x03        // RX FIFO and TX FIFO thresholds
#define                         CCxxx0_SYNC1        0x04        // Sync word, high uint8_t
#define                         CCxxx0_SYNC0        0x05        // Sync word, low uint8_t
#define                         CCxxx0_PKTLEN       0x06        // Packet length
#define                         CCxxx0_PKTCTRL1     0x07        // Packet automation control
#define                         CCxxx0_PKTCTRL0     0x08        // Packet automation control
#define                         CCxxx0_ADDR         0x09        // Device address
#define                         CCxxx0_CHANNR       0x0A        // Channel number
#define                         CCxxx0_FSCTRL1      0x0B        // Frequency synthesizer control
#define                         CCxxx0_FSCTRL0      0x0C        // Frequency synthesizer control
#define                         CCxxx0_FREQ2        0x0D        // Frequency control word, high uint8_t
#define                         CCxxx0_FREQ1        0x0E        // Frequency control word, middle uint8_t
#define                         CCxxx0_FREQ0        0x0F        // Frequency control word, low uint8_t
#define                         CCxxx0_MDMCFG4      0x10        // Modem configuration
#define                         CCxxx0_MDMCFG3      0x11        // Modem configuration
#define                         CCxxx0_MDMCFG2      0x12        // Modem configuration
#define                         CCxxx0_MDMCFG1      0x13        // Modem configuration
#define                         CCxxx0_MDMCFG0      0x14        // Modem configuration
#define                         CCxxx0_DEVIATN      0x15        // Modem deviation setting
#define                         CCxxx0_MCSM2        0x16        // Main Radio Control State Machine configuration
#define                         CCxxx0_MCSM1        0x17        // Main Radio Control State Machine configuration
#define                         CCxxx0_MCSM0        0x18        // Main Radio Control State Machine configuration
#define                         CCxxx0_FOCCFG       0x19        // Frequency Offset Compensation configuration
#define                         CCxxx0_BSCFG        0x1A        // Bit Synchronization configuration
#define                         CCxxx0_AGCCTRL2     0x1B        // AGC control
#define                         CCxxx0_AGCCTRL1     0x1C        // AGC control
#define                         CCxxx0_AGCCTRL0     0x1D        // AGC control
#define                         CCxxx0_WOREVT1      0x1E        // High uint8_t Event 0 timeout
#define                         CCxxx0_WOREVT0      0x1F        // Low uint8_t Event 0 timeout
#define                         CCxxx0_WORCTRL      0x20        // Wake On Radio control
#define                         CCxxx0_FREND1       0x21        // Front end RX configuration
#define                         CCxxx0_FREND0       0x22        // Front end TX configuration
#define                         CCxxx0_FSCAL3       0x23        // Frequency synthesizer calibration
#define                         CCxxx0_FSCAL2       0x24        // Frequency synthesizer calibration
#define                         CCxxx0_FSCAL1       0x25        // Frequency synthesizer calibration
#define                         CCxxx0_FSCAL0       0x26        // Frequency synthesizer calibration
#define                         CCxxx0_RCCTRL1      0x27        // RC oscillator configuration
#define                         CCxxx0_RCCTRL0      0x28        // RC oscillator configuration
#define                         CCxxx0_FSTEST       0x29        // Frequency synthesizer calibration control
#define                         CCxxx0_PTEST        0x2A        // Production test
#define                         CCxxx0_AGCTEST      0x2B        // AGC test
#define                         CCxxx0_TEST2        0x2C        // Various test settings
#define                         CCxxx0_TEST1        0x2D        // Various test settings
#define                         CCxxx0_TEST0        0x2E        // Various test settings

// Strobe commands
#define                         CCxxx0_SRES         0x30        // Reset chip.
#define                         CCxxx0_SFSTXON      0x31        // Enable and calibrate frequency synthesizer (if MCSM0.FS_AUTOCAL=1).
                                                                // If in RX/TX: Go to a wait state where only the synthesizer is
                                                                // running (for quick RX / TX turnaround).
#define                         CCxxx0_SXOFF        0x32        // Turn off crystal oscillator.
#define                         CCxxx0_SCAL         0x33        // Calibrate frequency synthesizer and turn it off
                                                                // (enables quick start).
#define                         CCxxx0_SRX          0x34        // Enable RX. Perform calibration first if coming from IDLE and
                                                                // MCSM0.FS_AUTOCAL=1.
#define                         CCxxx0_STX          0x35        // In IDLE state: Enable TX. Perform calibration first if
                                                                // MCSM0.FS_AUTOCAL=1. If in RX state and CCA is enabled:
                                                                // Only go to TX if channel is clear.
#define                         CCxxx0_SIDLE        0x36        // Exit RX / TX, turn off frequency synthesizer and exit
                                                                // Wake-On-Radio mode if applicable.
#define                         CCxxx0_SAFC         0x37        // Perform AFC adjustment of the frequency synthesizer
#define                         CCxxx0_SWOR         0x38        // Start automatic RX polling sequence (Wake-on-Radio)
#define                         CCxxx0_SPWD         0x39        // Enter power down mode when CSn goes high.
#define                         CCxxx0_SFRX         0x3A        // Flush the RX FIFO buffer.
#define                         CCxxx0_SFTX         0x3B        // Flush the TX FIFO buffer.
#define                         CCxxx0_SWORRST      0x3C        // Reset real time clock.
#define                         CCxxx0_SNOP         0x3D        // No operation. May be used to pad strobe commands to two
                                                                // uint8_ts for simpler software.
                               
#define                         CCxxx0_PARTNUM      0x30
#define                         CCxxx0_VERSION      0x31
#define                         CCxxx0_FREQEST      0x32
#define                         CCxxx0_LQI          0x33
#define                         CCxxx0_RSSI         0x34
#define                         CCxxx0_MARCSTATE    0x35
#define                         CCxxx0_WORTIME1     0x36
#define                         CCxxx0_WORTIME0     0x37
#define                         CCxxx0_PKTSTATUS    0x38
#define                         CCxxx0_VCO_VC_DAC   0x39
#define                         CCxxx0_TXBYTES      0x3A
#define                         CCxxx0_RXBYTES      0x3B

#define                         CCxxx0_PATABLE      0x3E
#define                         CCxxx0_TXFIFO       0x3F
#define                         CCxxx0_RXFIFO       0x3F





typedef struct S_RF_SETTINGS
{
        uint8_t FSCTRL2;                //自已加的
    uint8_t FSCTRL1;   // Frequency synthesizer control.
    uint8_t FSCTRL0;   // Frequency synthesizer control.
    uint8_t FREQ2;     // Frequency control word, high uint8_t.
    uint8_t FREQ1;     // Frequency control word, middle uint8_t.
    uint8_t FREQ0;     // Frequency control word, low uint8_t.
    uint8_t MDMCFG4;   // Modem configuration.
    uint8_t MDMCFG3;   // Modem configuration.
    uint8_t MDMCFG2;   // Modem configuration.
    uint8_t MDMCFG1;   // Modem configuration.
    uint8_t MDMCFG0;   // Modem configuration.
    uint8_t CHANNR;    // Channel number.
    uint8_t DEVIATN;   // Modem deviation setting (when FSK modulation is enabled).
    uint8_t FREND1;    // Front end RX configuration.
    uint8_t FREND0;    // Front end RX configuration.
    uint8_t MCSM0;     // Main Radio Control State Machine configuration.
    uint8_t FOCCFG;    // Frequency Offset Compensation Configuration.
    uint8_t BSCFG;     // Bit synchronization Configuration.
    uint8_t AGCCTRL2;  // AGC control.
        uint8_t AGCCTRL1;  // AGC control.
    uint8_t AGCCTRL0;  // AGC control.
    uint8_t FSCAL3;    // Frequency synthesizer calibration.
    uint8_t FSCAL2;    // Frequency synthesizer calibration.
        uint8_t FSCAL1;    // Frequency synthesizer calibration.
    uint8_t FSCAL0;    // Frequency synthesizer calibration.
    uint8_t FSTEST;    // Frequency synthesizer calibration control
    uint8_t TEST2;     // Various test settings.
    uint8_t TEST1;     // Various test settings.
    uint8_t TEST0;     // Various test settings.
    uint8_t IOCFG2;    // GDO2 output pin configuration
    uint8_t IOCFG0;    // GDO0 output pin configuration
    uint8_t PKTCTRL1;  // Packet automation control.
    uint8_t PKTCTRL0;  // Packet automation control.
    uint8_t ADDR;      // Device address.
    uint8_t PKTLEN;    // Packet length.
} RF_SETTINGS;

// RF output power = 0 dBm
// RX filterbandwidth = 540.000000 kHz
// Deviation = 0.000000
// Datarate = 250.000000 kbps
// Modulation = (7) MSK
// Manchester enable = (0) Manchester disabled
// RF Frequency = 433.000000 MHz
// Channel spacing = 199.951172 kHz
// Channel number = 0
// Optimization = Sensitivity
// Sync mode = (3) 30/32 sync word bits detected
// Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX
// CRC operation = (1) CRC calculation in TX and CRC check in RX enabled
// Forward Error Correction = (0) FEC disabled
// Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word.
// Packetlength = 255
// Preamble count = (2) 4 bytes
// Append status = 1
// Address check = (11) No address check
// FIFO autoflush = 0
// Device address = 0
// GDO0 signal selection = ( 6)
// GDO2 signal selection = (11) Serial Clock
const RF_SETTINGS rfSettings = {
        0x00,
    0x06,   // FSCTRL1   Frequency synthesizer control.
    0x00,   // FSCTRL0   Frequency synthesizer control.
    0x10,   // FREQ2     Frequency control word, high byte.
    0xb1,   // FREQ1     Frequency control word, middle byte.
    0x3b,   // FREQ0     Frequency control word, low byte.
    0xf6,   // MDMCFG4   Modem configuration.
    0x83,   // MDMCFG3   Modem configuration.
    0x13,   // MDMCFG2   Modem configuration.
    0x22,   // MDMCFG1   Modem configuration.
    0xf8,   // MDMCFG0   Modem configuration.
        
    0x00,   // CHANNR    Channel number.
    0x15,   // DEVIATN   Modem deviation setting (when FSK modulation is enabled).
    0x56,   // FREND1    Front end RX configuration.
    0x10,   // FREND0    Front end RX configuration.
    0x18,   // MCSM0     Main Radio Control State Machine configuration.
    0x16,   // FOCCFG    Frequency Offset Compensation Configuration.
    0x6c,   // BSCFG     Bit synchronization Configuration.
    0x03,   // AGCCTRL2  AGC control.
    0x40,   // AGCCTRL1  AGC control.
    0x91,   // AGCCTRL0  AGC control.
        
    0xe9,   // FSCAL3    Frequency synthesizer calibration.
    0x2a,   // FSCAL2    Frequency synthesizer calibration.
    0x00,   // FSCAL1    Frequency synthesizer calibration.
    0x1f,   // FSCAL0    Frequency synthesizer calibration.
    0x59,   // FSTEST    Frequency synthesizer calibration.
    0x81,   // TEST2     Various test settings.
    0x35,   // TEST1     Various test settings.
    0x09,   // TEST0     Various test settings.
    0x29,   // IOCFG2    GDO2 output pin configuration.
    0x06,   // IOCFG0D   GDO0 output pin configuration. Refer to SmartRF?Studio User Manual for detailed pseudo register explanation.
        
    0x04,   // PKTCTRL1  Packet automation control.
    0x05,   // PKTCTRL0  Packet automation control.
    0x00,   // ADDR      Device address.
    0x0c    // PKTLEN    Packet length.
};





void halRfWriteRfSettings(void)
{
       
        Read_Reg_Value=halSpiReadReg(CCxxx0_FSCTRL1);
        halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL2);//自已加的
    // Write register settings
    halSpiWriteReg(CCxxx0_FSCTRL1,  rfSettings.FSCTRL1);
    halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL0);
    halSpiWriteReg(CCxxx0_FREQ2,    rfSettings.FREQ2);
    halSpiWriteReg(CCxxx0_FREQ1,    rfSettings.FREQ1);
    halSpiWriteReg(CCxxx0_FREQ0,    rfSettings.FREQ0);
    halSpiWriteReg(CCxxx0_MDMCFG4,  rfSettings.MDMCFG4);
    halSpiWriteReg(CCxxx0_MDMCFG3,  rfSettings.MDMCFG3);
    halSpiWriteReg(CCxxx0_MDMCFG2,  rfSettings.MDMCFG2);
    halSpiWriteReg(CCxxx0_MDMCFG1,  rfSettings.MDMCFG1);
    halSpiWriteReg(CCxxx0_MDMCFG0,  rfSettings.MDMCFG0);
    halSpiWriteReg(CCxxx0_CHANNR,   rfSettings.CHANNR);
    halSpiWriteReg(CCxxx0_DEVIATN,  rfSettings.DEVIATN);
    halSpiWriteReg(CCxxx0_FREND1,   rfSettings.FREND1);
    halSpiWriteReg(CCxxx0_FREND0,   rfSettings.FREND0);
    halSpiWriteReg(CCxxx0_MCSM0,   rfSettings.MCSM0);
    halSpiWriteReg(CCxxx0_FOCCFG,   rfSettings.FOCCFG);
    halSpiWriteReg(CCxxx0_BSCFG,    rfSettings.BSCFG);
    halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
        halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);        //
    halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
    halSpiWriteReg(CCxxx0_FSCAL3,   rfSettings.FSCAL3);
        halSpiWriteReg(CCxxx0_FSCAL2,   rfSettings.FSCAL2);
        halSpiWriteReg(CCxxx0_FSCAL1,   rfSettings.FSCAL1);  ///
    halSpiWriteReg(CCxxx0_FSCAL0,   rfSettings.FSCAL0);
    halSpiWriteReg(CCxxx0_FSTEST,   rfSettings.FSTEST);
    halSpiWriteReg(CCxxx0_TEST2,    rfSettings.TEST2);
    halSpiWriteReg(CCxxx0_TEST1,    rfSettings.TEST1);
    halSpiWriteReg(CCxxx0_TEST0,    rfSettings.TEST0);
    halSpiWriteReg(CCxxx0_IOCFG2,   rfSettings.IOCFG2);
    halSpiWriteReg(CCxxx0_IOCFG0,   rfSettings.IOCFG0);   
    halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
    halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
    halSpiWriteReg(CCxxx0_ADDR,     rfSettings.ADDR);
    halSpiWriteReg(CCxxx0_PKTLEN,   rfSettings.PKTLEN);
        halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);               
                //for test
}



//发送过程 ,每100ms发送一次
                halRfSendPacket(buf,8);                                                                        //写buffer
               
               
               
               
               
               
               
        void halRfSendPacket(uint8_t *txBuffer, uint8_t size)
        {
                halSpiWriteReg(CCxxx0_TXFIFO, size);
            halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size);        //写入要发送的数据

                halSpiStrobe(CCxxx0_SIDLE);
            halSpiStrobe(CCxxx0_STX);                //进入发送模式发送数据       

    // Wait for GDO0 to be set -> sync transmitted
    //while (!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_GD0));//while (!GDO0);
    // Wait for GDO0 to be cleared -> end of packet
    //while (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_GD0));// while (GDO0);
        //halSpiStrobe(CCxxx0_SFTX);
        }                                                       

使用特权

评论回复
评分
参与人数 1威望 +10 收起 理由
dirtwillfly + 10 很给力!
8
ayl439| | 2016-3-5 10:15 | 只看该作者
给楼主两幅图,也许你就明白了

数据包格式.JPG (110.97 KB )

数据包格式.JPG

功能06的详细解释.JPG (93.05 KB )

功能06的详细解释.JPG

使用特权

评论回复
评分
参与人数 1威望 +10 收起 理由
dirtwillfly + 10 很给力!
9
ayl439| | 2016-3-5 10:20 | 只看该作者
再观察楼主的代码,已经差不多对了,如果非要说还多出来了十个八个mS不知哪儿来的,楼主可以自行深究:lol,CC1101想要用好不容易

使用特权

评论回复
10
ayl439| | 2016-3-5 10:21 | 只看该作者
哦,看错了,一点也不多了,基本刚刚好是楼主这个时间!

使用特权

评论回复
11
usbyt|  楼主 | 2016-3-5 13:05 | 只看该作者
前面GDO0低电平时间是在发送 前导码和同步字你,以及length码,后面高电平时间才是发送data和CRC??

这个感觉咋效率这么低啊:'(

使用特权

评论回复
12
ayl439| | 2016-3-5 14:25 | 只看该作者
想要效率高,简单啊,减少前导码和同步字长度,或者提高发射速率,增加到250K,当然了,这会牺牲一点通讯距离:lol

使用特权

评论回复
13
ayl439| | 2016-3-5 14:26 | 只看该作者
哦,你也可以增加每包的有效数据长度,提高传输效率

使用特权

评论回复
14
1988020566| | 2016-3-7 22:33 | 只看该作者
你的传输数据链多少

使用特权

评论回复
15
1988020566| | 2016-3-7 22:37 | 只看该作者
可以使用nrf的传输

使用特权

评论回复
16
usbyt|  楼主 | 2016-3-12 19:59 | 只看该作者
提示 :     分数未分配完,或分数分配存在错误!

如何分配分数?

使用特权

评论回复
17
ayl439| | 2016-3-13 17:09 | 只看该作者
楼主终于结贴了。。。呵呵

使用特权

评论回复
18
baimiaocun2015| | 2016-3-13 19:20 | 只看该作者
这个都检查下的,特备是关注下程序中的延时程序部分的。

使用特权

评论回复
19
tongbu2015| | 2016-3-14 11:57 | 只看该作者
usbyt 发表于 2016-3-5 00:35
/* Private define ------------------------------------------------------------*/
#define WRITE       ...

这个程序中define定义的东西通多的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

81

帖子

0

粉丝