关于nRF905求助,多点通信出错问题?
我一个主机,三个从机做实验(以后要带几百个从机),都用的是用同一的固定的频率,通过改变地址,将数据发到从机上
现在问题是,本来我要发到1号机上,有时却发到了2号,或3号机上,反正就是不受控制。乱了
资料上不是有地址检测,频率检测吗,可是感觉一点都没有用呀,特别是CD检测功能!
这是我接收程序,麻烦大家看一下,,或是大家提点建议,怎么处理好呀
void RxPacket(void)
{
SetRxMode(); // Set nRF905 in Rx mode
Delay(10);
if(DR&&AM)//数据校验正确,而且地址也匹配
{
ReadPacket(RxBuffer,32);//读数据
LED=1;//接收到主机发给自己的数据,指示灯开
for(i=0;i<32;i++)
{
send_UART(RxBuffer[i]);//发回串口显示
}
}
}
void ReadPacket(uchar *p,uchar Len) //读数据
{
uchar i;
TRX_CE=0; //进入空闲模式,读数据
CSN=0; // Spi enable for write a spi command
SPI_ByteWrite(RRP); //读RxPayload
for (i = 0 ;i < Len ;i++)
{
*p = SPI_ByteRead();
p++;
}
CSN=1 ;
while (AM||DR); //等待读取数据完毕,如果数据被读出,905自动将DR=0,AM=0
TRX_CE=1; //回到继续接收模式
}
配置
void Config905(uchar *Pointer)
{
uchar i;
CSN=0;
Delay(1); // Spi enable for write a spi command
SPI_ByteWrite(WC); // Write config command写放配置命令
SPI_ByteWrite(CH_NO_FREQ_430_0MHz &0xff); //字节0 中心频率低8位 0x4c
SPI_ByteWrite(PA_PWR_10dBm | HFREQ_PLL_433MHz); //发射+10dBm,发射频率433MHz,中心频率第9位=0 0x0c
SPI_ByteWrite(TX_AFW_4BYTE | RX_AFW_4BYTE); //接收地址宽度4字节,发送地址宽度4字节 0x44
SPI_ByteWrite(RX_PW_32BYTE); //接收数据宽度32字节 0x20
SPI_ByteWrite(TX_PW_32BYTE); //发送数据宽度32字节 0x20
for (i=0;i<4;i++) //接收有效地址第1字节
{
SPI_ByteWrite(*Pointer);
Pointer++;
}
SPI_ByteWrite(CRC16_EN | XOF_16MHz); //CRC16模式使能,晶体振荡器频率16MHz //0xd8
// SPI_ByteWrite(CRC8_EN | XOF_16MHz); //CRC8模式使能,晶体振荡器频率16MHz //0x58
CSN=1; // Disable Spi
} |