找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10173|回复: 3
收起左侧

CC1100无线芯片介绍

[复制链接]
ID:75926 发表于 2015-4-3 00:10 | 显示全部楼层 |阅读模式
CC1100/CC1101是Chipcon(已被TI收购)推出的一款低成本单片射频的UHF收发器。该芯片电路主要设定为在315、433、868和915MHz的ISM(工业,科学和医学),集成了一个软件可编程的调制解调器。该调制解调器支持2-FSK、GFSK和MSK调制格式,数据传输率最高可达500kbps。通过开启集成在调制解调器上的前向误差校正选项,能使性能得到提升。CC1100/CC1101硬件支持数据包处理、数据缓冲、突发数据传输、清晰信道评估、连接质量指示和电磁波激发MCU可以通过SPI接口与CC1100进行命令和数据交换。CC1100/CC1101主要应用于低功耗无线应用设计。
CC1101在CC1100基础上主要进行以下改进
改善杂散响应,饱和电平输入更高;
连续频率波段的扩展:
      CC1100: 400-464 MHz 和800-928 MHz;
      CC1101: 387-464 MHz 和779-928 MHz;
CC1101和CC1100二者在软件编程上完全兼容;
更高效能的功率输出,能量越集中,信号传输就越远;
更紧密的相位噪声更好的改善邻道功率(ACP)的性能,改善了近距离信号堵塞现象。
虽然CC1100芯片还存在,但鉴于CC1101的改进特性,我公司研制的模块已经从09年开始全部采用CC1101芯片。为便于用户开发,我们提供配套评估套件,为产品开发保驾护航,使无线应用开发大大加速,并避免不必要的误区。
CC1100/CC1101本身通信距离在300米左右,在某些特殊应用中,需要更远距离,RFC1100A模块就是在原有CC1100/CC1101模块外围电路的基础上设计入功率放大电路,以提高发射功率(发射功率高达20dBm(约100mW),从而直接提升模块的通信距离(600米以上),满足各种应用问题,让无线应用,距离不再是问题。
基本特点
工作频率:(模块:387-464MHZ)
瞬间最大工作电流: <80mA;
最大发射功率: 10mW (+10dBm);
315/433/868/915MHZ的ISM频段;
支持2-FSK、GFSK和MSK调制方式;
接收灵敏度在1200波特率下-110dBm;
通讯速率最低1.2 kbps,最大500kbps;
模块峰值电流<300mA,平均电流80mA,通讯距离500米以上;
单独的64字节RX和TX数据FIFO缓冲区;
内置硬件CRC 检错可确保数据可靠传输;
支持RSSI强弱信号检测和载波侦听功能;
快速频率变动合成器带来的合适的频率跳跃系统;
通信地址(256个)工作频率都可以通过SPI编程设置;
可编程控制的输出功率,对所有的支持频率可达+10dBm;
WOR功能可设置待机、接收状态定时切换时间比例以降低功耗;
典型主要应用
车辆监控、遥控、遥测、水文气象监控
无线标签、身份识别、非接触RF智能卡
小型无线网络、无线抄表、门禁系统、小区传呼
工业数据采集系统、无线232数据通信、无线485/422数据通信
无线数据终端、安全防火系统、无线遥控系统、生物信号采集[url=][/url]

回复

使用道具 举报

ID:75926 发表于 2015-4-3 00:11 | 显示全部楼层
                                                                                                BK2411 是由博通(BEKEN)推出一款国产2.4G无线收发芯片,与nRF24L01 硬件引脚兼容,软件上和nRF24L01也是基本相同,可以说是nRF24L01的国产仿制品,针对工业控制、门禁、考勤、监控、安防等行业应用特点推出。
【模块】RF2411B

【说明】RF2411B是基于BK2411芯片开发而成的无线数传模块

【应用领域】
车辆监控、遥控、遥测、小型无线网络、无线抄表、门禁系统、小区传呼、工业数据采集系统、无线标签、身份识别、非接触RF智能卡、小型无线数据终端、安全防火系统、无线遥控系统、生物信号采集、水文气象监控、机器人控制、无线232数据通信、无线485/422数据通信、数字音频、数字图像传输等。
模块 尺寸
34mm-17.5mm 板厚:1mm
基本特性
(1) 2.4Ghz 全球开放频段免许可证使用
(2) FSK调制使其拥有更好的灵敏度,GFSK调制给予了更好的频率效率
(3) 拥有1Mbps或者2Mbps的空中数据传送速率
(4) 可编程的输出功率有:-35, -25, -15, -5, 0, 5 dBm
(5) 在0 dBm的输出功率下,发送模式消耗14mA的功耗;
(6) 在1Mbps数据传送速率下,接受模式消耗21mA的功耗
(7) 允许+/- 60ppm 16 MHz的晶振
(8) 具有三级可变长度的有效载荷,长度可以1到32字节。或者一级可变长度的有效载荷,长度为1-255字节
(9) 自动数据处理功能
(10)适合于1:6星形网络的6数据通道,可以同时接收6个不同频率通道的数据包
(11)供应电源为1.9V到3.6V
(12)在POWERDOWN模式下为3uA的直流电流,在standby-I模式下为410uA直流电流
(13)带有最大时钟速率为8Mbps MCU的4针SPI接口
(14)RF2411有20个固定引脚,4x4 mm QFN的封装

优点
发射功率大(5 dBm),所以最大通信距离要不nRF24L01远一些。大批量使用价格更低。
缺点
待机时功耗、正常模式下功耗都比nRF24L01要大,且收发状态切换时间比nRF24L01长。

编程指南
配置BK2411模块是通过SPI方式进行的,可配置为FIFO方式和直接方式,我们推荐BK2411工作于FIFO收发模式,这种工作模式下,系统的程序编制会更加简单,并且稳定性也会更高,因此,下文着重介绍把BK2411配置为FIFO收发模式的器件配置方法。
使用BK2411模块无需掌握任何专业无线或高频方面的理论,读者只需要具备一定的C语言程序基础即可。其中配置BK2411主要包括载波频率、调制方式、数据发送速率、CRC校验、前导码、同步字、数据头、地址等,本文档没有涉及到的问题,读者可以参考BK2411官方手册或向我们寻求技术支持。同时,为便于用户开发,我们提供系列配套评估套件,为产品开发保驾护航,使无线应用开发大大加速,并避免不必要的误区。
程序分析命令寄存器宏定义
//详细请参照英文PDF文档第16-17页
#define READ_REG                0x00            //读操作寄存器命令
#define WRITE_REG               0x20            //写操作寄存器命令
#define RD_RX_PLOAD             0x61            //读接收到数据命令
#define WR_TX_PLOAD             0xA0            //写待发送数据命令
#define FLUSH_TX                0xE1            //刷新发送FIFO命令
#define FLUSH_RX                0xE2            //刷新接收FIFO命令
#define REUSE_TX_PL             0xE3            //数据重发命令
#define W_TX_PAYLOAD_NOACK_CMD  0xb0   //在发送模式下使用,关闭自动应答
#define W_ACK_PAYLOAD_CMD       0xa8
//在接收模式下使用,将数据和ACK一起写到通道0的FIFO
#define ACTIVATE_CMD            0x50        //用于激活处于掉电模式或待机模式
#define R_RX_PL_WID_CMD         0x60    //从FIFO最高开始读数据
#define NOP                     0xFF      // 空操作
工作方式配置寄存器宏定义
//详细请参照英文PDF文档第19-24页.
#define CONFIG                  0x00   
//配置寄存器。主要配置工作方式
#define EN_AA                   0x01   
//各通道自动应答设置寄存器,打开或关闭通道P0-P5的ACK      
#define EN_RXADDR               0x02   
//各通道选择寄存器,用于打开或关闭通道P0-P5
#define SETUP_AW                0x03   
//地址长度寄存器,用于设置地址长度,最小3字节,最大5字节
#define SETUP_RETR              0x04   
//设置自动发送时间间隔
#define RF_CH                   0x05   
//工作频率设置寄存器,用于设置无线工作频率
#define RF_SETUP                0x06   
// RF模式配置,用于设置功率大小,空中速率等
#define STATUS                  0x07   
//状态寄存器
#define OBSERVE_TX              0x08   
//发送检测寄存器
#define CD                      0x09   
//载波侦听寄存器,用于检测空中是否有无线信号
#define RX_ADDR_P0              0x0A    //          P0接收地址
#define RX_ADDR_P1              0x0B    //          P0接收地址
#define RX_ADDR_P2              0x0C    //          P1接收地址
#define RX_ADDR_P3              0x0D    //          P2接收地址
#define RX_ADDR_P4              0x0E    //          P2接收地址
#define RX_ADDR_P5              0x0F    //          P3接收地址
#define TX_ADDR                 0x10    //          发送地址
#define RX_PW_P0                0x11    //          P0接收数据长度
#define RX_PW_P1                0x12    //          P1接收数据长度
#define RX_PW_P2                0x13    //          P2接收数据长度
#define RX_PW_P3                0x14    //          P3接收数据长度
#define RX_PW_P4                0x15    //          P4接收数据长度
#define RX_PW_P5                0x16    //          P5接收数据长度
#define FIFO_STATUS             0x17    //      FIFO状态寄存器,检测FIFO状态
#define PAYLOAD_WIDTH           0x1f    //      address 发送数据长度设置寄存器
//RF2411状态寄存器,详细请参照英文PDF文档第19页
#define STATUS_RX_DR            0x40    // 数据接收状态标志位
#define STATUS_TX_DS            0x20    // 数据发送状态标志位
#define STATUS_MAX_RT           0x10    //
#define STATUS_TX_FULL          0x01    //
状态寄存器宏定义
//详细请参照英文PDF文档第23页
#define FIFO_STATUS_TX_REUSE    0x40
#define FIFO_STATUS_TX_FULL     0x20
#define FIFO_STATUS_TX_EMPTY    0x10
#define FIFO_STATUS_RX_FULL     0x02
#define FIFO_STATUS_RX_EMPTY    0x01
自动应答寄存器宏定义
#define REG2_BUFFER_COUNT       0x02
#define REG3_STATUS             0x03
#define ASK_Rx_Full             (1<<7)
#define ASK_Rx_Empty            (1<<6)
#define ASK_Tx_Full             (1<<5)
#define ASK_Tx_Empty            (1<<4)
#define ASK__Reserved           (1<<3)
#define ASK__Irqn_Tx_Err        (1<<2)
#define ASK_Irqn_Rx_Done        (1<<1)
#define ASK_Irqn_Tx_Done        (1<<0)
#define ASK_Irqn_ALL (ASK__Irqn_Tx_Err|ASK_Irqn_Rx_Done|ASK_Irqn_Tx_Done)
BK2411 SPI读写时序操作
char SPI_RW(char _char)
{
    char bit_ctr;
   for(bit_ctr=0;bit_ctr<8;bit_ctr++)   // output 8-bit
   {
        RF2411_MOSI = (_char & 0x80);         // output 'char', MSB to MOSI
        _char = (_char << 1);           // shift next bit into MSB..
        RF2411_SCK = 1;                      // Set SCK high..
        _char |= RF2411_MISO;                 // capture current MISO bit
        RF2411_SCK = 0;                   // ..then set SCK low again
   }
    return(_char);                    // return read char
}
BK2411 SPI写寄存器操作
void SPI_Write_Reg(char reg, char value)
{
    RF2411_CSN = 0;                   // CSN low, init SPI transaction
    op_status = SPI_RW(reg);      // select register
    SPI_RW(value);             // ..and write value to it..
    RF2411_CSN = 1;                   // CSN high again
}
BK2411 SPI读寄存器操作
char SPI_Read_Reg(char reg)
{
    char value;
    RF2411_CSN = 0;                // CSN low, initialize SPI communication...
    op_status=SPI_RW(reg);            // Select register to read from..
    value = SPI_RW(0);    // ..then read registervalue
    RF2411_CSN = 1;                // CSN high, terminate SPI communication
    return(value);        // return register value
}
工作模式初始化
unsigned char code  RegArrFSK[][2]=
{
            {0,0x0e},      
//CONFIG配置,IRQ引脚状态用于指示状态信息,配置为16位CRC校验,内部上电开启,
            {1,0x3F},   //EN_AA ,所有通道都允许自动应答功能
            {2,0x3F},   //EN_RXADDR,p0-p5通道全部打开
            {3,0x03},       //SETUP_AW,地址长度设置为5字节
            {4,0x31},       //SETUP_RETR
            {5,0x17},       //RF_CH,工作频率设置为2.423GHZ
            {6,0x15},       //RF_SETUP,{6,0x17},//1Mbps速率,功率设置为最大5db
            {7,0x07},       //STATUS ,配置为数据包传输模式
            {8,0x00},       //OBSERVE_TX
            {9,0x00},       //CD
            {12,0xc3},      //RX_ADDR_P2
            {13,0xc4},      //RX_ADDR_P3
            {14,0xc5},      //RX_ADDR_P4
            {15,0xc6},      //RX_ADDR_P5
            {17,0x20},      //RX_PW_P0
            {18,0x20},      //RX_PW_P1
            {19,0x20},      //RX_PW_P2
            {20,0x20},      //RX_PW_P3
            {21,0x20},      //RX_PW_P4
            {22,0x20},      //RX_PW_P5
            {23,0x00},      //FIFO状态寄存器
            {28,0x3F},      //支持可变长数据包模式
            {29,0x07}
};
BK2411发送模式设置
void SwitchToTxMode(void)
{
    unsigned char value;
    SPI_Write_Reg(FLUSH_TX,0);                      //刷新 Tx-FIFO
    value=SPI_Read_Reg(CONFIG);                     //读取CONTIG状态
    value=value&0xfd;                               //POWER DOWN 掉电
    SPI_Write_Reg(WRITE_REG + CONFIG, value);
    value=value&0xfe;                              
    SPI_Write_Reg(WRITE_REG + CONFIG, value);       //接收模式
    value=value|0x02;                           
    SPI_Write_Reg(WRITE_REG + CONFIG, value);       //POWER ON 上电启动,并切换为发送模式
}
BK2411数据发送流程
void RF2411_SendPacket(unsigned char* buf,unsigned char len)
{
     unsigned char temp=0;
    SPI_Write_Buf(W_TX_PAYLOAD_NOACK_CMD,buf, len);
    RF2411_Delay(400);
    do
    {
    temp = SPI_Read_Reg(0x07);
    }while(!(temp&0x70));                       //判断 TX_DS,是否发送完毕
    SPI_Write_Reg(0x07|WRITE_REG,0x70); //刷新状态寄存器,为一次一收发数据准备
}
BK2411接收模式设置
void SwitchToRxMode(void)
{
    unsigned char value;
    SPI_Write_Reg(FLUSH_RX,0);                  //刷新 Rx-FIFO
    value=SPI_Read_Reg(STATUS);                 //读取工作状态
    SPI_Write_Reg(WRITE_REG+STATUS,value);      
// clear RX_DR or TX_DS or MAX_RT interrupt flag
    value=SPI_Read_Reg(CONFIG);                 //读取CONTIG状态
    value=value&0xfd;
    SPI_Write_Reg(WRITE_REG + CONFIG, value);   //先POWER DOWN 掉电
    value=value|0x01;                       
    SPI_Write_Reg(WRITE_REG + CONFIG, value);   //设置为发送模式
    value=value|0x02;                       
    SPI_Write_Reg(WRITE_REG + CONFIG, value);   //上电启动,并切换为接收模式
    RF2411_CE=1;
}
BK2411接收数据流程
void RF2411_ReceivePacket(unsigned char* buf)
{
    unsigned char payloadLen;
    payloadLen=SPI_Read_Reg(R_RX_PL_WID_CMD);
    SPI_Read_Buf(RD_RX_PLOAD,buf,payloadLen);
}
无线应用注意事项
(1) 无线模块的VCC电压范围为 1.8V-3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。推荐电压3.3V左右。
(2) 除电源VCC和接地端,其余脚都可以直接和普通的51单片机IO口直接相连,无需电平转换。当然对3V左右的单片机更加适用了。
(3) 硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI不需要单片机真正的串口介入,只需要普通的单片机IO口就可以了,当然用串口也可以了。模块按照接口提示和母板的逻辑地连接起来
(4) 标准DIP插针,如需要其他封装接口,或其他形式的接口,可联系我们定做。
(5) 任何单片机都可实现对无线模块的数据收发控制,并可根据我们提供的程序,然后结合自己擅长的单片机型号进行移植;
(6) 频道的间隔的说明:实际要想2个模块同时发射不相互干扰,两者频道间隔应该至少相差1MHZ,这在组网时必须注意,否则同频比干扰。
(7) 实际用户可能会应用其他自己熟悉的单片机做为主控芯片,所以,建议大家在移植时注意以下4点:
A:确保IO是输入输出方式,且必须设置成数字IO;
B:注意与使用的IO相关的寄存器设置,尤其是带外部中断、带AD功能的IO,相关寄存器一定要设置好;
C:调试时先写配置字,然后控制数据收发
D:注意工作模式切换时间

回复

使用道具 举报

ID:186637 发表于 2018-10-15 15:46 | 显示全部楼层
不错不错!谢谢分享!
回复

使用道具 举报

ID:410928 发表于 2018-10-17 09:39 | 显示全部楼层
学习了,支持楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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