全球最低功耗蓝牙单芯片DA14580的软件体系 -RW内核和消息处理机制

  上一篇文章《蓝牙单芯片DA14580的硬件架构和低功耗》阐述了DA14580的硬件架构和低功耗的工作原理。本文文章阐述该平台的软件体系,并着重分析消息事件的处理机制。

一、DA14580SOC硬件组成和软件体系组成

DA14580芯片硬件架构包括三个部分:

1)使用ARM公司的cortex M0作为CPUprocessor处理器。

2)使用RivieraWaves公司的IP核作为BLEcore和基带、射频部分。

3)集成时钟管理CMU、电源管理PMU、memory控制存储和其他外围模块控制器,如GPIO、UART、I2C、SPI和timer等等。

相应地,DA14580平台SDK的软件组成也包括以下组成部分:

1)ARMcortex M0平台相关的库文件,如启动、CMSIS(the cortex Microcontroller software interface standard)支持的寄存器访问、中断异常访问接口等。

2)RW公司的BLE驱动、射频驱动,此外RW BLE还集成了系统的内核部分,其提供消息处理、定时器和任务调度等核心功能。所以DA14580平台SDK的开发是基于RW公司研发的内核,而不是DIALOG公司研发的。此部分大部分的代码都是固化在ROM里面。

3)SOC集成的其他模块的驱动,由DIALOG公司提供,如UART驱动等,此外其调用RW内核的相关接口来完成消息循环和低功耗功能。

4)应用程序,调用以上三个部分的接口来完成自定义功能。

我们重点分析2)中的RW内核机制和功能。

二、RW内核

RW内核的指导文档为《RW-BT-KERNEL-SW-FS.pdf》。其主要包括以下三个部分:

1)Message,消息处理机制。

2)Taskand Schedule,任务和调度。

3)Timer,定时器使用方法。

三、Task

  RW在BLE协议栈层次的基础上抽象了多个任务task,每个task完成一个软件层次的功能。所以说RW内核是支持多个任务task的,但本质上,RW内核也是一个单任务内核,所以各个task可以看成是能够完成特定功能的独立函数体或者函数集合。

  每个task都有一个task ID,其具有优先级功能,类似于UCOS的优先级。

  RW内核和UCOS的区别是:UCOS是多任务内核,具有时间片轮流执行,并具有互斥同步。

四、Message

4.1 消息标识

  一个消息就要区分它是属于哪个task的,而且还要区分同一个task里面的不同消息。所以一个Message包括两个部分:

  TASK_TYPE即是task的ID。在调度时,优先级高的task的消息会先得到执行处理。

4.2  消息结构体元素

  我们只需要关注红色圈着的这五个元素,第一个元素可以看出消息结构体节点是以链表的形式来管理的。HCI相关的是指USB dongle这种应用形式,由PC主机控制蓝牙BLE,咱们不讨论这种应用。

  红色圈到的五个元素分别的是:

  1)id,即第一点说到的消息标识。

  2)消息由哪个目标task处理。

  3)发出消息的task

  4)消息参数的长度

  5)消息参数的结构体地址

  消息参数结构体是可以自定义的,这里通过void*转换传入地址。

4.3  消息动态内存管理

RW内核专门给消息处理提供动态内存管理机制,接口是:

void*ke_msg_alloc(ke_msg_id_t const id, ke_task_id_t const dest_id,

ke_task_id_t const src_id,uint16_t const param_len);

一般给应用提供一个宏,用于简化写法:

#defineKE_MSG_ALLOC(id, dest, src, param_str) \

(struct param_str*) ke_msg_alloc(id, dest, src, sizeof(structparam_str))

释放接口是:void ke_msg_free(struct ke_msg const *param);. 在调度机制里面会通过判断消息处理的返回值对消息进行相应的处理,如释放消息的内存。用户编程一般不用调用释放接口。

4.4    消息接口

1)带参数的消息发送

voidke_msg_send(void const *param_ptr); param_ptr需要通过ke_msg_alloc接口申请动态内存。

一般的命令消息发送写法如下:

structgapm_set_dev_config_cmd* cmd = KE_MSG_ALLOC(GAPM_SET_DEV_CONFIG_CMD,

TASK_GAPM, TASK_APP,gapm_set_dev_config_cmd);

ke_msg_send(cmd);

2)不带参数的消息发送

voidke_msg_send_basic(ke_msg_id_t const id, ke_task_id_t const dest_id,ke_task_id_t const src_id)

五、TIMER

5.1 定时单位

  10ms,RW内核提供一个定时器,其并不是DA14580集成的TIMER1和TIMER3。对定时器的初始化等工作是在BLE初始化内部的,不需要用户编程设置。用户只需要调用RW内核的TIMER接口即可。

5.2    设置timer

  voidke_timer_set(ke_msg_id_t const timer_id, ke_task_id_t const task, uint16_tconst delay);

  timer_id是定时器消息,其属于一种不带参数的MESSAGE,delay是定时时间,10ms为单位,当时间到达时,RW内核会发送timer_id到目标task的消息队列。当内核schedule时即会执行定时器相应的回调。

六、Schedule

1.先取出最高优先级task的消息事件,该消息从消息队列中pop出来

2.根据task的状态和消息ID来得到对应的handler

3.执行该handler回调

4.根据回调的返回值对消息进行处理

1)如果返回KE_MSG_CONSUMED,则内核free掉该消息。

2)如果返回KE_MSG_NO_FREE,则内核不处理该消息,但该消息也不会重新放到消息队列,即内核不能再从消息队列中获得该消息。

3)如果返回KE_MSG_SAVED,则内核不free该消息,并且将该消息重新入列。

七、基于状态机的RW内核消息处理机制

Task数据结构如下:

  RW内核是基于状态机对消息进行处理的。从ke_task_desc看来,一个task包括显式的状态处理state_handler和默认的状态处理default_handler。

  state是task的状态机变量,task可能有多个状态,那么state_handler是状态处理集合,每个状态可能会处理多个消息回调,例如上层task会发送消息来执行调用,或者下层task发送消息来执行回调。

  default_handler处理的消息代表该task在任意状态时都可能受到的消息,例如底层task发出的断开连接消息。

  我们也可以得出,ke_state_handler代表一个状态下的多个消息处理。因此,state_handler是一个ke_state_handler数组,而default_handler则是ke_state_handler元素。

八、参考文献:

《UM-B-015_DA14580 Software architecture v4.0.pdf》、

《RW-BT-KERNEL-SW-FS.pdf》。

下一篇,敬请期待:

  全球最低功耗蓝牙单芯片DA14580的软件体系

    -层次架构和BLE消息事件处理过程

  技术咨询请发邮件:[email protected]。

百分百原创,每周两篇,阿里、魅族、nvidia、龙芯、炬力、拓尔思等顶级企业资深工程师分享----嵌入式、Linux、物联网、GPU、Android、自动驾驶等技术,欢迎扫码关注微信公众号:嵌入式企鹅圈,实时推送原创文章!

时间: 2024-10-11 22:37:47

全球最低功耗蓝牙单芯片DA14580的软件体系 -RW内核和消息处理机制的相关文章

全球最低功耗蓝牙单芯片DA14580的软件体系 -层次架构和BLE消息事件处理过程

在作者之前发表的<全球最低功耗蓝牙单芯片DA14580的系统架构和应用开发框架分析>.<全球最低功耗蓝牙单芯片DA14580的硬件架构和低功耗>.<全球最低功耗蓝牙单芯片DA14580的软件体系-RW内核和消息处理机制>三篇文章分析了DA14580的SDK开发目录结构.硬件架构.低功耗.RW内核和消息处理机制.本篇文章将深入到具体的源码去分析DA14580平台的软件层次架构和具体的BLE消息处理过程,以此佐证前面发表的文章. 一.软件层次架构 1.1 BLE协议栈 从中

全球最低功耗蓝牙单芯片DA14580的硬件架构和低功耗

号称全球最低功耗蓝牙单芯片DA14580在可穿戴市场.健康医疗.ibeacon定位等市场得到广泛的应用,但是因为其较为封闭的技术/资料支持导致开发人员有较高的技术门槛,网络上也极少看到有关DA14580的开发技术分享,因此一般企业和一般技术团队都不敢贸然采用该平台,但一旦精通该芯片平台的开发,即可在蓝牙方案应用开发中获得较大的技术优势. 作者在集成电路领域有较为深厚的积累,在DA14580平台也有丰富的开发经验,接下来将以一个系列文章对DA14580的硬件架构和软件体系进行分析.如需技术咨询,请

全球主流8位MCU芯片详细解剖No.2:英飞凌 XC866 - 全文

[导读] XC866是新型8位微控制器系列(XC800)的第一代系列产品,集成高性能8051核.片内FLASH及功能强大的外设集.此外,XC800系列产品内部集成的片 内振荡器和支持3.3V或5.0V单电源供电的嵌入式电压调节器(EVR)进一步增强了产品性能并有效地节省了系统成本. 关键词:XC8668位MCU英飞凌 往期系列文章推荐: 全球主流8位MCU芯片详细解剖No.1:飞思卡尔 MC9S08AC60 简介 XC866是 新型8位微控制器系列(XC800)的第一代系列产品,集成高性能805

高通QCA9377 WiFi蓝牙模块芯片介绍

QCA9377将先进的1x1双频段802.11acMUMIMOWiFi+蓝牙5结合在一个高性能.低功耗.小尺寸的芯片系统 (SoC)中. QCA9377 soc设计用于在单芯片解决方案中提供无线局域网和蓝牙低能量技术的卓越集成,QCA 9377 SoC提供低 功率双频(2.4&5 GHz).1流(1x1).802.11ac MU-MIMO和蓝牙5.0技术. QCA9377支持高速WiFi连接,丰富了几乎所有连接设备的媒体体验,并对优化能效,这对于延长便携式设备的电池 寿命至关重要. 采用先进的W

全球最新独角兽榜单出炉 中国公司33家上榜!

全球最新独角兽榜单出炉 中国公司33家上榜! 华股财经2016-09-09 13:39:24阅读(1893)评论(0) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 全球最新独角兽榜单出炉,中国公司33家上榜!最产独角兽的领域竟是电商.软件服务--(附榜单) 转眼已近2016年最后一季,从去年下半年开始的全球资本寒冬仍在持续.受到英国脱欧.美国大选.中国经济增速下滑.美联储加息等一系列因素影响,全球投资机构普遍对市场持观望态度. Uber.滴

揭开全球第一颗SDN交换芯片的神秘面纱

编者按:全球第一颗SDN交换芯片一直被一层神秘的面纱包围着,小编近日采访了一下盛科网络的张卫峰张总,为您揭开全球第一颗SDN交换芯片神秘的面纱,以下是采访内容. SDN是一个很泛泛的概念,它可以有很多不同的实现方式,而OpenFlow技术是发展最早的,最广为人知的,并且唯一标准化的SDN实现.但是由于一直没有针对OpenFlow的网络交换芯片问世,所有做OpenFlow交换机的设备商都做得很郁闷,用现有的传统交换芯片做出来的OpenFlow交换机,限制都太多,甚至业内有人说,SDN之所以落地缓慢

NXP低功耗蓝牙集成芯片QN9080C的时钟配置

/***************************************************************************************************** Configuration BOARD_BootClockRUN *****************************************************************************************************//* TEXT BELO

联发科RT3662无线路由器双频802.11n系统单芯片

RT3662结合了Rayink的双频 802.11n 系统单芯片,兼容2T3RMAC,BB,2 4/5GHz射频,高性能的500MHz MIPS74KcCPU核心,一个USB主机和一个USB OTG,两个千兆位以太网MAC,一个PCle主机/设备和一个PCI主机 /设备.RT3662采用Ralink OptiLink技术,可进行显性 (explicit) 与隐性 (implicit) 波束成形,带来更佳的效能表现 ,每个频段的数据传输率最高可达至 300Mbit/s. USB端口可以配置为访问数

Nordic Semiconductor nRF52832 蓝牙智能多协议单芯片解决方案荣获《中国电子商情》编辑选择奖

挪威奥斯陆 – 2016年4月11日 – Nordic Semiconductor ASA (OSE: NOD) 赢得<中国电子商情>颁发的“2015年编辑选择奖”,其nRF52 系列中的第一款产品nRF52832蓝牙智能系统级芯片(SoC)荣获<中国电子商情>评定为“2015 年度中国最具竞争力接口产品”. 由<中国电子商情>和中电会展与信息传播有限公司联合举办的“2015年编辑选择奖”,评选准则设定在品牌影响力.市场份额.技术创新以及产品服务等方面的考虑.Nordi