[nrf52810] ESB(2.4G) 主从一体方案 多通道通信 动态调频

发布者:岭南布衣最新更新时间:2022-08-18 来源: csdn关键字:nrf52810 手机看文章 扫描二维码
随时随地手机看文章

一、架构说明

image.png

在这里插入图片描述
在这里插入图片描述

【注意】 CMSIS版本不能低于5.8.0,否则程序将不正常运行。    ARM.CMSIS.5.8.0.pack

5.8.0更新了 [GCC LinkerDescription,GCC 汇编程序启动] [为工具链 ARM、GCC 添加了 ARMv8-M 堆栈密封(到链接器、启动)]


[项目结构]

+---Master_Slave(alone)

|    +---app

|    |   +---app_led                   [LED线程任务]

|    |   +---led_gpio                  [LED_GPIO操作]

|    |   +---app_adc                   [将ADC值进行计算]

|    |   +---app_soft_voltameter       [软电量计算法]

|    |   ---app_key                   [按键扫描]

|    +---bsp

|    |   ---nrf52                     [BSP层公共接口函数]

|    +---chip

|    |   +---nRF_Drivers               [芯片驱动函数]

|    |   +---nRF_Libraries             [芯片支持函数]

|    |   ---nRF5_SDK_17.0.2_d674dde   [芯片SDK版本]

|    +---lib

|    |   ---queue                     [消息队列]

|    +---os

|    |   ---rtx5                      [OS层公共接口函数]

|    +---platform

|    |   +---log                       [日记函数]

|    |   ---SEGGER_RTT                [RTT库]

|    +---sys

|    |   ---nrf52                     [SYS层公共接口函数]

|    +---main_HandWriteBoard           [项目业务层]

|    │      sdk_config.h               (NRF功能配置)

|    │      business_gpio.h            (引脚定义)

|    │      business_function.h        (功能定义/业务宏)

|    │      app_main.c                 (主业务功能)

|    │      biz_led.c                  (灯光功能:电量灯/射频灯)

|    │      biz_key.c                  (按钮功能:电源键)

|    │      biz_power.c                (电源管理:充放电状态/电池信息/电源开关)

|    │      biz_uart.c                 (串口数据接收:决定串口通道对应的协议)

|    │      biz_flash.c                (Flash信息存储和读取)

|    +---public                        [项目公共层]

|    │      biz_esb.c                  (2.4G功能函数:发送端/接收端)

|    │      biz_fds.c                  (重新封装fds函数)

|    │      biz_low_power.c            (空闲检测逻辑)



[FLASH结构]

nRF52810 192 KB Flash, 24 KB RAM

          0x30000       0x6000


使用boot时:keil需要在Options-c/c++-Define  添加宏定义 MBR_PRESENT


boot文件:public_codenrf52810_boot_uart.hex


  名称        地址                           大小(字节)

|----------------------------------------------------------

MBR:         0x0000                         0x1000       (mbr_nrf52_2.4.1_mbr.hex)

APP:        0x1000                         0x30000 - boot_size - RSV1_SIZE - RSV2_SIZE - mbr_size = 0x27000

Boot:        0x28000                        0x6000

RSV1:        0x2E000                        0x1000       (settings.hex)--Bootloader setting

RSV2:        0x2F000                        0x1000       (settings.hex)--MBR parameters

END:         0x30000


|-----------------------------------------------------------


boot+app addr: 0x0


fds addr:0x27000 - 0x0C00 = 0x26400

fds_size: 3 * 0x0400 = 0x0C00


二、ESB工作原理

RADIO 数据包配置

在这里插入图片描述

PREAMBLE: 前导码或者说帧头,一个字节长度(除了2M/s 蓝牙模式),前导码自动配置的,用户不用设置。

ADDRESS: 广播地址由基地址(base)+前缀地址(prefix )两部分组成。基地址长度:2-4字节,其长度可以通过寄存器PCNF1的BALEN位配置。

在这里插入图片描述

支持星状网络拓扑实现一拖多的双向链路是nrf52的一个特点,nrf52一个接收端能最多支持8个发送端。


8个逻辑通道(pipe)拥有单独特定的传输物理地址,所以保证了数据不会错乱。8个逻辑地址是如何和物理地址对应呢,如下图逻辑地址的定义,第一章我们说了物理地址由base+prefix组成,所以通道0的地址是BASE0+prefix[0],其他的地址是BASE1+prefix[1]~[7]。然后发送端发送自己逻辑地址,接收端接收判断收到数据包逻辑通道。


static nrf_esb_payload_t tx_payload = NRF_ESB_CREATE_PAYLOAD(0, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00);

static nrf_esb_payload_t rx_payload = {0};


// 下面四个数组可以通过uart或者其他方式来修改频率和地址

static uint8_t base_addr_0[4] = {0x20, 0x21, 0x05, 0x19};

static uint8_t base_addr_1[4] = {0x95, 0x81, 0x69, 0x6f};

static uint8_t addr_prefix[8] = {0x78, 0x75, 0x65, 0x6a, 0x69, 0x61, 0x6e, 0x71};

__attribute__((aligned(4))) uint8_t rf_freq_table[RF_FREQ_MAX_VAL] = {0x6c, 0x69, 0x73, 0x75, 0x6e};


1. 通道地址分配如下(主机和从机base_addr_0、base_addr_1、addr_prefix必须一致才能8组设备通信)

通道0:base_addr_0(4字节) + addr_prefix[0]

通道1:base_addr_1(4字节) + addr_prefix[1]

通道2:base_addr_1(4字节) + addr_prefix[2]

通道3:base_addr_1(4字节) + addr_prefix[3]

通道4:base_addr_1(4字节) + addr_prefix[4]

通道5:base_addr_1(4字节) + addr_prefix[5]

通道6:base_addr_1(4字节) + addr_prefix[6]

通道7:base_addr_1(4字节) + addr_prefix[7]


2. 每个设备必须编号0-7,且每个通道只能用特定编号通道发送。(例如:设备5,对通道5发送数据,则设备0-4,6-7,都能收到通道5发来的消息)


4. 自定义通信协议

    字节0            字节1       字节2        字节3 -- (n-1)             字节n

  要发送的通道(0-7)  命令值      数据长度        数据内容         校验合(数据内容累加,取低八位)


占用资源:

Radio (NRF_RADIO)

Timer: NRF_TIMER2 //这里用到了发送数据的时候等待应答以及延时重发过程

PPI channels 10, 11, 12, and 13 //与NRF_TIMER2联合用到发送数据的时候等待应答以及延时重发Software interrupt 0


如何判断数据来自来个通道?


/**@brief Enhanced ShockBurst payload.

 * @details 所述有效载荷用于传输和确认带有有效载荷的接收数据包。  

*/

typedef struct

{

    uint8_t length;                                 //报文长度(最大值为@ref NRF_ESB_MAX_PAYLOAD_LENGTH)。

    uint8_t pipe;                                   //当前消息通道号

    int8_t  rssi;                                   //收到的报文为RSSI

    uint8_t noack;                                  //指示此包将不被确认的标志。 当启用选择性自动应答时,该标志被忽略。  

    uint8_t pid;                                    //在通信期间分配的PID。

    uint8_t data[NRF_ESB_MAX_PAYLOAD_LENGTH];       //数据数组(可以是发送数据,也可以是接收数据)

} nrf_esb_payload_t;

----------------------------------

/**

 * @brief  [ESB回调事件] 接收通知收发事件,并处理事件

 * @param  *p_event: esb事件类型

 */

void nrf_esb_event_handler(nrf_esb_evt_t const *p_event)

{

    switch (p_event->evt_id)

    {

        case NRF_ESB_EVENT_RX_RECEIVED:

            if (nrf_esb_read_rx_payload(&rx_payload) == NRF_SUCCESS)

            {

                if (get_comm_connect_state() == SYS_CONNECT_TYPE_RF)

                {

                LOG_D("ESB_CH_RX:%drn", rx_payload.pipe);

                    esb_clean_rx_heart_time();

                    esb_set_rx_connect_state(true);

                    // 跳转业务处理函数

                    if (g_rx_dispose_callback)

                    {

                        g_rx_dispose_callback(rx_payload.data, rx_payload.length);

                    }

                }

            }

            break;

    }

}


如何给对应通道发送数据?

/**

 * @brief  [ESB操作][发送端][发送数据] 发送一包数据(异步)

 * @note   异步发送

 * @param  *pdata: 待发送的数据指针

 * @param  len: 数据长度

 * @retval 发送状态

 */

uint32_t esb_tx_send(uint8_t ch, uint8_t *pdata, uint8_t len)

{

    tx_payload.pipe = ch;

    tx_payload.length = len;

    memcpy(tx_payload.data, pdata, len);

    return nrf_esb_write_payload(&tx_payload);

}


/**

 * @brief  处理消息队列中的消息,通过rf发送(放在空闲线程使用)

 */

bool rf_data_dispose(void)

{

    if (!queue_de(&m_rf_tx_q, g_rf_tx_data))

[1] [2]
关键字:nrf52810 引用地址:[nrf52810] ESB(2.4G) 主从一体方案 多通道通信 动态调频

上一篇:[nrf52820] DONGLE适配器 ESB(2.4G) 主从一体方案 多通道通信 动态调频
下一篇:[nrf51][nrf52] nrfconnect 安装说明指南

推荐阅读最新更新时间:2024-10-30 08:31

移动4G版Nokia XL通过入网许可
   2014年07月21日 08:43    新浪手机    我有话说( 155 人参与) 评论中大奖(155人参与) 收藏本文       Nokia XL   新浪手机讯 7月21日上午消息,虽然微软上周四已经正式宣布终止NOKIA X系列手机的生产线,不过从最近两天得到的消息来看,似乎对目前已经上市销售的NOKIA X系列机型还没有太多影响。近日一款诺基亚新机登陆工信部网站,已通过入网许可。   从工信部公布的产品照片来看,这款Nokia新机代号为RM-1061,与我们之前所见到的Nokia XL在外型设计上非常相似,参数饭gia你,支持中国移动TD-LTE/TD-SCDMA
[手机便携]
王建宙:1G到4G是技术升级 5G影响则是国家层面的
由新浪网主办的中国5G高峰论坛暨新浪5G启动仪式于今日在北京举行,主题为“万物互联,从此开始”。现场,十余位行业大咖针对5G发展进行全方位探讨。全球移动通信协会高级顾问、中国移动原董事长王建宙发表演讲。 王建宙表示,5G将关系到我们每一个企业,也关系到我们每一个人。“我们是从2013年开始讲5G的,那时4G刚刚开始,每年在不断的变化,今天我们可以说5G已经来了,5G已经来到我们每个人的身边了。”    王建宙称,我本人经历了每一次移动通讯的升级,但是以前的移动通讯升级我们基本上看作是一个技术问题,从1G到2G,2G到3G,3G到4G,我们都认为这是一种技术的升级。但是这次从4G到5G的升级,这个影响力特别大,远
[手机便携]
4G之后 中国移动PK电信联通联军 新增装宽占比71%
    日前,三大运营商纷纷发布了5月份的运营数据。   其中4G方面,中国移动恢复强势增长,净增990.1万户,累计达5.832亿;中国联通逆袭电信,新增502.8万户,可能是得益于虚商的“王宝强”等套餐。   不过,在宽带方面,移动的成绩单就非常抢眼了,新增用户数高达239.3万户,当月占比71%之多。   换言之,在5月份,每10户新装宽带中,就有7户选择了移动宽带。      按照这样的势头,移动进一步加大了在固网方面对联通的优势,直追电信。
[网络通信]
中国移动4G网络在香港3月商用
中国移动日前在香港通过拍卖成功获得30MHz的TDD频段,频段为2330MHz-2360MHz。此频段将用于在香港建设TD-LTE网络。此前的2009年2月,中国移动香港公司竞得FDD-LTE频段,目前LTE网络建设顺利,预计今年3月即可在香港投入商用。 此次在香港成功竞拍TDD频段,充分展示了中国移动对LTE技术的信心和承诺。中国移动香港公司获此频段,不但可弥补其在FDD频段方面的资源不足,更可有效推进建设TDD和FDD相融合的LTE网络,从而为中国移动在全球范围内推广4G两大主流技术实现网络融合、终端兼容提供实际的操作示范。此次竞拍成功,也意味着中国移动香港公司成为既拥有FDD的4G频率,又拥有TDD的4G频率的电信运
[网络通信]
揭秘小米背后暗藏成长烦恼:4G/硬件落后对手
     2011年8月16日,一个新的国产品牌手机正式出现在国人眼前,它叫小米手机,在随后将近三年的时间里,小米手机依靠互联网营销手段和超低价格的产品,逐步成为中国手机市场上的成功品牌之一。在2013年全年,小米称其出货量达到了1870万台,而2014年的最高目标则定为6000万台,一时间让业界同行唏嘘不已。而另外一方面,以华为、中兴、酷派为代表的老牌国产厂商先后宣布成立互联网手机分支品牌,为自己在2014年千元智能手机市场的鏖战增加砝码。2014年刚刚度过了4个月,热闹的市场表面之下已经暗流涌动,成为众矢之的的小米手机遭遇到了众多强敌的围攻,而忙于应战的小米手机在今年一开始就遭遇到了成长烦恼。 至今无4G,落后对手5个月
[手机便携]
余承东2014:立志成为4G时代的王者
    坚持三亚会议精神, 拥抱挑战,立志成为4G时代的王者 ——消费者BG 2014年新年致辞 亲爱的同事们: 作为端管云战略的重要部分,公司对消费者业务的期望是“成为华为经营最赚钱的业务群“。2013年,消费者BG业务持续有效增长,预计销售收入超过90亿美元,同比增长约18%;年度贡献利润将超额完成目标,盈利能力明显改善。 2013年,手机业务实现历史性突破,智能机发货超5000万台,进入全球TOP3,持续聚焦精品,旗舰P6品牌利润双赢,EMUI用户体验提升,花粉运营初见成效。移动宽带LTE份额进一步提升,车机新业务取得格局性突破。家庭接入市场份额进一步扩大,平板销售200%增长,OTT秘盒产品热销。终端芯片收入和盈利持续增长。
[手机便携]
澳监管机构称iPad支持4G广告误导消费者
据国外媒体报道,苹果目前可能将因为其声称该公司最新的iPad可以支持澳大利亚的4G网络而在该国吃上官司。 澳大利亚的竞争和消费者委员会日前表示,将于明天向墨尔本的联邦法院提出诉讼申请,指控苹果广告涉嫌违反澳大利亚消费者保护法(ACL)。 竞争和消费者委员会指出,苹果公司最近在其新版iPad广告中采用支持“WiFi+4G”的言辞将误导消费者,因为其中涉及澳大利亚消费者可以通过一张SIM卡将该产品接入澳大利亚的4G移动数据网络的宣传用语,而事实并非如此。 竞争和消费者委员会正在积极寻找对策,确保消费者清楚了解该设备的新功能。此外,该委员会正在寻求法院判决,包括禁令、罚金、修改广告以及补偿受影响的消费者等。
[网络通信]
5G技术4G化 中兴通讯Qcell打造无线“智慧机场”
  近日,中兴通讯携手湖南电信,采用中兴通讯第四代数字室分Qcell解决方案对长沙黄花机场进行无线网络改造,通过将 5G 技术提前应用到 4G 网络,提供给用户海量数据容量、极致峰值速率及丰富物联网应用,成功将其打造成“可体验,可运营,可操作”的智慧型机场。下面就随网络通信小编一起来了解一下相关内容吧。   湖南电信领导对采用Qcell方案改造后的机场覆盖进行了现场测试和体验,给出了高度评价:“可体验:要先让最终用户能感受,再推业务合作;可操作:一方面可视化管理,另一方面要与机场技术管理处保持联系,确保出问题可维护;可经营:就是以边缘计算为切入口,实现机场,校园网等重点场景的业务合作。”在现场测试中,实测下载速率峰值可达282Mb
[网络通信]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved