kunkun 发表于 2009-10-4 09:17:12

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

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[]=
{
    {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;
    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),RegArrFSK);

        //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),RegArrFSK);
       
//********************config analog register******************
        SwitchCFG(1);

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

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

        SPI_Write_Buf((WRITE_REG|14),&(RegArrFSKAnalogReg14),11);


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

        WriteArr=WriteArr&0xf0;
        WriteArr=WriteArr&0x7F;
        SPI_Write_Buf((WRITE_REG|4),&(WriteArr),4);

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

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

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

//reg4 set bit 0,1,3,23
        Delay_ms(50);
        for(j=0;j<4;j++) WriteArr=(RegArrFSKAnalog>>(8*(j)))&0xff;
        SPI_Write_Buf((WRITE_REG|4),&(WriteArr),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次重发
}

rei1984 发表于 2009-10-4 09:25:00

晕死了!

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

kunkun 发表于 2009-10-4 09:41:01

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

lowwr 发表于 2009-10-5 11:50:18

很早就这个帖子了 关于这个 BK2411多少有些抄袭 NRF 的 本来MOMO 想弄的 但是 不提供技术资料 就没有弄了

cyberjok 发表于 2009-10-5 13:35:12

rei1984 是学生还是工作了?怎么感觉好像水平很高,又好像水平不怎么样...

zhliangxi 发表于 2009-10-28 09:13:13

谢谢楼上分享. 顶!

YT_Shen 发表于 2010-2-8 15:48:04

问下,有BK2401的初始化代码吗?
谢了

YT_Shen 发表于 2010-2-8 16:34:36

看了你的连接PDF档,
想问下,PDF 中初始化表中Bank1 的Reg2值为0xA0FCC4000怎么是36bit?上面程序中的参数为0x00C4FCF0   怎么理解?

armok 发表于 2010-2-8 16:49:56

帖子置COOL,但强烈推荐大家不要使用这类IC。

YT_Shen 发表于 2010-2-8 17:09:29

那个bank1的reg 4写了又写,写来写去的那是在做什么
这些为什么资料中也没的说明啊,晕幺!!!!!!!

taishan 发表于 2010-2-9 14:04:28

是啊,这样的垃圾IC不值得去浪费时间。

ju748 发表于 2010-2-9 15:28:30

哈哈记号

lhb0709 发表于 2010-3-2 09:30:26

回复【8楼】armok 阿莫
帖子置COOL,但强烈推荐大家不要使用这类IC。

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

wxmk123 发表于 2010-3-4 11:47:47

呵呵~~~

hjk3344547 发表于 2010-3-5 18:19:04

我也有,当时用是51单片机调通的。
谁要和我联系。

gmyu 发表于 2011-4-9 12:09:17

回复【15楼】hjk3344547
我也有,当时用是51单片机调通的。
谁要和我联系。
-----------------------------------------------------------------------

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

kxhlp 发表于 2011-4-14 23:55:47

回复【15楼】hjk3344547
-----------------------------------------------------------------------

同求Beken的资料:loveredhome@126.com .谢谢!
页: [1]
查看完整版本: BK2411初始化源码.[如有版权问题可与本人联系,立即删除]