zoukankan      html  css  js  c++  java
  • 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(),开启中断,开启看门狗。

  • 相关阅读:
    B00009 C语言分割字符串库函数strtok
    B00009 C语言分割字符串库函数strtok
    I00026 计算数根
    I00026 计算数根
    I00025 寻找循环数
    Magic Stones CodeForces
    Continued Fractions CodeForces
    AtCoder Beginner Contest 116 D
    Applese 的毒气炸弹 G 牛客寒假算法基础集训营4(图论+最小生成树)
    Choosing The Commander CodeForces
  • 原文地址:https://www.cnblogs.com/Junbo20141201/p/6857641.html
Copyright © 2011-2022 走看看