This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1101:克隆 OOK 信号

Guru**** 2543240 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/845447/cc1101-cloning-an-ook-signal

器件型号:CC1101

您好!

我想在 C1101中克隆以下信号:

1位的长度:

0.00062秒= 620微秒= 1613位/秒

我已使用 SmartRF 对芯片进行如下配置:

(不确定数据速率是否正确)。

这是传输的最终结果:

不知道我犯了什么错误、有什么想法吗?

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我会尽快查看并回复您。 请多多包涵。

    谢谢、

    PM

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    对我来说还行 下面是我在设置为0Hz 跨度的频谱分析仪上得到的结果。 SmartRF 上的数据速率设置 = 1.6kbps

    您的 SDR 设置可能已关闭。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这对我不起作用、

    我的代码可能有问题?

    void CC1101:::cmdStrobe (byte cmd)
    {
    CC1101_Select (); //选择 CC1101
    WAIT_MISO (); //等待 MISO 变为低电平
    spi.transfer (cmd); //发送选通命令
    CC1101_DESELECT (); //取消选择 CC1101
    }
    
    int CC1101::sendData (CCPACKET 数据包)
    {
    字节 marcState;
    int res =-1;
    
    //声明为处于 Tx 状态。 这将避免在
    以下情况下接收数据包://传输
    rfState = RFSTATE_TX;
    
    //输入 RX 状态
    cmdStrobe (CC1101_SRX);
    rfState = RFSTATE_RX;
    
    int tries = 0;
    //检查在
    (tries +< 1000 &&((marcState = readStatusReg (CC1101_MARD)))时是否已输入 RX 状态!0xCST1F 和0xCST1F)
    
    如果(marcState == 0x11) // RX_overflow
    cmdStrobe (CC1101_SFRX); //刷新接收队列
    }
    如果(尝试>= 1000){
    // TODO:MarcState 有时永远不会进入预期状态;这是一种黑客攻击权变措施。
    返回-2;
    }
    
    delayMicroseconds (500);
    
    if (packet.length > 0)
    {
    //设置 PKTLEN
    writeReg (CC1101_PKTLEN、packet.length);//PKTCTRL0=0x0 (固定长度)
    //将数据写入 TX FIFO
    writeBurstReg (CC1101_TXFIFO、packet.data、packet.length);
    
    // CCA 被启用:只有当通道被清除时才会进入 TX 状态
    cmdStrobe (CC1101_STX);
    rfState = RFSTATE_TX;
    }
    
    //检查是否进入 TX 状态(STATE = RxTx趋 稳)
    marcState = readStatusReg (CC1101_MARCSTATE)& 0x1F;
    if ((marcState!= 0x13)&&(marcState!= 0x14)&&(marcState!= 0x15)
    {
    cmdStrobe (CC1101_sidle); //进入空闲状态
    cmdStrobe (CC1101_SFTX); //刷新 Tx FIFO
    cmdStrobe (CC1101_SRX); //返回到 RX 状态
    rfState = RFSTATE_RX;
    
    
    return -3;
    }
    
    
    //等待数据包传输结束
    WAIT_GDO0_LOW ();//IOCFG0=0x6 /*在发送/接收同步字后生效,在数据包结束时失效。*//
    
    检查 TX FIFO 是否为空
    if ((readStatusReg (CC1101_TXTES= 0x7BYF)= 0x7F)
    RES = 1;
    
    cmdStrobe (CC1101_sidle); //输入空闲状态
    cmdStrobe (CC1101_SFTX); //刷新 Tx FIFO
    
    //返回到 RX 状态
    cmdReg Strobe (CC1101_SRX);
    rfState = RFSTATE_RX;
    
    返回 res;
    }
    
    
    void main (){
    
    uint8_t CODE_1_1[]={0x3、0x8E、0x38、0xE3、0x8E、0x38、0xFC、0xCC、0xB2、0xD2、0xD101、0x4、0xCC101
    
    ;0x1、0x1
    、0x1、0x1、0x1、0x1、0x1、0x1、0x1、0x1、0x1、0x1、0x1、0x1、1、0x1、1、1、1、1、1、1、1、1、1、1、1、1、0x1、1、1、1、1
    CC1101.writeReg (CC1101_FREQ0、0x62);
    
    CC1101.writeReg (CC1101_MDMCFG4、0xF6);//CHANBW + DRREG_E
    CC1101.writeReg (CC1101_MDMCFG3、0x0C);//DRATE_M CC1101.writeMode
    (CC1101.writeReg);/MDCMC1101_M CC1101.writeMode (0x301.writeReg) 无同步/前导码
    CC1101.writeReg (CC1101_MDMCFG1、0x23);//无 FEC
    CC1101.writeReg (CC1101_MDMCFG0、0xf8);//通道间距
    
    CC1101.writeReg (CC1101_PKTCTRL0、 0x0);//固定长度,无 CRC
    CC1101.writeReg (CC1101_PKTCTRL1,0x4);//无前导码质量检查,无地址检查
    
    字节 PA_table[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//433Mhz,pot1 cc101
    
    ;1 cc101_writeReg
    
    
    (0x101,0x101);1 cc101_t1eReg (CC101,1 cc101 1)
    0x00);
    CC1101.writeReg (CC1101_FSCAL0、0x1F);
    
    CC1101.writeReg (CC1101_IOCFG0、0x6);/*在发送/接收同步字时生效、并在数据包结束时失效。 在 RX 中、当由于地址或最大长度过滤而丢弃了封包或对讲机进入 RXFIFO_OVERflow 状态时、该引脚也会取消置位。 在 TX 中、如果 TX FIFO 下溢、引脚将失效。*/
    CC1101.writeReg (CC1101_IOCFG1、0x2e);
    CC1101.writeReg (CC1101_IOCFG2、0x2e);
    
    CC1101.writeReg (CC1101_MCSM0、0x18);// PO_RX=0x64或 Rx64>从空闲状态返回到 RX = 0x64时、自动超时、自动校准 RX = 0x64或 Rx64 = 0x64 (当从 RX = 0x64或 Rx64 = 0x64或 Rx64) 
    s_autocal=0x1、在转至 RX 或 TX 或返回空闲 CC1101.writeReg (CC1101_MCSM1、0x20)时自动校准;// cca_mode=0x2 =>、除非当前接收到数据包。 CC1101.writeReg (CC1101_MCSM2、0x7);//RX_TIME =>针对 WOR 模式和正常 RX 操作在 RX中 进行同步字搜索超时。 该超时值与编程的 EVENT0超时值相关=(0x7 =直到数据包结束。) packet.length = sizeof (code_1);

    memcpy (packet.data、code_1、packet.length);

    cc1101.sendData(packet); }

    请假设所有未提及的功能都正确、并且芯片已正确初始化。 (请关注 sendData 函数)。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我将审核您的代码、并在本周返回给您。

    感谢您的耐心等待。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    由于无法预见的情况、我无法解决您的问题。 我将在几天前处理这一问题。

    感谢您的耐心。

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我正在处理这个问题。 很抱歉、由于我们正在清除一些积压工作、因此耽误了我们的时间。

    感谢您的耐心等待。

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、我等您有空的时候。