embeddev 发表于 2011-5-31 17:24:49

cc1101物理地址可以大于255吗?

cc1101硬件物理地址只有1字节,0~255,我们应用经常几万个地址,现在除了软件地址之外,没有办法扩充硬件物理地址吗?

embeddev 发表于 2011-6-1 13:32:02

ddd!最近把si4432和cc1101都调通了!想深入了解一下应用!

zhang..yb 发表于 2011-6-1 13:47:00

在哪个平台上调的? 我在 STM32 上调,还有点问题没解决,可交流吗?

scty 发表于 2011-6-1 16:52:53

在相同的频率、波特率、前导长度、同步字的情况下,对侧能收到数据,但CC1101与Si4432的检查CRC等的位置是不同的,这里需要修改或者是数据包内加识别代码

gavin_li 发表于 2011-6-5 18:50:02

楼主如何设置地址过滤的啊?
发送这样定义
0x05,   // PKTCTRL1Packet automation control.
    0x05,   // PKTCTRL0Packet automation control.
    0x01,   // ADDR      Device address.
    0x20 //DataSize    // PKTLEN    Packet length.

发送数据如下:
INT8U TxBuf={0x08,0x0A,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};       
INT8U TxBuf1={0x0A,0x0A,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07};       
INT8U TxBuf2={0x0A,0x08,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06};       
INT8U TxBuf3={0x08,0x0A,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};
while(1)
        {
          leng=10;
          halRfSendPacket(TxBuf,leng);        // Transmit Tx buffer data           
          halRfSendPacket(TxBuf1,leng);        // Transmit Tx buffer data           
          halRfSendPacket(TxBuf2,leng);        // Transmit Tx buffer data           
          halRfSendPacket(TxBuf3,leng);        // Transmit Tx buffer data           
        }

接收定义如下:
0x05,   // PKTCTRL1Packet automation control.
    0x05,   // PKTCTRL0Packet automation control.
    0x08,   // ADDR      Device address.
    0x40 //DataSize    // PKTLEN    Packet length.

接收函数如下:
INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
{
    INT8U status;
    INT8U packetLength;
        //INT8U i=(*length)*4;// 具体多少要根据datarate和length来决定
       
    halSpiStrobe(CCxxx0_SRX);                //进入接收状态
        delay(2);
    while (!GDO0);
    while (GDO0);       
    if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
        {
      packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
                //packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
               
      if (packetLength <= *length )                 //如果所要的有效数据长度小于等于接收到的数据包的长度
                {
            halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
            *length = packetLength;                                //把接收数据长度的修改为当前数据的长度
      
            // Read the 2 appended status bytes (status = RSSI, status = LQI)
            halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2);         //读出CRC校验位
                        halSpiStrobe(CCxxx0_SFRX);                //清洗接收缓冲区
            return (status & CRC_OK);                        //如果校验成功返回接收成功
      }
               else
                {
            *length = packetLength;
            halSpiStrobe(CCxxx0_SFRX);                //清洗接收缓冲区
            return 0;
      }
    }
        else
        return 0;
}

现在情况是第一次能正确接收
INT8U TxBuf={0x08,0x0A,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
INT8U TxBuf3={0x08,0x0A,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};
第二次开始就不能接收
INT8U TxBuf3={0x08,0x0A,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};了。奇怪。是不是发送速率太快的原因。
另外怎么目标物理地址是第一个字节呢?

jssz_hf 发表于 2011-6-6 22:10:16

mark 同样遇到地址滤波的问题。。。希望楼主指点一二

gavin_li 发表于 2011-6-7 10:05:19

不定长确实是先长度,后地址。 我的程序先写长度,后写数据。所以收到)0x08开始的数据是正确的。
但是为什么如果中间有其他地址的干扰数据,最后面的那个数据就无法正确接收就不知道了。

jssz_hf 发表于 2011-6-7 10:38:58

地址滤波 需要在接收端程序判断地址数据吗?我判断了但是无法接收。我用串口显示来判断的。QQ指教下:664974392

gavin_li 发表于 2011-6-7 11:43:10

不需要。硬件自动处理了。

jssz_hf 发表于 2011-6-7 12:40:18

回复【9楼】gavin_li
-----------------------------------------------------------------------

加个好友可以吗?QQ664974392

jssz_hf 发表于 2011-6-7 13:02:21

回复【9楼】gavin_li
-----------------------------------------------------------------------

地址滤波+WOR模式正在努力调试中。希望共同进步 gavin_li

gavin_li 发表于 2011-6-7 13:24:01

你的Q加不了。要验证。加我的吧22124010.验证发送CC1101即可。

jssz_hf 发表于 2011-6-7 14:07:22

回复【12楼】gavin_li
-----------------------------------------------------------------------

orzorzorzorz 发表于 2011-8-1 11:19:29

地址超过255只能在软件层面进行区分了
还是推荐软件层面操作好,可扩展性好
页: [1]
查看完整版本: cc1101物理地址可以大于255吗?