前言:
nRF51可以支持基于2.4G的互相通信、与NRF24LE1的通信、与NRF24LU1的通信、与NRF24L01的通信。
一、nRF51822基于2.4G和nRF51822通信
其中nRF51互相通信和之前用51操作nRF24L01很像,涉及到的只有几个核心的函数:
- nrf_esb_init---初始化ESB
- nrf_esb_enable---使能ESB
- nrf_esb_add_packet_to_tx_fifo---将数据送入发送队列
如果想知道发送是否成功等状态可以用:
- void nrf_esb_tx_success(uint32_t tx_pipe, int32_t rssi)// If an ACK was received, we send another packet.
- void nrf_esb_tx_failed(uint32_t tx_pipe)
- void nrf_esb_rx_data_ready(uint32_t rx_pipe, int32_t rssi)
- void nrf_esb_disabled(void)
整个架构比较简单:
二、NRF51822和NRF24LE1/NRF24LU1/NRF24L01通信
其中nrf51和其他三种类型的2.4G模块通信类似,比其自身通信稍微复杂,其配置流程如下:
- bool nrf_esb_set_enabled_prx_pipes(uint32_t pipes)
用于使能接收通道,第0位对应通道1,依次类推,可同时使能多个通道
- bool nrf_esb_set_crc_length (nrf_esb_crc_length_t length)
设置CRC校验,务必使发送方和接收方一致
- bool nrf_esb_set_output_power(nrf_esb_output_power_t power)
设置发送功率,可选功率从4~-20,4为步数
- bool nrf_esb_set_channel (uint32_t channel )
设置无线通讯频率。无线频率=(2400 + channel) MHz,0 <= channel <= 125。
- bool nrf_esb_set_datarate(nrf_esb_datarate_t datarate)
设置通信速率:可选250Kbps,1M,2M
- NRF51822 2.4G 通讯比较麻烦的就是地址设置,和NRF24LXX 系列的无线芯片的地址有所不同,NRF51822 2.4G 通讯地址是由两部分组成,配置地址时需要设置BASEn 和PREFIXn 寄存器,同时要指定BASEn 中地址长度。另外,NRF51822 的地址每个字节内的位必须首位对调才能和NRF24LXX 系列的一致。
NRF24LE1 端地址设置:
uint8_t TX_ADDRESS[5] = {0xE5,0xE4,0xE3,0xE2,0xE1}; //地址定义
hal_nrf_set_address(HAL_NRF_TX,TX_ADDRESS); //设置NRF24LE1 发射地址
NRF51822 端地址设置:
(void)nrf_esb_set_address_prefix_byte(0,0xE5);
(void)nrf_esb_set_base_address_0(0xE1E2E3E4);
(void)nrf_esb_set_base_address_length(NRF_ESB_BASE_ADDRESS_LENGTH_4B);
- void nrf_esb_enable_dyn_ack (void )
使能动态数据长度
ESB:Enhanced ShockBurst,增强型突发模式。
Enhanced ShockBurstTM 模式比ShockBurst 模式多了一个确认数据传输的信号,保证数据传输的可靠性。EnhancedShockBurst 收发模式下,使用片内的先入先出堆栈区,数据低速从微控制器送入,但高速(1Mbps)发射,这样可以尽量节能与射频协议相关的所有高速信号处理都在片内进行,这种做法有三大好处:
- 尽量节能。
- 低的系统费用(低速微处理器也能进行高速射频发射)。
- 数据在空中停留时间短,降低了碰撞几率,提供了抗干扰性能。
后记:nRF51822运行在传统2.4G模式下可以和之前的一些2.4G模块兼容,从而做出更个性化的通信网络。但更多的时候nRF51822用在BLE领域,比如bong手环、百度手环等一些设备上。但是其运行在BLE模式下需要搭载BLE协议栈,其复杂程度要比跑在经典2.4G模式下发杂得多。
@nRF51822基础实验系列:
[nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI
[nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC
[nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC
[nRF51822] 11、基础实验代码解析大全 · 实验16 - 内部FLASH读写
[nRF51822] 12、基础实验代码解析大全 · 实验19 - PWM
@beautifulzzzz - 物联网&普适计算实践者
e-mail:beautifulzzzz@qq.com
i-blog:blog.beautifulzzzz.com