久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7358|回復: 0
收起左側

NRF24L01無線數傳模塊的使用

[復制鏈接]
ID:104287 發表于 2016-1-30 02:13 | 顯示全部樓層 |閱讀模式
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字節;蛘咭患壙勺冮L度的有效載荷,長度為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:注意工作模式切換時間

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级片在线看 | 青青草国产在线观看 | 日本精品视频在线 | 草久久| 国产欧美日韩精品一区二区三区 | 久久亚洲精品久久国产一区二区 | 精品粉嫩aⅴ一区二区三区四区 | 久久亚洲国产精品日日av夜夜 | 欧美在线一区二区三区 | 成人午夜精品 | 91精品国产色综合久久不卡98口 | 国产精品s色 | 日韩成人免费在线视频 | 欧美精品一区在线发布 | 粉嫩国产精品一区二区在线观看 | 黄色一级大片在线观看 | 久久久99精品免费观看 | 久久精品国产99国产精品 | 中文字幕在线观看第一页 | www.av在线 | 日韩色图在线观看 | 99久久成人| 久草在线 | 中文字幕91av | 成人免费视屏 | 毛片视频观看 | 免费一区二区三区 | 在线国产一区 | 国产日产久久高清欧美一区 | 亚洲啊v在线 | 三级黄视频在线观看 | 在线a视频网站 | 超碰3| 五月天激情综合网 | 四虎影视 | 久久久精品综合 | 黑人巨大精品欧美黑白配亚洲 | 久久国产精品视频免费看 | 精品成人免费一区二区在线播放 | 亚洲久久在线 | 国产一区二区三区视频 |