搜索
bottom↓
回复: 7

CC1101模块地址检测通信不成功

[复制链接]

出0入0汤圆

发表于 2012-6-25 17:48:17 | 显示全部楼层 |阅读模式
最近调试CC1101模块~~~频率为433M~~~在无地址检测,可变长度模式下,通信正常~~~当我改成地址检测,将地址设置成相应地址,其它设置不变时,通信就不成功了~~~问题就出现在地址检测这部分,但我搞了好久都没调试通,现在请大家指点一下~~~
我的测试过程是这样的:
功能:发射模块向接收模块发送8字节数据,(即1,2,3,4,5,6,7,8)
发射和接收都配置成:地址检测,可变长度数据,

0x05,// PKTCTRL1 Packet automation control.

0x05,// PKTCTRL0 Packet automation control.

0x01,// ADDR Device address.

0x20,// PKTLEN Packet length.
发送端(2秒一次):

T TX_Buff[0] = 10;
//字节长度,这个字节长度,需要加上2( 长度1字节和地址1字节,还是
                    //只是有用数据字节,即1,2,3,4,5,6,7,8)
Tx_Buff[1] = 1;
//地址
halRfSendPacket(Tx_Buff,10);
// Transmit Tx buffer data

接收端:

leng = 10;
//leng的长度=8+2(长度1字节+地址1字节)


if(halRfReceivePacket(RxBuf,&leng))

{
    Led = ~Led;
}

测试结果ED灯不闪,接收端收不到数据,RXFIFO中的数据字节数为0


疑问:1、匹配地址:
                发送端:是发送数据包中,紧跟在数据长度后的ADDR字节的地址吗?
                接收端:是初始化时写入地址寄存器里的自身地址吗?
           2、TX_FIFO中的数据长度(Length field),它包插了哪里内容,是数据长度所占的
              1 字节+地址长度所占的一字节+有用数据的n字节,即Length = 1+1+n(个字节)
              还是,数据字节只是有用的数据长度,即Length = n吗?
           3、数据包格式:如果我设置成地址检测,则,发送的数据应该是,前导码+同步词汇
                                   +   数据长度+目标地址+有用数据+CRC状态字,当接收模块接收到
                                   数据后,从接收到的数据包中,提取地址(即长度字节后的地址)与
                                   自身地址作匹配对吗?   

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-6-25 23:12:04 | 显示全部楼层
1、匹配地址:
              发送端:对于变长数据包模式,接收端ADDR寄存器的地址是发送端紧跟在数据长度后的数据
              即发送端数据包格式=前导+同步字+长度+ADDR地址+数据负载+2个CRC
              接收端:CC1101的地址滤波,从功能上,是针对接收端而言,
              即接收端需要设置寄存器ADDR为自己定义的地址(发送端如果没有地址滤波,则可无视ADDR),

           2、TX_FIFO中的数据长度(Length field)
            长度为数据负载的长度,不包括长度字节本身,对于接收端采用地址滤波功能,即 长度字节=数据负载长 度=1byte 地址+有用数据的n字节,即Length = 1+n(个字节)
           3、数据包格式:设置成地址检测,则发送的数据是,前导码+同步词汇
                                   +   数据长度+目标地址+有用数据+CRC状态字,当接收模块接收到
                                   数据后,从接收到的数据包中,提取地址(即长度字节后的地址)与
                                   自身地址(寄存器ADDR)作匹配,此过程硬件自动完成。   

出0入0汤圆

 楼主| 发表于 2012-6-26 13:56:17 | 显示全部楼层
nicholas@ 发表于 2012-6-25 23:12
1、匹配地址:
              发送端:对于变长数据包模式,接收端ADDR寄存器的地址是发送端紧跟在数据长度 ...

终于调通了,非常感谢nicholas@~~~~
原来我一直认为,数据长度是自己计算并人工增加在数据包里的,即那个length field是要人工增加的,
而实际是,这个数据长度是由芯片自动添加的,我人工加了这个数据长度,实际发送时就变成了:前导码+同步词汇+数据长度+(人工)数据长度+地址+数据负载+CRC状态字~~~
所以我的地址对不上,怎么也接收不到~~~
还是,没认真理解数据手册的结果~~~

出0入0汤圆

发表于 2012-7-29 17:59:40 | 显示全部楼层
我在调试CC1100E时,碰到个其怪问题,地址校验功能不起作用(无论什么地址,都能收到对方发来的包),请用过的朋友指点下,寄成存器如下:
#define IOCFG0     0x06   //GDO0 configuration
#define FIFOTHR    0x07   //RX attenuation and RXFIFO,TXFIFO threshold config
#define PKTLEN     0x3C   //Max use active date(not include sync.crc.ext...
#define PKTCTRL1   0x05   //Data frame mesg.eg add two stae and rssi,address check
#define PKTCTRL0   0x05   //Packet Automation Control eg.frame lenth
#define ADDR       0x05   //Unit address----
#define CHANNR     0x01   //Physical Channel ----

出0入0汤圆

 楼主| 发表于 2012-7-30 13:32:02 | 显示全部楼层
johnny_dxj 发表于 2012-7-29 17:59
我在调试CC1100E时,碰到个其怪问题,地址校验功能不起作用(无论什么地址,都能收到对方发来的包),请用过的朋 ...

这是你接收机的CC1100的配置吗?方不方便把你的发送机与接收机的这几个寄存器的配置都发上来,让大家帮你一齐探讨一下~~

出0入0汤圆

发表于 2012-7-30 14:03:04 | 显示全部楼层
我现在这个只是测试程序,收发寄存器配置都是一样的,串口发送出去,收到后通过CC1100E发出,另一个CC1100e接收后串口显示,现在收发包都是正确的,就是地址过滤这个功能没实现,我发出去的地址与接收目标板不同时上面也能收!

出0入0汤圆

发表于 2012-7-30 14:08:14 | 显示全部楼层
johnny_dxj 发表于 2012-7-30 14:03
我现在这个只是测试程序,收发寄存器配置都是一样的,串口发送出去,收到后通过CC1100E发出,另一个CC1100e接收 ...

以下是发送程序:Tx_buffer首字节为目标板地址
void Spi_Write_Packet(unsigned char *Tx_buffer,unsigned char size)  
{   
   unsigned char i;
   Spi_Write_Byte(CC_TXFIFO,size);             //Write size to TXFIFO
   Spi_Write_Burst(CC_TXFIFO,Tx_buffer,size);  //Write daat to TXFIFO
   Spi_Write_Strobe(CC_STX);                   //Start transmit   
   i = 0;  
   
   while (GDO0_L)                              //Wait GDO0 to be set
   {
      if (i > 10) break;                       //Overtime jump out---------------------
      delay_us(300);                              
      i++;                                       
   }
   i = 0;   
   while (GDO0_H)                              //Wait GDO0 to be clear
   {
      if (i > 10) break;                       //Overtime jump out-------------------------
      delay_us(300);                           
      i++;                                    
   }  
   delay_us(300);                              //May be remove TBD test----------------------
   Spi_Write_Strobe(CC_SFTX);                  //Clear TXFIFO
   Spi_Write_Strobe(CC_SIDLE);                 //Go to sidle
   Spi_Write_Strobe(CC_SRX);                   //Go to RX mode
}

出0入0汤圆

发表于 2012-10-10 00:43:53 | 显示全部楼层
我得注意这点了,谢谢各位大侠····
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 10:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表