CC1101 主机与从机之间进行1对1通信,主机发送一包数据,从机接收到主机的数据后给主机返回一包数据,GDO0引脚配置是0x06,经过试验发现主机发送一包数据数据后,有时候从机收不到,主机发送100包,从机只收到90包左右。通过示波器检测GDO0引脚,当未收到主机的数据时,GDO0引脚也不发生跳变。主机发送数据时,发送每一包数据GDO0引脚都有跳变,所以我认为主机每包数据都发送成功。
以下是我的主从机配置帮忙检查以下是否有误。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{CC1101_IOCFG0, 0x06},
{CC1101_FIFOTHR, 0x47},
{CC1101_PKTCTRL0, 0x05},//0x05 default
{CC1101_CHANNR, 0x01},
{CC1101_FSCTRL1, 0x06},
{CC1101_FREQ2, 0x0F},
{CC1101_FREQ1, 0x62},
{CC1101_FREQ0, 0x76},
{CC1101_MDMCFG4, 0xF6},//f6
{CC1101_MDMCFG3, 0x43},//43
{CC1101_MDMCFG2, 0x13},//13 GFSK
{CC1101_DEVIATN, 0x15},
{CC1101_MCSM0, 0x18},
{CC1101_FOCCFG, 0x16},
{CC1101_WORCTRL, 0xFB},
{CC1101_FSCAL3, 0xE9},
{CC1101_FSCAL2, 0x2A},
{CC1101_FSCAL1, 0x00},
{CC1101_FSCAL0, 0x1F},
{CC1101_TEST2, 0x81},
{CC1101_TEST1, 0x35},
{CC1101_MCSM1, 0x30},
以下是我的接收函数
INT8U CC1101RecPacket( INT8U *rxBuffer )
{
INT8U status[2];
INT8U pktLen;
INT16U x = 0;
if ( CC1101GetRXCnt( ) != 0 )
{
pktLen = CC1101ReadReg(CC1101_RXFIFO); // Read length byte
if( ( CC1101ReadReg( CC1101_PKTCTRL1 ) & ~0x03 ) != 0 )
{
x = CC1101ReadReg(CC1101_RXFIFO);x=x;
}
if( pktLen == 0 ) { return 0; }
else { pktLen --; }
CC1101ReadMultiReg(CC1101_RXFIFO, rxBuffer, pktLen); // Pull data
CC1101ReadMultiReg(CC1101_RXFIFO, status, 2); // Read status bytes
CC1101ClrRXBuff( );
if( status[1] & CRC_OK ) { return pktLen; }
else { return 0; }
}
else { return 0; } // Error
}
|