前言: 

  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 )

使能动态数据长度


ESBEnhanced ShockBurst,增强型突发模式。

Enhanced ShockBurstTM 模式比ShockBurst 模式多了一个确认数据传输的信号,保证数据传输的可靠性。EnhancedShockBurst 收发模式下,使用片内的先入先出堆栈区,数据低速从微控制器送入,但高速(1Mbps)发射,这样可以尽量节能与射频协议相关的所有高速信号处理都在片内进行,这种做法有三大好处:

  • 尽量节能。
  • 低的系统费用(低速微处理器也能进行高速射频发射)。
  • 数据在空中停留时间短,降低了碰撞几率,提供了抗干扰性能。

 

后记:nRF51822运行在传统2.4G模式下可以和之前的一些2.4G模块兼容,从而做出更个性化的通信网络。但更多的时候nRF51822用在BLE领域,比如bong手环、百度手环等一些设备上。但是其运行在BLE模式下需要搭载BLE协议栈,其复杂程度要比跑在经典2.4G模式下发杂得多。

@nRF51822基础实验系列:


[nRF51822] 7、基础实验代码解析大全(前十)

[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

[nRF51822] 13、浅谈nRF51822和NRF24LE1/NRF24LU1/NRF24L01经典2.4G模块无线通信配置与流程的更多相关文章

  1. 浅谈Kotlin(一):简介及Android Studio中配置

    浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 前言: 今日新闻:谷 ...

  2. [nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

    蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体 ...

  3. 浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(转载)

    转载来至beautifulzzzz,网址http://www.cnblogs.com/zjutlitao/,推荐学习 蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到 ...

  4. 浅谈Kotlin(四):控制流

    浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 本篇介绍Kotlin ...

  5. 浅谈Kotlin(三):类

    浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 前言: 已经学习了前 ...

  6. 浅谈Kotlin(二):基本类型、基本语法、代码风格

    浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 通过上面的文章,在A ...

  7. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

  8. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  9. Linux特殊符号浅谈

    Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...

随机推荐

  1. Oracle“钱夹”的使用

    最近几年发生了很多脱库的事件,有些时候安全不到位脱库再所避免,但是可以通过某些技术对数据库进行加密,让即使通过脱库得到的库也没法查看. 在技术层面的实现可以分为应用和数据库层. (1)通过在程序端对某 ...

  2. 初识Python-Python介绍

    Python介绍 在了解了计算机以及操作系统的发展历程之后,又接触到了一门新的语音——Python,迈出了学习编程的第一步. 一.Python简介: Python(英国发音:/ˈpaɪθən/ 美国发 ...

  3. Mac/IOS/linux获取当前时间包含微秒毫秒的代码

    #include <sys/time.h> 1 struct UnityLocalTimeStat { int Year; int Month; int DayOfWeek; int Da ...

  4. #英文#品读中国城市个性——最好的和最坏的&当东方遇到西方

    冒险家的乐园 a playground of risk 实现发财梦 realize one's dreams of wealth 道德沦丧,堕落 moral deprivation 租界 foreig ...

  5. Go语言 获取get、post参数

    在贴代码之前如果能先理解一下golang http.request的三个属性Form.PostForm.MultipartForm应该能较好的理解代码,下面摘录一下. 以上简要翻译一下: Form:存 ...

  6. 基于暗通道优先算法的去雾应用(Matlab/C++)

    基于暗通道优先的单幅图像去雾算法(Matlab/C++) 算法原理:             参见论文:Single Image Haze Removal Using Dark Channel Pri ...

  7. mongoose数据库连接和操作

    var mongoose = require('mongoose') mongoose.connect('mongodb://localhost:27017/hometown'); var db = ...

  8. HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash

    1.HashMap的内部实现机制 HashMap是对数据结构中哈希表(Hash Table)的实现,Hash表又叫散列表.Hash表是根据关键码Key来访问其对应的值Value的数据结构,它通过一个映 ...

  9. python基础02 基本数据类型

    摘要:简单的数据类型以及赋值 变量不需要声明 python的变量不需要声明,你可以直接输入: >>>a = 10 那么你的内存里就有了一个变量a, 它的值是10,它的类型是integ ...

  10. weex image

    weex 的image用来渲染图片, 可以使用img作为它的别名. 需要注意的是,他的长度可宽度必须指定, 不然它是不会工作的. 它没有任何的子组件. 有两个属性: src 用来指定图片的地址图片. ...