产品展示
CC1101RTKR代理
点击次数:1486
价格:¥6
更新日期:2025/12/18 10:27:45
生 产 地:中国大陆
产品型号:
商家名片
徐*
联系我时,请说明是阿仪网看到的,谢谢!
- 电话: 07********334
- 手机: 13******513
- 微信:
- 交换名片后展示联系方式 → →
相关标签:CC1101RTKR
详细内容
品牌;TI
型号:CC1101RTKR
封装:QFN-20
包装;3000
数量:800000
年份:13+
全新原厂原装 假一罚十!
TI 授权代理商。
亿威盛世科技有限公司
联系人:徐波
电话:
qq:1134043964
传真:
CC1101是TI公司生产的一种单片、低成本的UHF频段无线收发器,基于IEEE 802.15.4标准开发,主要应用领域为低功耗无线测控。芯片具有无线电唤醒(WOR)、数据包处理、数据缓冲、突发数据传输、清晰信道*估、链接质量指示等功能,内部的参数寄存器和数据传输FIFO可通过SPI接口控制,所需的周边器件很少,使用简单。受限于发射功率和天线结构,CC1101的视距传输距离一般在400~800 m范围内,超出此距离范围则必须由中继设备对无线信号进行放大、转发。本文设计的一种分布式无线测控系统通过局域网对中继设备进行互连,大大降低了系统的无线通信协议复杂性,同时达到了使用无线通信时伴随的低功耗设计要求,具备很强的实际工程应用价值。
最底层的测控基站负责进行工作现场的数据采集和控制指令的执行,测控基站上安装有无线收发器芯片CC1101和天线,通过空中无线信道与中继节点通信。测控基站采用电池供电。
中间层的中继节点负责接收中心计算机发出的控制指令,向底层的测控基站转发,或者接收底层测控基站发出的测量数据,向中心计算机转发。中继节点上安装有无线收发器芯片CC1101和天线,通过空中无线信道与底层的测控基站通信;同时中继节点也具备访问局域网的功能,可以通过外部局域网与中心计算机通信。中继节点采用市电经AC—DC模块变换出的直流电压供电。
中心计算机负责采集所有测控基站的测量数据,进行数据管理,也可以向测控基站发出控制指令。中心计算机通过网络接口连接到外部局域网,与中继节点通信。中心计算机采用市电交流供电。
2 通信协议总体设计
中继节点与中心计算机通过有线局域网通信,类似协议工程上有比较成熟的方案,本文不再详述。
中继节点与测控基站的无线链路层协议涉及到防冲突、节能等问题,直接关系到系统可靠性、可用性指标最终实现,是系统通信协议设计的重点。
系统中依靠无线信道传输的数据归结为4种,简述如下:
①命令帧。当中继节点向测控基站下传控制指令时发出。
②基站应答帧。当测控基站收到中继节点下传的控制指令后,需要向中继节点返回一个基站应答帧,告知指令执行情况。
③中继应答帧。当测控基站向中继节点上传状态信息后,中继节点需要向测控基站返回一个中继应答帧,告知已经收到状态信息。
④测量帧。当测控基站测量到的工作现场数据发生改变后,必须向中继节点发出测量帧,通知中继节点向中心计算机声明更新对应测控基站的记录信息。
为了简化处理流程,系统中传输的所有的数据的帧格式统一采用如下所示的固定长度12字节的格式。
由于CC1101通信时以数据包为最小处理单位,可以也设置CC1101的包长度为12字节,借助CC1101的处理能力屏蔽掉对链路层级别以下的通信协议处理过程。
数据帧内部各数据域定义简述如下:
①同步头。标记一帧数据的开始,CC1101必须在收到与内部设定的同步头值相等的数据后才启动内部电路接收一个数据包。数据帧类型不同,同步头数值也不同。
②地址。每个测控基站都由系统分配一个唯一的2字节标识地址,测控基站只响应地址等于本地标识地址的命令帧或中继应答帧。
③帧类型。用以区分本帧数据属于4种类型中的哪一种。
④数据。本帧需要传输的有效数据,可以是中继节点下传给测控基站的指令,也可以是测控基站上传给中继节点的状态。
⑤CRC。对数据帧前10个字节计算出一个2字节的校验数据,当接收端发现CRC校验错误时将丢弃本帧数据。
低功耗(低于 1GHz)射频收发器;CC1101是高度集成的多通道射频收发器,设计用于315/433/868/915MHZ ISM频带的低功耗无线应用,CC1101是CC1100收发器的升级版本。改善杂散响应,带内相们噪声,输入饱和电不及及输出功率渐升性能,并扩展的频率范围
先说说GDO0和GDO2,这两个东西是搞CC1101很重要的两个东西,它连着你的单片机的IO口。因此你完全可以利用中断来判断当前的模块处于一种什么样的情况,当然这个还跟你怎么去设置IFGDO0和IFGDO2这两个寄存器有关系了,详见CC1101中文手册64页。
不过我的发送没有用中断来做,因为查询够了。当然查询也看你怎么查了,我见到过的有两种,如下:
1.先判断GDO0/GDO2(看你怎么连了)是否变高电平,然后再判断是否变低电平,这么一个过程就是发送一帧数据的过程。
2.判断CC1101的状态寄存器,这个也要看你的设置了,如果你发送完之后是IDLE状态则等待0×01如果发送完之后是接收状态则等待0x0d;
说到发送数据,这里说明一下,CC1101发送数据的时候是先发送前导码和同步字的,然后在发送FIFO数据长度、地址(如果接收端开启了地址过滤)以及FIFO中的数据。
在这里要说明一点:当时我和同事一起做这个的时候发现当低速率的时候他发送的数据我总是接收不到。原因就是我发送完之后等待IDLE的时间太短,所以数据根本就没发完就超时了。
说到寄存器,那CC1101的功能那么多,寄存器自然就很多。其实真正我们需要手动去设置的寄存器却不是很多,大多数寄存器都是SmartRF来自动生成的,在这里说说几个比较重要的寄存器:
FIFOTHR:这个主要是设置发送和接受FIFO能够放的下多少发送和接受的数据,一般来说都只要设置成0×07就可以了,因为如果你数据比较长你可以分包发送或者分包接收即可。
PKTLEN:最大数据包长度设置。
PKTCTRL1:这个寄存器如果你需要地址过滤的话那就需要开启地址过滤,还有就是如果你想在你的数据FIFO最后两个字节放上RSSI的值和LQI值以及CRC_OK的话就需要做相应的设置。
PKTCTRL0:想开启数据白化和CRC校验的话就设置一下咯,当然还有比较重的就是是否是固定长度数据包或者是可变长度数据包,区别就是固定的话那前导码和同步字后就不需要加上FIFO数据长度了,反之则需要加上FIFO数据长度。否则CC1101怎么知道你要发多少数据呢?
MCSM1:这个太重要了,决定了你发送完或者接收完数据后下一个状态是什么。
MCSM0:选择自动校准还是手动校准,听说不校准的话速率低倒关系不大,速率高了可能跑偏了影响就大了。
CC1101的寄存器初始化,是在CC1101工作这前必须做的一件事情,最主要初始化的三个参数是频率,速率,功率。最好是以结构体的方式初始化,否则当你改动速率或者频率或者功率的时候,你还要改变其他几个相关的寄存器,这样做就比较麻烦,我当初的做法是:利用SmartRF,把我需要的频率431,433,435,我需要的速率1.2K,2.4K,4.8K,10K……等等全部配置一边,然后利用截图截下SmartRF的值,然后利用这么一个结构体:
typedef struct
{
u8 IOCFG2;
u8 IOCFG1;
u8 IOCFG0;
u8 FIFOTHR;
u8 SYNC1;
u8 SYNC0;
u8 PKTLEN;
u8 PKTCTRL1;
u8 PKTCTRL0;
u8 ADDR;
u8 CHANNR;
u8 FSCTRL1;
u8 FSCTRL0;
u8 FREQ2;
u8 FREQ1;
u8 FREQ0;
u8 MDMCFG4;
u8 MDMCFG3;
u8 MDMCFG2;
u8 MDMCFG1;
u8 MDMCFG0;
u8 DEVAITN;
u8 MCSM2;
u8 MCSM1;
u8 MCSM0;
u8 FOCCFG;
u8 BSCFG;
u8 AGCCTRL2;
u8 AGCCTRL1;
u8 AGCCTRL0;
u8 WOREVT1;
u8 WOREVT0;
u8 WORCTRL;
u8 FREND1;
u8 FREND0;
u8 FSCAL3;
u8 FSCAL2;
u8 FSCAL1;
u8 FSCAL0;
u8 RCCTRL1;
u8 RCCTRL0;
u8 FSTEST;
u8 PTEST;
u8 AGCTEST;
u8 TEST2;
u8 TEST1;
u8 TEST0;
}Struct_RF_Reg;
做初始化
#If RF_BAUD_RATE == 2400
Struct_RF_Reg My_RF_Config = {
0x0B, // IOCFG2
0x2E, // IOCFG1
0×01, // IOCFG0
0×07, // FIFOTHR
0xB3, // SYNC1
0x9C, // SYNC0
0×40, // PKTLEN
0x0C, // PKTCTRL1
0×45, // PKTCTRL0
0×00, // ADDR
0×00, // CHANNR
0×06, // FSCTRL1
0×00, // FSCTRL0
#If RF_FREQUENCY == 431
0×10, // FREQ2
0×93, // FREQ1
0xB1, // FREQ0
#elif RF_FREQUENCY == 433
0×10, // FREQ2
0xA7, // FREQ1
0×62, // FREQ0
#elif RF_FREQUENCY == 435
0X10,
0XBB,
0X13,
#Endif
0xF6, // MDMCFG4
0×83, // MDMCFG3
0×13, // MDMCFG2
0×22, // MDMCFG1
0xF8, // MDMCFG0
0×15, // DEVIATN
0×07, // MCSM2
0x3C, // MCSM1
0×18, // MCSM0
0×16, // FOCCFG
0x6C, // BSCFG
0×03, // AGCCTRL2
0×40, // AGCCTRL1
0×91, // AGCCTRL0
0×87, // WOREVT1
0x6B, // WOREVT0
0xFB, // WORCTRL
0×56, // FREND1
0×10, // FREND0
0xE9, // FSCAL3
0x2A, // FSCAL2
0×00, // FSCAL1
0x1F, // FSCAL0
0×41, // RCCTRL1
0×00, // RCCTRL0
0×59, // FSTEST
0x7F, // PTEST
0x3F, // AGCTEST
0×81, // TEST2
0×35, // TEST1
0×09 // TEST0
};
当然我这里只例举了2.4k的速率,其他只要改变宏定义就可以了。
最后调用一个
TI_CC_SPIWriteBurstReg(TI_CCxxx0_IOCFG2, &(RFConfig -> IOCFG2), 47);
函数就把47个寄存器都写进去了,因为这47个寄存器地址都是递增的,所以写个Burst就搞定了,不需要一个一个写那么复杂。
CC1101RTKR

