请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC1101 您好!
我想在 C1101中克隆以下信号:
1位的长度:
0.00062秒= 620微秒= 1613位/秒
我已使用 SmartRF 对芯片进行如下配置:
(不确定数据速率是否正确)。
这是传输的最终结果:
不知道我犯了什么错误、有什么想法吗?
谢谢。
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.
您好!
我想在 C1101中克隆以下信号:
1位的长度:
0.00062秒= 620微秒= 1613位/秒
我已使用 SmartRF 对芯片进行如下配置:
(不确定数据速率是否正确)。
这是传输的最终结果:
不知道我犯了什么错误、有什么想法吗?
谢谢。
这对我不起作用、
我的代码可能有问题?
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 函数)。
谢谢。