蓝牙4.0 传统蓝牙 低功耗 OSAL API接口 BLE系统架构 GPA 和 GATT

蓝牙4.0

      使用最广的短距离无线标准之一

      重新定义蓝牙技术:低功耗

      全新的蓝牙版本

  低功耗蓝牙,高速蓝牙,传统蓝牙

   logo

蓝牙4.0与传统蓝牙的关系

通信方式

蓝牙低功耗特性 

         高可靠性

          快速连接

         低成本,低功耗

          传输距离

           高安全性

OSAL

    BLE系统架构

  OSAL启动流程

void osalInitTasks(void)
{
    uint8 taskID = 0;
    tasksEvents = (uint16 *)osal_mem_alloc(sizeof(uint16) * tasksCnt);
    osal_memset(tasksEvents, 0 , (sizeof(uint16) * tasksCnt));
    
    LL_Init(taskID ++);
    Hal_Init(taskID ++);
    HCI_Init(taskID ++);
}

  OSAL工作原理

事件表和函数表

OSAL层API接口

       消息管理,任务同步,时间管理,中断管理,任务管理,内存管理,电源管理,非易失性内存管理

       消息管理 API

/*
 * 函数原型 uint8 *osal_msg_allocate(uint16 len)
 * 功能描述 为消息分配缓存空间
 */
osal_msg_allocate();

/*
 * 函数原型 uint8 osal_msg_deallocate(uint8 *msg_ptr)
 * 功能描述 释放消息的缓存空间
 */
osal_msg_deallocate();

/*
 * 函数原型 uint8 osal_msg_send(uint8 des tination_task, uint8 *msg_ptr)
 * 功能描述 一个任务发送消息的消息队列
 */
osal_msg_send();

/*
 * 函数原型 uint8 *osal_msg_receive(uint8 task_id)
 * 功能描述 一个任务从消息队列接收属于自己的消息
 */
osal_msg_receive();

      任务同步 API

/*
 * 函数原型 uint8 osal_set_event(uint8 task_id,uint16 event_flag)
 * 功能描述 运行一个任务设置某一事件
 */
osal_set_event();

      时间管理 API

/*
 * 函数原型 uint8 osal_start_timerEx(uint8 task_id,uint16 event_id,uint16 timeout_value)
 * 功能描述 设置个定时时间,定时时间到后,相应的事件被设置
 */
osal_start_timerEx();

/*
 * 函数原型 uint8 osal_stop_timerEx(uint8 task_id,uint16 event_id)
 * 功能描述 停止一级启动的定时器
 */
osal_stop_timerEx();

      任务管理API

/*
 * 函数原型 uint8 osal_init_system(void)
 * 功能描述 初始化 OSAL, 该函数是第一个被调用的OSAL函数
 */
osal_init_system();

/*
 * 函数原型
 * 功能描述 该函数包含一个无限循环,它将查询所有的任务事件,如果有事件发生,则执行相应的操作
 */
osal_start_system();

         内存管理 API

/*
 * 函数原型 void *osal_mem_alloc(uint16 size);
 * 功能描述 在堆上分配指定大小的缓冲区
 */
osal_mem_alloc();

/*
 * 函数原型 void osal_mem_free(void *ptr)
 * 功能描述 释放使用 osal_mem_allc() 分配的缓冲区
 */
osal_mem_free();

         非易失性闪存管理

/*
 * 函数原型 byte osal_nv_item_init(uint16 id, uint16 len, void *buf);
 * 功能描述 初始化 NV 条目,该函数检查是否存在 NV 条目,如果不存在,将创建并初始化该条目
 *          如果条目存在,每次调用osal_nv_read(),write() 进行读写之前,都要先调用该函数
 */
osal_nv_item_init();

/*
 * 函数原型  byte osal_nv_read(uint16 id, uint16 offset,uint16, void *buf);
 * 功能描述 从 NV 条目中读取数据,可以读取整个条目的数据,也可以读取部分数据
 */
osal_nv_read();
/*
 * 函数原型 byte osal_nv_write(uint16 id,uint16 offset, uint 16len,void *buf);
 * 功能描述 写数据到 NV 条目
 */
osal_nv_write();

       BLE协议分层

     

 GPA 和 GATT

       BLE核心规格

SimpleBLEPeripheral 示例

     强制的GAP服务                      包含设备信息和访问信息

     强制的GATT服务                    包含GATT服务器的信息

     SimpleGATTProfile服务        示例配置文件

属性表

    句柄      属性在表中的地址,每个属性有唯一的句柄

    类型      数据所代表的含义 (universal unique identifier)

    权限      GATT客户端设备对属性的访问权限

GATT 服务器和客户端通信子进程

     读特征值   使用特征值的UUID读  读多个特征值   读特征描述符  UUID发现特征值  写特征值  写特征描述符  特征值通知

GATT属性列表类型

      GATT_PRIMMARY_SERVICE_UUID   新服务的开始和服务类型

      GATT_CHARACTER_UUID                   特征声明

     GATT_CLIENT_CHAR_CFG_UUID      特征描述符

     GATT_CHAR_USER_DESC_UUID      特征描述符

基于GATT的蓝牙配置文件和服务

GAP的角色

     广播者  观察者   外部设备   集中器

GAP连接请求参数

    连接时间间隔  从机延时  监视超时

发布了51 篇原创文章 · 获赞 7 · 访问量 7898

猜你喜欢

转载自blog.csdn.net/qq_44226094/article/details/104169294