搜索
bottom↓
回复: 17

BK2411初始化源码.[如有版权问题可与本人联系,立即删除]

[复制链接]

出0入0汤圆

发表于 2009-10-4 09:17:12 | 显示全部楼层 |阅读模式
BK2411初始化过程比24L01要复杂一点,但初始化完成后,使用过程就与24L01一样了.下面的初始化已调试通过.
MCU:atmega48 晶振:8M
声明:本开源码参考了厂家源程序,仅供个人技术交流,未经许可严禁用于商业用途.
如牵涉各种权利问题,请通知本人删除.
//****************************************************************//
// SPI(nRF24L01) commands
#define READ_REG        0x00  // Define read command to register
#define WRITE_REG       0x20  // Define write command to register
#define RD_RX_PLOAD     0x61  // Define RX payload register address
#define WR_TX_PLOAD     0xA0  // Define TX payload register address
#define FLUSH_TX        0xE1  // Define flush TX register command
#define FLUSH_RX        0xE2  // Define flush RX register command
#define REUSE_TX_PL     0xE3  // Define reuse TX payload register command
#define W_TX_PAYLOAD_NOACK_CMD    0xb0
#define W_ACK_PAYLOAD_CMD              0xa8
#define ACTIVATE_CMD                  0x50
#define R_RX_PL_WID_CMD                  0x60
#define NOP             0xFF  // Define No Operation, might be used to read status register

//***************************************************//
// SPI(nRF24L01) registers(addresses)
#define CONFIG          0x00  // 'Config' register address
#define EN_AA           0x01  // 'Enable Auto Acknowledgment' register address
#define EN_RXADDR       0x02  // 'Enabled RX addresses' register address
#define SETUP_AW        0x03  // 'Setup address width' register address
#define SETUP_RETR      0x04  // 'Setup Auto. Retrans' register address
#define RF_CH           0x05  // 'RF channel' register address
#define RF_SETUP        0x06  // 'RF setup' register address
#define STATUS          0x07  // 'Status' register address
#define OBSERVE_TX      0x08  // 'Observe TX' register address
#define CD              0x09  // 'Carrier Detect' register address
#define RX_ADDR_P0      0x0A  // 'RX address pipe0' register address
#define RX_ADDR_P1      0x0B  // 'RX address pipe1' register address
#define RX_ADDR_P2      0x0C  // 'RX address pipe2' register address
#define RX_ADDR_P3      0x0D  // 'RX address pipe3' register address
#define RX_ADDR_P4      0x0E  // 'RX address pipe4' register address
#define RX_ADDR_P5      0x0F  // 'RX address pipe5' register address
#define TX_ADDR         0x10  // 'TX address' register address
#define RX_PW_P0        0x11  // 'RX payload width, pipe0' register address
#define RX_PW_P1        0x12  // 'RX payload width, pipe1' register address
#define RX_PW_P2        0x13  // 'RX payload width, pipe2' register address
#define RX_PW_P3        0x14  // 'RX payload width, pipe3' register address
#define RX_PW_P4        0x15  // 'RX payload width, pipe4' register address
#define RX_PW_P5        0x16  // 'RX payload width, pipe5' register address
#define FIFO_STATUS     0x17  // 'FIFO Status Register' register address

#define RX_DR                         (1<<6)
#define TX_DS                         (1<<5)
#define MAX_RT                 (1<<4)

//analog register initialization value
unsigned long RegArrFSKAnalog[]=
{
    0xF2014B41,
    0x30064BC0,
    0x00C4FCF0,
    0x603F0017,
    0x0B009941,
    0xBE7F0124,
    0x00400000,
    0x00000000,
    0x00000000,
    0x00000000,
    0xF64EF5F6,
    0x5C1851D6,
    0x0053002D,
    0x00700000
};

unsigned char RegArrFSKAnalogReg14[]=
{
    0x41,0x10,0x08,0x82,
    0x40,0x10,0x08,0xF2,
    0x7C,0xEF,0xCF
};

//digital register initialization value
unsigned char RegArrFSK[][2]=
{
    {0,0x0F},
    {1,0x3F},
    {2,0x3F},
    {3,0x03},
    {4,0x3f},
    {5,0x45},
    {6,0x07},
    {7,0x07},
    {8,0x00},
    {9,0x00},
    {12,0xc3},
    {13,0xc4},
    {14,0xc5},
    {15,0xc6},
    {17,0x20},
    {18,0x20},
    {19,0x20},
    {20,0x20},
    {21,0x20},
    {22,0x20},
    {23,0x00},
    {28,0x3F},
    {29,0x07}
};

/////////////////////////////////////////////////////////////////////////////
//函 数: void InitRF(void);
//参 数: 无
//功 能: 初始化RF
/////////////////////////////////////////////////////////////////////////////
void InitRF(void)
{
    char i = 0, j=0;
    unsigned char WriteArr[4];
    unsigned char nRegDat=0;
        unsigned char t=0;

    //上电延时100us
    Delay_ms(20);

    CSN_DIR();
    CE_DIR();
    SCK_DIR();
    MOSI_DIR();
    MISO_DIR_IN();
    IRQ_DIR_IN();

    CE_LOW();   // chip enable
    CSN_HIGH(); // Spi disable
    SCK_LOW();  // Spi clock line init high

        Delay_ms(20);       
       
//********************config digital register******************
        SwitchCFG(0);

        for(i=20;i>=0;i--) SPI_RW_Reg((WRITE_REG|RegArrFSK[0]),RegArrFSK[1]);

        //reg 10 - Rx0 addr
        SPI_Write_Buf((WRITE_REG|10),RX0_Address,5);
       
        //reg 11 - Rx1 addr
        SPI_Write_Buf((WRITE_REG|11),RX1_Address,5);

        //reg 16 - TX addr
        SPI_Write_Buf((WRITE_REG|16),RX0_Address,5);

        SPI_RW_Reg(ACTIVATE_CMD,0x73);// Active

        for(i=22;i>=21;i--) SPI_RW_Reg((WRITE_REG|RegArrFSK[0]),RegArrFSK[1]);
       
//********************config analog register******************
        SwitchCFG(1);

        for(i=0;i<=8;i++)//reverse
        {
                for(j=0;j<4;j++) WriteArr[j]=(RegArrFSKAnalog>>(8*(j)))&0xff;
                SPI_Write_Buf((WRITE_REG|i),&(WriteArr[0]),4);
        }

        for(i=9;i<=13;i++)
        {
                for(j=0;j<4;j++) WriteArr[j]=(RegArrFSKAnalog>>(8*(3-j)))&0xff;
                SPI_Write_Buf((WRITE_REG|i),&(WriteArr[0]),4);
        }

        SPI_Write_Buf((WRITE_REG|14),&(RegArrFSKAnalogReg14[0]),11);


        //reg4 clear bit 0,1,3,23
        for(j=0;j<4;j++) WriteArr[j]=(RegArrFSKAnalog[4]>>(8*(j) ) )&0xff;

        WriteArr[3]=WriteArr[3]&0xf0;
        WriteArr[1]=WriteArr[1]&0x7F;
        SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4);

        //tog reg4 bit25,bit26
        for(j=0;j<4;j++) WriteArr[j]=(RegArrFSKAnalog[4]>>(8*(j)))&0xff;

        Delay_ms(10);
       
        WriteArr[0]=WriteArr[0]|0x06;
        SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4);
        Delay_ms(10);

        WriteArr[0]=WriteArr[0]&0xf9;
        SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4);

//reg4 set bit 0,1,3,23
        Delay_ms(50);
        for(j=0;j<4;j++) WriteArr[j]=(RegArrFSKAnalog[4]>>(8*(j)))&0xff;
        SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4);
//********************switch back to digital register access******************
        SwitchCFG(0);

        SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);            //写本地地址       
        SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH);         //写接收端地址
        SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);                                                      //频道0自动        ACK应答允许       
        SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);                                                  //允许接收地址只有频道0,如果需要多频道可以参考Page21  
        SPI_RW_Reg(WRITE_REG + RF_CH, RF_Channel);                                        //设置信道工作为2.4GHZ,收发必须一致
        SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);                                 //设置接收数据长度,本次设置为32字节
        SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);                                                   //设置发射速率为1MHZ,发射功率为最大值0dB       
        SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);                                                    // IRQ收发完成中断响应,16位CRC,主发送
        SPI_RW_Reg(WRITE_REG+SETUP_AW,0X02);                                                        //设置地址宽度为4字节
        SPI_RW_Reg(WRITE_REG+SETUP_RETR,0X1A);                                                        //建立自动重发,500+86us,10次重发
}

出0入25汤圆

发表于 2009-10-4 09:25:00 | 显示全部楼层
晕死了!

BK2411叫了很长时间了,还要保密。玩什么玩~~~   IC都弄不到,还不如nrf呢

出0入0汤圆

 楼主| 发表于 2009-10-4 09:41:01 | 显示全部楼层
IC和模块我们都有,需要的可以跟我们联系啊.
国内企业的发展其实很不容易的,相信BK2411的厂家也有其难处,相信大家一定能开明的谅解.目前这种局势相信所有人都清楚,只要什么好东西出来了,马上就山褰化了,以至于原厂可能能地位不保,像手机,上网本,以及GPS导航,等等电子产品都离不了这样的恶运.谁都不希望自己的产品还没有正式推广就已经被别人卖得满天飞了.
这里我们把源码公布出来给大家,也不知道是不是被允许,但本着技术交流的精神,我想至少是可以原谅的.

出0入0汤圆

发表于 2009-10-5 11:50:18 | 显示全部楼层
很早就这个帖子了 关于这个 BK2411  多少有些抄袭 NRF 的 本来MOMO 想弄的 但是 不提供技术资料 就没有弄了

出0入0汤圆

发表于 2009-10-5 13:35:12 | 显示全部楼层
rei1984 是学生还是工作了?怎么感觉好像水平很高,又好像水平不怎么样...

出0入0汤圆

发表于 2009-10-28 09:13:13 | 显示全部楼层
谢谢楼上分享. 顶!

出0入0汤圆

发表于 2010-2-8 15:48:04 | 显示全部楼层
问下,有BK2401的初始化代码吗?
谢了

出0入0汤圆

发表于 2010-2-8 16:34:36 | 显示全部楼层
看了你的连接PDF档,
想问下,PDF 中初始化表中Bank1 的Reg2值为0xA0FCC4000  怎么是36bit?上面程序中的参数为0x00C4FCF0   怎么理解?
头像被屏蔽

出0入0汤圆

发表于 2010-2-8 16:49:56 | 显示全部楼层
帖子置COOL,但强烈推荐大家不要使用这类IC。

出0入0汤圆

发表于 2010-2-8 17:09:29 | 显示全部楼层
那个bank1的reg 4写了又写,写来写去的那是在做什么
这些为什么资料中也没的说明啊,晕幺!!!!!!!

出0入0汤圆

发表于 2010-2-9 14:04:28 | 显示全部楼层
是啊,这样的垃圾IC不值得去浪费时间。

出0入0汤圆

发表于 2010-2-9 15:28:30 | 显示全部楼层
哈哈记号

出0入0汤圆

发表于 2010-3-2 09:30:26 | 显示全部楼层
回复【8楼】armok 阿莫
帖子置COOL,但强烈推荐大家不要使用这类IC。

-----------------------------------------------------------------------
阿莫很生气 后果很严重,O(∩_∩)O哈哈~

出0入0汤圆

发表于 2010-3-4 11:47:47 | 显示全部楼层
呵呵~~~

出0入0汤圆

发表于 2010-3-5 18:19:04 | 显示全部楼层
我也有,当时用是51单片机调通的。
谁要和我联系。

出0入4汤圆

发表于 2011-4-9 12:09:17 | 显示全部楼层
回复【15楼】hjk3344547
我也有,当时用是51单片机调通的。
谁要和我联系。
-----------------------------------------------------------------------

楼上的可以共享一下么 ygm139@139.com。 多谢!

出0入0汤圆

发表于 2011-4-14 23:55:47 | 显示全部楼层
回复【15楼】hjk3344547
-----------------------------------------------------------------------

同求Beken的资料:loveredhome@126.com .谢谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-4 07:59

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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