dialog BLE SDK 学习(1)
dialog DA14580 SDK版本:5.0.4。
本文介绍了SDK的运行流程,剖析arch_main.c的工作过程。
dialog的BLE协议栈,本来是想学习一下,看看是否能够移植到其他平台上,但是学习到目前,没看到希望。之前也了解过过TCP/IP协议栈(LWIP),有足够的独立性,可以自成体系,底层接口、上层API都很明晰,即使不懂内部运作,移植起来也不费力。但是,,,,,Dialog的这个协议栈明显是,,,没有多少的独立性。且不说它的底层,没有明显的统一的底层接口,更主要的是它跟一个伪/微操作系统紧密耦合在一起,构成一个整体,自然,操作系统是内置在芯片中ROM函数的,还有BLE的主机控制器接口及一下几层都是内置在芯片的ROM中,只留出了API接口。所以暂时无法把BLE协议栈跟芯片、伪/微OS分割开。但是通过它了解BLE协议的运行还是可以的。当然,水平有限,如有不当,请多多斧正。
废话不多说,来看正文。
1、初始化:
1.1、平台初始化:
看门狗、时钟、IO、存储器、外设、散列处理器、RF。
其中,IO(GPIO_init()->GPIO_reservations())、外设初始化(periph_init())可以有限的自行配置。
1.2、BLE初始化:
内核、电源、时钟;清除中断;RW初始化;链路层任务、属性协议任务、通用访问层规范任务初始化(注册初始化函数);开启BLE内核;RF校准;关闭睡眠;
1.3、应用初始化:
APP初始化:
复位任务环境;
创建APP任务(TASK_DESC_APP->app_default_handler->app_default_state->app_entry_point_handler),初始化任务变量(关闭状态);
初始化后的用户的初始化(user_app_main_loop_callbacks..app_on_init= user_app_init,)包括制造商标识初始化(mnf_data_init)、默认APP应用初始化(default_app_on_init),在该函数中可以看的添加的服务种类:电池服务、发现服务、在线更新固件服务等,这样需要相应的“开关”开启的。
链路层驱动的睡眠功能初始化;
1.4、时序设置、看门狗设置。
2、BLE事件调度(schedule_while_ble_on()):
这是个while循环,循环中处理这样几个事情:首先检查BLE是否上电了,然后获取BLE的事件结束标志。执行消息和事件的调度。如果BLE事件结束标志置位了,就执行RF校准(包涵温度和频率的校准)、APP的异步事件等。
while循环退出的条件是:app_asynch_trm() == GOTO_SLEEP,即:user_app_main_loop_callbacks.app_on_ble_powered()。user_callback_config.h。目前是NULL。可以修改。
rwip_schedule()是内置于ROM中,目前还不清楚是怎么运行的。
3、进入睡眠等待中断:
如果GLT空闲,关闭中断,异步睡眠处理,关闭RW电源,关闭RF电源,关闭看门狗,进入睡眠模式。
4、从中断中唤醒
恢复操作arch_resume_from_sleep(),开启中断,开启看门狗。
dialog BLE SDK 学习(1)的更多相关文章
- dialog BLE SDK 学习(3)
dialog DA14580 SDK版本:5.0.4. 本文介绍了DA14580 SDK的学习感想和建议,分享给大家. 首先,Dialog官网上的资料挺全的,但是是英文的,如果英文不好,比如笔者,阅读 ...
- Dialog BLE 学习之 修改分散加载文件 (2)
最近搞Dialog的BLE SDK,发现空间不够了,询问原厂,得知可以通过调整分散加载文件而增加空间,一方面是有42KB+8KB的硬件基础,另一方面是原有的程序限制为38KB+8KB.故顺便学习了下把 ...
- BLE MESH 学习[1] - ESP32 篇
BLE MESH 学习 BLE MESH 是一种蓝牙(n:m)组网的技术. 本篇先介绍 BLE MESH 到使用 ESP32 的官方示例对其进行学习讲解. 后面会进一步学习 SIG 的 BLE MES ...
- Unity接入九游SDK学习与踩坑
学习之路漫漫,应修之期远兮.持之以恒,方得始终. 这几日接入九游SDK,于浑浑噩噩中成长. 下面是步骤: 一:下载九游SDK 二:打开Android Studio新建一个工程,并且新建一个Androi ...
- 蓝牙 BLE 协议学习: 000-有关概念介绍
背景 在学校内就用过蓝牙技术参加过比赛(并拿了奖):而蓝牙作为物联网中比较常见的协议,有必要进行深入的学习.此后的文章会以 ble(v4.0) 进行学习. 介绍 蓝牙技术最初由电信巨头爱立信公司于 1 ...
- 从高德 SDK 学习 Android 动态加载资源
前不久跑去折腾高德 SDK 中的 HUD 功能,相信用过该功能的用户都知道 HUD 界面上的导航转向图标是动态变化的.从高德官方导航 API 文档中 AMapNaviGuide 类的描述可知,导航转向 ...
- DirectX9.0c SDK学习笔记(一)
Direct9.0c SDK中提供了一个叫DXviewer的*.x格式文件查看器的源码,代码给出了基于DXUT框架的模型显示接口使用方法, 对于我想编写一个动作捕捉的上位程序是大有助益的. 我的想法是 ...
- leancloud js SDK 学习
测试页面 AV.initialize("id", "key"); var TestObject = AV.Object.extend("TestObj ...
- 蓝牙 BLE 协议学习: 001-BLE协议栈整体架构
背景 在深入BLE协议帧之前,我们先看一下BLE协议栈整体架构. 转载自:<深入浅出低功耗蓝牙(BLE)协议栈> 架构 如上图所述,要实现一个BLE应用,首先需要一个支持BLE射频的芯片, ...
随机推荐
- java之struts框架入门教程
本教程主要讲述struts的简单入门操作 使用的是myeclipse工具 1.创建web项目 2.复制struts必要的jar包到 WebRoot/WEB-INF/lib 下 jar包列表如下: as ...
- Android应用瘦身
转:https://zhuanlan.zhihu.com/p/25465537 瘦身的目的 从目的导向来看,我们是不会无缘无故去做一件事情的,那我们对应用瘦身的目的是为了什么?答案是:提高下载转化率. ...
- cms-登陆
先介绍下登陆的思路: 1.在登陆页面首先前端验证用户名和密码是否正确,如果验证通过,则ajax的方式向后台提交数据. 2.在controller层,将得到的用户名名和密码封装进shiro的token, ...
- codevs 2620 战壕
时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description Smart和Sarah正在玩一个即时战略游戏. Smart在他的基地附近建立了n个 ...
- linux 命令——7 mv(转)
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...
- JS调试debug
1. debugger; 我以前也说过,你可以在JavaScript代码中加入一句debugger;来手工造成一个断点效果.需要带有条件的断点吗?你只需要用if语句包围它: if (something ...
- 【转】chrome浏览器的跨域设置——包括版本49前后两种设置
做前后分离的webapp开发的时候,出于一些原因往往需要将浏览器设置成支持跨域的模式,好在chrome浏览器就是支持可跨域的设置,网上也有很多chrome跨域设置教程.但是新版本的chrome浏览器提 ...
- FreeRTOS_软件定时器
FreeRTOS 软件定时器 实验 创建2个任务,start_task.timercontrol_task. start_stask:创建timercontrol_task任务:创建周期定时器Auto ...
- java基础——线程池
第2章 线程池 2.1 线程池概念 线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源. 我们详细的解释一下为什么要使用线程池 ...
- Java程序设计第四次作业内容 第五次作业10月9号发布,为第三章全部例题
第六题:使用判断语句,根据数字,输出对应的中文是星期几? 直接使用一个if语句的情况 int weekDay=3; if(weekDay==1){ sop("今天是星期一"); } ...