搜索
bottom↓
回复: 29

请教2.4G 无线收发芯片BK2401的问题

[复制链接]

出0入0汤圆

发表于 2014-3-19 10:32:16 | 显示全部楼层 |阅读模式
有谁用过这个芯片   能否和现有的NORDIC 的 NRF24L01  通信??

说明书上说是高度兼容 但是目前不是很确定能否和现有的NRF24L01 通信  现在想用BK 的这个芯片,  谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-3-19 13:29:17 | 显示全部楼层
感觉就是24L01的山寨版本,引脚定义完全一样,应该可以用。

出0入0汤圆

 楼主| 发表于 2014-3-19 14:20:17 | 显示全部楼层
logosz 发表于 2014-3-19 13:29
感觉就是24L01的山寨版本,引脚定义完全一样,应该可以用。

是的 比较便宜

出0入0汤圆

发表于 2014-3-19 16:14:00 | 显示全部楼层
可以。我们测试过的。

出0入0汤圆

发表于 2014-3-19 17:32:46 来自手机 | 显示全部楼层
这个料不是停产了吗

出0入0汤圆

发表于 2014-3-19 21:39:08 来自手机 | 显示全部楼层
mhw 发表于 2014-3-19 16:14
可以。我们测试过的。

这个料还在生产?

出0入0汤圆

发表于 2014-3-19 22:16:05 | 显示全部楼层
现在基本是BK2421和BK2423了。
单晶片SOC是BK2433,我 估计是BK抄的NRF24LE1

出0入0汤圆

 楼主| 发表于 2014-3-20 08:46:51 | 显示全部楼层
chensi007 发表于 2014-3-19 22:16
现在基本是BK2421和BK2423了。
单晶片SOC是BK2433,我 估计是BK抄的NRF24LE1

我现在准备用BK2423   和  NRF24LU1 通信



想问一下 BK 有没有集成USB 的 SOC   2.4G?

出0入0汤圆

 楼主| 发表于 2014-3-20 08:52:56 | 显示全部楼层
joker1987f16 发表于 2014-3-20 08:46
我现在准备用BK2423   和  NRF24LU1 通信

发现一款BK2533 有USB 功能

出0入0汤圆

发表于 2014-3-20 09:03:13 | 显示全部楼层
这个芯片估计超级便宜,LZ到时候可以共享一下心得

出0入0汤圆

发表于 2014-3-20 09:18:41 | 显示全部楼层
majialou 发表于 2014-3-20 09:03
这个芯片估计超级便宜,LZ到时候可以共享一下心得

BK 产世界上最便宜的芯片,这个大家都知道,BK出键鼠用2.4G RFIC 量很大,价格几毛钱一个。

出0入0汤圆

发表于 2014-3-20 09:47:40 | 显示全部楼层
kation122 发表于 2014-3-20 09:18
BK 产世界上最便宜的芯片,这个大家都知道,BK出键鼠用2.4G RFIC 量很大,价格几毛钱一个。
...

你们都是通过什么途径买到BK的芯片??

出0入0汤圆

发表于 2014-3-20 10:25:09 | 显示全部楼层
majialou 发表于 2014-3-20 09:47
你们都是通过什么途径买到BK的芯片??

淘宝有卖,不过价格还是比较贵,比NRF的便宜一点。

出0入0汤圆

发表于 2014-3-20 10:28:13 | 显示全部楼层
kation122 发表于 2014-3-20 09:18
BK 产世界上最便宜的芯片,这个大家都知道,BK出键鼠用2.4G RFIC 量很大,价格几毛钱一个。
...

在中国,没有最便宜,只有更便宜.
上海链接的LT系列比BK更便宜
http://www.ldctek.com/
而重庆西南的XN系列比LT的更便宜.
http://www.swid.com.cn/Product.a ... 8%D1%B6%CF%B5%C1%D0

出0入0汤圆

发表于 2014-3-20 10:30:09 | 显示全部楼层
joker1987f16 发表于 2014-3-20 08:46
我现在准备用BK2423   和  NRF24LU1 通信

BK2433QB是内建USB的SOC.一般与BK2433KB或BK2433MB配合使用.

出0入0汤圆

发表于 2014-3-20 10:31:15 | 显示全部楼层
chensi007 发表于 2014-3-20 10:28
在中国,没有最便宜,只有更便宜.
上海链接的LT系列比BK更便宜
http://www.ldctek.com/

不要看表面的报价
现实中最便宜的就是出货量最大的……俗话说:你没拿到便宜的价格,只是因为你还没有达到那个量

出0入0汤圆

发表于 2014-3-20 10:40:01 | 显示全部楼层
mhw 发表于 2014-3-20 10:31
不要看表面的报价
现实中最便宜的就是出货量最大的……俗话说:你没拿到便宜的价格,只是因为你还没有达 ...

你这句话理论上正确.上量当然便宜,可关键是仍然有相当多的公司不上量.那只能寻找报价更便宜的IC.

出0入0汤圆

发表于 2014-3-20 15:31:16 | 显示全部楼层
chensi007 发表于 2014-3-20 10:28
在中国,没有最便宜,只有更便宜.
上海链接的LT系列比BK更便宜
http://www.ldctek.com/

我就很好奇,重庆西南的XN为啥和NRF的脚位都一致呢。

出0入17汤圆

发表于 2014-3-20 17:20:34 | 显示全部楼层
joker1987f16 发表于 2014-3-20 08:46
我现在准备用BK2423   和  NRF24LU1 通信

BK2433(otp),bk2533(flash)

出0入0汤圆

发表于 2014-3-20 19:33:15 | 显示全部楼层
logosz 发表于 2014-3-20 15:31
我就很好奇,重庆西南的XN为啥和NRF的脚位都一致呢。

你懂的。。

出0入0汤圆

发表于 2014-3-20 21:21:43 | 显示全部楼层
太牛了。

出0入0汤圆

发表于 2014-3-20 22:37:38 | 显示全部楼层
一下子知道了这么多便宜的无线芯片。

出0入0汤圆

发表于 2014-3-21 09:05:16 | 显示全部楼层
htjgdw 发表于 2014-3-20 22:37
一下子知道了这么多便宜的无线芯片。

就是不怎么好买

出0入0汤圆

 楼主| 发表于 2014-3-21 10:32:46 | 显示全部楼层
majialou 发表于 2014-3-20 09:03
这个芯片估计超级便宜,LZ到时候可以共享一下心得

我们是用自己的51MCU 和 BK 的合封  我现在测试一下 通信

出0入0汤圆

发表于 2014-3-24 22:17:29 | 显示全部楼层
logosz 发表于 2014-3-21 09:05
就是不怎么好买

那就完了。再便宜的价格,买不到也是没用。就像小米手机那样

出0入0汤圆

 楼主| 发表于 2014-4-8 20:02:37 | 显示全部楼层
mhw 发表于 2014-3-19 16:14
可以。我们测试过的。

您好 我现在用的是BK2423  想找一下他的初始化代码 不知道您这里有没有啊?

出0入0汤圆

发表于 2014-4-9 08:52:29 | 显示全部楼层
joker1987f16 发表于 2014-4-8 20:02
您好 我现在用的是BK2423  想找一下他的初始化代码 不知道您这里有没有啊? ...

#include "bk2423.h"

UINT8 op_status;

//Bank1 register initialization value

//In the array Bank1_Reg0_13,all[] the register value is the byte reversed!!!!!!!!!!!!!!!!!!!!!
code unsigned long Bank1_Reg0_13[]={      
0xE2014B40,
0x00004BC0,
0x028CFCD0,
0x41390099,
0x0B86BED9,  //high sensitivity mode, to enable normal sensitivity mode,use 0x0B869ED9
0xA67F0624,  //RSSI measurement disabled, to enable RSSI measurement,use 0xA67F0224
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00127305,
0x36B48000,
};

code UINT8 Bank1_Reg14[]=
{
0x41,0x10,0x04,0x82,0x20,0x08,0x08,0xF2,0x7D,0xEF,0xFF
};

//Bank0 register initialization value
code UINT8 Bank0_Reg[][2]={
{0,0x0F},
{1,0x3F},
{2,0x3F},
{3,0x03},
{4,0xff},
{5,0x17},
{6,0x0F},        //0x0F or 0x2F:2Mbps; 0x07:1Mbps ; 0x27:250Kbps
{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}
};


code UINT8 RX0_Address[]={0x15,0x59,0x23,0xC6,0x29};
code UINT8 RX1_Address[]={0x10,0x56,0x24,0xCD,0x78};

///////////////////////////////////////////////////////////////////////////////
//                  SPI access                                               //
///////////////////////////////////////////////////////////////////////////////

/**************************************************         
Function: SPI_RW();                                         
                                                            
Description:                                                
        Writes one UINT8 to BK2423, and return the UINT8 read
/**************************************************/        
UINT8 SPI_RW(UINT8 value)                                    
{                                                           
        UINT8 bit_ctr;
        for(bit_ctr=0;bit_ctr<8;bit_ctr++)   // output 8-bit
        {
                if(value & 0x80)
                {
                        MOSI=1;
                }
                else
                {
                        MOSI=0;               
                }

                value = (value << 1);           // shift next bit into MSB..
                SCK = 1;                      // Set SCK high..
                value |= MISO;                         // capture current MISO bit
                SCK = 0;                              // ..then set SCK low again
        }
        return(value);                             // return read UINT8
}                                                           
/**************************************************/        
                                                            
/**************************************************         
Function: SPI_Write_Reg();                                 
                                                            
Description:                                                
        Writes value 'value' to register 'reg'              
/**************************************************/        
void SPI_Write_Reg(UINT8 reg, UINT8 value)                 
{
        CSN = 0;                   // CSN low, init SPI transaction
        op_status = SPI_RW(reg);      // select register
        SPI_RW(value);             // ..and write value to it..
        CSN = 1;                   // CSN high again
}                                                           
/**************************************************/        
                                                            
/**************************************************         
Function: SPI_Read_Reg();                                   
                                                            
Description:                                                
        Read one UINT8 from BK2423 register, 'reg'           
/**************************************************/        
UINT8 SPI_Read_Reg(UINT8 reg)                              
{                                                           
        UINT8 value;
        CSN = 0;                // CSN low, initialize SPI communication...
        op_status=SPI_RW(reg);            // Select register to read from..
        value = SPI_RW(0);    // ..then read register value
        CSN = 1;                // CSN high, terminate SPI communication

        return(value);        // return register value
}                                                           
/**************************************************/        
                                                            
/**************************************************         
Function: SPI_Read_Buf();                                   
                                                            
Description:                                                
        Reads 'length' #of length from register 'reg'         
/**************************************************/        
void SPI_Read_Buf(UINT8 reg, UINT8 *pBuf, UINT8 length)     
{                                                           
        UINT8 status,byte_ctr;                              
                                                            
        CSN = 0;                                    // Set CSN l
        status = SPI_RW(reg);                       // Select register to write, and read status UINT8
                                                            
        for(byte_ctr=0;byte_ctr<length;byte_ctr++)           
                pBuf[byte_ctr] = SPI_RW(0);    // Perform SPI_RW to read UINT8 from BK2423
                                                            
        CSN = 1;                           // Set CSN high again
               
}                                                           
/**************************************************/        
                                                            
/**************************************************         
Function: SPI_Write_Buf();                                 
                                                            
Description:                                                
        Writes contents of buffer '*pBuf' to BK2423         
/**************************************************/        
void SPI_Write_Buf(UINT8 reg, UINT8 *pBuf, UINT8 length)   
{                                                           
        UINT8 byte_ctr;                              
                                                            
        CSN = 0;                   // Set CSN low, init SPI tranaction
        op_status = SPI_RW(reg);    // Select register to write to and read status UINT8
        for(byte_ctr=0; byte_ctr<length; byte_ctr++) // then write all UINT8 in buffer(*pBuf)
                SPI_RW(*pBuf++);                                    
        CSN = 1;                 // Set CSN high again      

}                                                           
/**************************************************/        


/**************************************************
Function: SwitchToRxMode();
Description:
        switch to Rx mode
/**************************************************/
void SwitchToRxMode()
{
        xdata UINT8 value;

        SPI_Write_Reg(FLUSH_RX,0);//flush Rx

        value=SPI_Read_Reg(STATUS);        // read register STATUS's value
        SPI_Write_Reg(WRITE_REG|STATUS,value);// clear RX_DR or TX_DS or MAX_RT interrupt flag

        CE=0;

        value=SPI_Read_Reg(CONFIG);        // read register CONFIG's value
//PRX
        value=value|0x01;//set bit 1
          SPI_Write_Reg(WRITE_REG | CONFIG, value); // Set PWR_UP bit, enable CRC(2 length) & Prim:RX. RX_DR enabled..

        CE=1;
}

/**************************************************
Function: SwitchToTxMode();
Description:
        switch to Tx mode
/**************************************************/
void SwitchToTxMode()
{
        xdata UINT8 value;
        SPI_Write_Reg(FLUSH_TX,0);//flush Tx

        CE=0;
        value=SPI_Read_Reg(CONFIG);        // read register CONFIG's value
//PTX
        value=value&0xfe;//set bit 1
          SPI_Write_Reg(WRITE_REG | CONFIG, value); // Set PWR_UP bit, enable CRC(2 length) & Prim:RX. RX_DR enabled.

        CE=1;
}

/**************************************************
Function: SwitchCFG();
                                                            
Description:
         access switch between Bank1 and Bank0

Parameter:
        _cfg      1:register bank1
                  0:register bank0
Return:
     None
/**************************************************/
void SwitchCFG(char _cfg)//1:Bank1 0:Bank0
{
        UINT8 Tmp;

        Tmp=SPI_Read_Reg(7);
        Tmp=Tmp&0x80;

        if( ( (Tmp)&&(_cfg==0) )
        ||( ((Tmp)==0)&&(_cfg) ) )
        {
                SPI_Write_Reg(ACTIVATE_CMD,0x53);
        }
}

/**************************************************
Function: SetChannelNum();
Description:
        set channel number

/**************************************************/
void SetChannelNum(UINT8 ch)
{
        SPI_Write_Reg((UINT8)(WRITE_REG|5),(UINT8)(ch));
}



///////////////////////////////////////////////////////////////////////////////
//                  BK2423 initialization                                    //
///////////////////////////////////////////////////////////////////////////////
/**************************************************         
Function: BK2423_Initialize();                                 

Description:                                                
        register initialization
/**************************************************/   
void BK2423_Initialize()
{
        INT8 i,j;
        UINT8 WriteArr[4];

        DelayMs(100);//delay more than 50ms.
       
        SwitchCFG(0);

//********************Write Bank0 register******************
        for(i=20;i>=0;i--)
                SPI_Write_Reg((WRITE_REG|Bank0_Reg[0]),Bank0_Reg[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);
//        printf("\nEnd Load Reg");

        i=SPI_Read_Reg(29);

        if(i==0) // i!=0 showed that chip has been actived.so do not active again.
                SPI_Write_Reg(ACTIVATE_CMD,0x73);// Active

        for(i=22;i>=21;i--)
                SPI_Write_Reg((WRITE_REG|Bank0_Reg[0]),Bank0_Reg[1]);

//********************Write Bank1 register******************
        SwitchCFG(1);

        for(i=0;i<=8;i++)//reverse
        {
                for(j=0;j<4;j++)
                        WriteArr[j]=(Bank1_Reg0_13>>(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]=(Bank1_Reg0_13>>(8*(3-j) ) )&0xff;

                SPI_Write_Buf((WRITE_REG|i),&(WriteArr[0]),4);
        }

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

//toggle REG4<25,26>
        for(j=0;j<4;j++)
                WriteArr[j]=(Bank1_Reg0_13[4]>>(8*(j) ) )&0xff;

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

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


        DelayMs(10);
       
//********************switch back to Bank0 register access******************
        SwitchCFG(0);

        SwitchToRxMode();//switch to RX mode

}

/**************************************************         
Function: DelayMs();                                 

Description:                                                
        delay ms,please implement this function according to your MCU.
/**************************************************/  
void DelayMs(UINT16 ms)
{


}


出0入0汤圆

发表于 2014-4-9 08:54:36 | 显示全部楼层
压缩包里面是完整的代码+编程指南

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-4-14 15:20:41 | 显示全部楼层
mhw 发表于 2014-4-9 08:54
压缩包里面是完整的代码+编程指南

谢谢大家

出0入0汤圆

发表于 2014-5-16 19:53:50 | 显示全部楼层
现在我的单片机只有4个IO口可以用来与BK2423通讯,我想把CSN一直置低,CE一直置高,不知会不会影响到BK2423的正常使用。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-23 11:16

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

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