翻译的是这个文档。
它介绍了整个系统架构,组件,应用程序编程接口(API)以及开发工具链,环境和过程。
问题点请在评论中留言,我看到了回去改正。
继续上篇,

4 DA1458x Software Platform Overview


介绍每一层的功能,介绍针对编程用户的API。

4.1 System Software and Main Loop

系统软件和主循环。

在系统启动时,main函数将初始化系统并进入主循环。 关键概念很简单。 检查BLE是否处于活动状态,以及是否为内核调度程序提供CPU时间以处理所有未决消息和事件。 然后查询用户应用程序是否具有与消息无关的任务。 如果内核和用户应用程序都没有其他要执行的内容,则迅速过渡到低功耗模式并等待中断再次开始。 用户应用程序无意更改主循环。

提供了一组回调,通过这些回调,应用程序可以获取有关主循环状态的通知。 对于这些回调,我们经常使用术语异步执行,以将它们与内核调度程序中生成的其他事件和回调(称为同步执行)区分开来。 应用程序可以使用回调的返回值或通过相应地设置睡眠设置来部分控制主循环。 在这里重要的是要理解,当BLE处于活动状态时,将从主循环中调用内核调度程序。 如果我们不将控制权交还给主循环,或者BLE未激活,则内核消息的处理将被延迟。

4.2 Peripheral and Radio Drivers

有许多驱动,编程都可以去调用。
驱动只能是kernel and BLE controller software来复位。
however the rest of the drivers are to be used only by the kernel and BLE controller software.

4.3 Real Time Kernel

实时内核是Riviera Waves他们家的。
Real Time Kernel licensed from Riviera Waves
几乎完整的BLE堆栈和大多数应用程序都利用了实时内核提供的服务。
The kernel offers task, message, events and dynamic memory capabilities.
每当一个任务试图向另一个任务发送消息时,这些任务就会与消息进行通信,这些消息将被推送到队列中。 计时器和其他硬件事件也将事件推送到队列中。 每当从主循环调用内核调度程序时,它将根据消息和事件的优先级将消息和事件弹出队列,并调用相关的处理程序,从而触发不同任务的执行。 继续执行直到队列为空。

4.4 Bluetooth Low Energy Software

BLE软件实现了Bluetooth®标准的版本4.1中指定的Bluetooth®低能耗协议,并且完全符合该标准。 它是单模式BLE实现,因此不支持基本速率/增强数据速率协议(BR / EDR)。
BLE软件的基本部分由与主机和控制器相关的软件组成。
堆栈的每一层(ATT,GATT,GAP等)都被实例化为多个不同的任务。 无线电事件由驱动程序捕获,并馈送到BLE控制器的低级软件。 事件处理程序产生触发协议层的消息。 如果需要用户操作或用户通知,则此消息序列会将消息分派到应用程序或配置文件任务。 相反,如果用户应用程序要执行特定操作,则会将消息调度到较低层,从而开始一系列可能到达的消息,具体取决于操作,BLE控制器和无线电。
在主机之上,提供了一个随时可用的配置文件库和一些配置文件实用程序,以简化应用程序开发。 程序员应与配置文件,GATT和GAP模块接口,以执行BLE应用程序所需的所有功能。

4.5 Application Software

尽管所提供的消息API功能强大且完整,但它对构建应用程序的速度和便捷程度提出了一些限制。 为了在软件版本5.0.x中解决此问题,我们引入了一个称为SDK Application的新层,该层收集了在库中构建应用程序所需的部分常用功能的一部分,该库公开了许多API和帮助程序功能。 已经采取了许多措施,尽可能向用户隐藏任务管理和消息管理,并提供类似于功能/回调的API。

4.6 Memory Organization

32 kB One-Time-Programmable (OTP). At power up or reset of the DA1458x, the primary boot
code (ROM code) checks if the OTP memory is programmed and if it is, it proceeds with mirroring the OTP contents to System RAM and it programs execution.

128 kB Flash (DA14583 only). At power up or reset of the DA14583, the primary boot code (ROM
code) loads the secondary Bootloader (from OTP memory or FLASH) and the Secondary Bootloader proceeds with copying the FLASH image to System RAM and it programs execution.

如果用DA14583的话,是先在ROM里的boot code去加载secondary Bootloader(from OTP memory or FLASH),然后也是把flash程序拷贝到RAM去跑。
两个问题
1.boot code怎么知道该去OTP还是去flash里面找加载secondary Bootloader?后续需要查一下资料。
2.flash的读取速度应该很慢,所以不支持flash直接执行程序,需要拷贝到ram里面去执行。

4.7 Supported Hardware Configurations

4.7.1 Integrated Processor
使用DA1458x系列开发应用程序的直接方法是集成处理器配置。 所有SW组件,较低层(控制器),较高层(主机),配置文件和完整的应用程序都作为单芯片解决方案在DA14580 / 581/583上运行。 此配置非常适合许多中低复杂性应用程序。 请检查客户支持站点上Dialog提供的参考设计的完整列表,以了解可以支持的应用程序的复杂性。

4.7.2 External Processor
如果存在外部处理器或在中高复杂性应用中,则DA1458x可用作通过称为通用传输层(GTL)的专有协议从外部处理器控制的BLE接口。 DA1458x可以容纳链路层,主机协议和配置文件,并且外部处理器将实现应用程序功能。 这两个组件将通过GTL通过串行链路进行通信,该串行链路可以是UART或SPI。 可以在参考资料中找到有关外部处理器配置以及示例应用程序的更多信息。 [17]。
[17] UM-B-013, DA14580/581 External processor interface over SPI, User manual, Dialog
Semiconductor.

4.8 Development Environment

略。

5 Real Time Kernel

5.1 Overview

DA145x软件平台利用了Riviera Waves许可的小型高效实时内核。 内核提供以下功能:
●任务创建和状态转换。
●任务之间的消息交换。
●计时器管理。
●动态内存分配。
●BLE事件的调度和处理。

5.2 Scheduler

内核的核心是在应用程序主循环中运行的调度程序。 调度程序检查是否设置了事件,并通过调用相应的处理程序来处理未决事件。 该事件可能是BLE或计时器事件,即两个任务之间的消息。
调度程序从BLE内核HW获取任何时序信息。 主循环代码可确保在BLE内核的硬件模块未处于睡眠模式时不执行内核调度程序。
内核的实现驻留在ROM存储区中。 因此,源代码文件不包含在SDK分发中。 API类型的定义和API函数的原型可以在以下头文件中找到。
●ke_task.h-内核任务管理和创建API。
●ke_msg.h-消息处理API。
●ke_mem.h-动态内存分配API。
●ke_timer.h-计时器创建和删除API。

个人理解,内核的实现是存在ROM中,那么对应的工程文件中就没有这些.h头文件对应的.c文件了。

5.3 Tasks

DA1458x SDK的每个独立软件模块(即BLE堆栈层/ GATT配置文件/主机应用程序等)都被实例化为内核的任务。该任务通常在系统初始化时创建。单个BLE应用程序中支持的最大任务数为23。
任务由任务ID号定义,该ID是每个任务的唯一标识符和任务描述符结构。结构的类型是在ke_task.h中定义的struct ke_task_desc。任务描述符的成员确定应用程序每个状态的消息处理程序,默认消息处理程序,当前任务状态的占位符,任务的最高有效状态以及任务实例的最大数量。

该任务是通过调用ke_task_create()函数创建的。任务ID和描述符在函数参数中传递。
通过调用ke_task_set()可以更改任务的状态。任务的当前状态由ke_state_set()返回。
内核任务创建和管理的所有API函数和类型都在ke_task.h头文件中声明。

● Types
○ ke_msg_handler – Message handler structure
○ ke_state_handler – List of message handlers for a specific or default state.
○ ke_task_desc - Task descriptor.
● Functions
○ ke_task_create() – Creates a new task.
○ ke_state_set() – Sets the state of the task.
○ ke_state_get() – Returns the current state of the task.

5.4 Dynamic Memory Allocation

内核为应用程序代码提供API,以便在内核的堆内存中进行动态内存分配。 DA1458x内核中定义了四个堆存储区:
●KE_MEM_ENV –用于环境变量的内存分配
●KE_MEM_ATT_DB –用于ATT协议数据库,即服务,特征,属性
●KE_MEM_KE_MSG –用于内核消息的内存分配
●KE_MEM_NON_RETENTION –通用堆内存。 如果在此堆中分配的内存空间不为零,则在某个时间点,则不允许进入深度睡眠模式

堆存储器的大小由选定的睡眠模式内存映射配置决定,如果选择了深度睡眠模式内存映射配置,则堆内存大小配置参数决定。 有关SDK配置的更多信息,请阅读[21]。
通过调用ke_malloc()函数可以在任何这些堆中进行动态内存分配。堆内存的大小和选择都在该函数的参数中传递。 如果所选堆内存中的内存空间不足,则内核内存管理代码将尝试在另一个堆中分配请求的内存空间。 如果所有堆内存中的内存分配失败,内核将发出系统软件重置信息。
The API functions provided by the kernel are:
● ke_malloc() – Allocate the requested memory space.
● ke_free() – Free the allocate memory space at the requested memory address.

5.5 Messages

内核提供了一种在任务之间交换消息的机制。 内核交换的消息具有特定的格式。 该格式由ke_msg.h中定义的struct ke_msg类型确定。 ke_msg结构包括以下成员。
●Id:包含消息标识的16位无符号整数。 十个最低有效位形成一个在任务消息中唯一的序号。 六个最高有效位中包含任务的ID,以确保系统中消息标识的唯一性。宏KE_BUILD_ID可用于构建符合此约定的消息ID。
●dest_id:消息的目标任务的任务ID。
●src_id:消息源任务的任务ID。
●param_len:param中包含的消息数据的大小。
●param:消息数据的占位符。 结构成员的类型是一个32位无符号整数的位置表。 但是,分配的内存空间的大小由堆内存确定,由消息内存分配函数分配,并且它等于param_len。

消息的传输分为三个步骤:
1.通过发送方任务分配消息结构。 通过调用以下宏之一来执行消息分配:
○KE_MSG_ALLOC:为消息分配KE_MEM_KE_MSG堆内存中的空间。 消息ID,源任务ID和目标任务ID以及消息的数据类型在函数的参数中传递。 函数根据数据类型计算要分配的内存空间。 返回指向已分配消息的数据开头的指针。
○KE_MSG_ALLOC_DYN:类似于KE_MSG_ALLOC。 在附加参数中传递与数据类型大小相同的附加内存大小。
2.填充消息参数。 源任务的代码应填写消息的数据。
3.消息结构被推送到内核中。

通过调用ke_msg_send()将消息发送到目标任务。 必须在函数的参数中传递由KE_MSG_ALLOC或KE_MSG_ALLOC_DYN返回的指针。 如果消息已分配但未发送,则必须调用ke_msg_free()释放已分配的内存空间。

通过在消息的任务描述符(ke_task_desc)中定义消息处理程序功能(结构ke_msg_handler),可以实现对发送给任务的消息的接收。当目标任务使用消息时,状态处理程序应返回KE_MSG_CONSUMED,而将消息转发到另一个任务时,状态处理程序应返回KE_MSG_NO_FREE。 函数ke_msg_forward()必须用于此操作。

5.6 Timer

DA1458x内核提供计时器服务来创建和删除计时器事件。 内核计时器的时间参考是BLE硬件内核的BLE_GROSS_TIMER。 BLE_GROSS_TIMER计时器的精度为10毫秒。 请求的计时器事件的任务将通过接收消息来通知计时器的到期时间。 消息ID等于用于创建定时器的定时器ID,因此,定时器ID必须是有效的消息ID,如5.5节中所述。 还必须在任务处理程序列表中定义计时器处理程序功能。 内核计时器是一次性计时器。
●API函数
○app_timer_set()–这是ke_timer_set()的包装。 计时器ID,任务ID和超时,以10毫秒为单位。 最大有效超时为30000,相当于5分钟。
○ke_timer_delete()–删除活动的内核计时器。

这一个章节看的太迷了,基本上看懂的很少,尴尬。

6 Bluetooth Low Energy Software

6.1 Overview


DA1458x的大多数BLE控制器都是通过硬件实现的。 在控制器的顶部,主机具有所有必需的层。 L2CAP和SMP是堆栈中的内部层,尽管可以实现,但它们不打算直接从应用程序访问。 大多数ATT层不应直接从应用程序访问,因为它的功能是通过GATT提供的。 属性数据库API可用于实现与配置文件相关的功能。
GAP和GATT层建立在ATT和SMP之上。 这两层构成了主机与应用程序的边界。 大多数操作可以使用这两个API来执行。 为了进一步帮助开发,DA1458x SDK提供了一个随时可用的配置文件实现库。 这些概要文件使用GATT和ATT API以及在prf_utils.c中收集的一组帮助器函数。 这些配置文件向应用程序公开了消息API和一组函数调用。

主机代码已预编译并刻录到ROM中,而配置文件实现和prf_utils.c则以源代码提供,并与应用程序一起编译并在RAM中运行。 ROM的符号在rom_symdef.txt文件中公开,并在构建过程中与用户应用程序链接。

这下明白了,ROM代码是怎么实现的了,在HOST里面的代码,都是固化在ROM里面了已经,然后把prf_utils.c来做个转换配置。
ROM代码在编译器链接的时候是具体怎么操作,可能还是需要研究一下。

图8中的箭头指定可由用户应用程序使用的API。 此外,这些也列在表1中作为参考。

这个图有用,当需要修改某一层时候,对应的api在哪些文件里面,就来这里查。
对应的每一层的API接口,都是RW公司的这些单独的文档里面有写。

6.2 GAP

RW-BLE通用访问配置文件(GAP)定义了与蓝牙设备的发现和链接管理有关的基本过程。此外,它定义了与使用不同LE安全模式和级别有关的过程。有关API的详细说明,请参见[11]。
RW-BLE GAP为LE GAP提供了完整而实质的支持:
●四个角色–中央,外围,广播和扫描仪。
●广播和扫描。
●模式–发现,连接,绑定。
●身份验证,加密和签名的安全性。
●链接建立和分离。
●随机和静态地址。
●隐私功能。
●配对和密钥生成。
RW-BLE GAP分为两个部分:GAP管理器(GAPM)和GAP控制器(GAPC)。 GAP管理器管理与已建立的链接无关的所有应用程序请求。另一方面,GAP控制器(称为GAPC)是在与对等设备的连接上创建的,并在连接终止时被删除。

GAP管理器初始化在system_init()函数中进行。 当GAP实体已初始化并准备向上层提供服务时,它将调度GAPM_DEVICE_READY_IND消息。 该消息在GAP应用程序模块内部处理。 GAP模块通过将GAP管理器配置为特定角色进行响应,并发送GAPM_SET_DEV_CONFIG消息。 完成GAP管理器配置后,设备准备初始化数据库,然后根据所选角色执行诸如扫描和通告之类的操作,以建立与其他对等方的连接。
例如,为了开始广告,将GAPM_START_ADVERTISE_CMD消息编译并发送到GAPM。 使用KE_MSG_ALLOC宏分配消息,例如:

struct gapm_start_advertise_cmd* cmd = KE_MSG_ALLOC(GAPM_START_ADVERTISE_CMD,
TASK_GAPM, TASK_APP, gapm_start_advertise_cmd);

The message is filled with the necessary data:
cmd->op.code = GAPM_ADV_UNDIRECT;
cmd->op.addr_src = GAPM_PUBLIC_ADDR;
cmd->intv_min = APP_ADV_INT_MIN;
cmd->intv_max = APP_ADV_INT_MAX;
cmd->channel_map = APP_ADV_CHMAP;
cmd->info.host.mode = GAP_GEN_DISCOVERABLE;

and is then sent to the GAPM task. The result is to start an undirected advertising operation.
Please refer to [11] for a complete list of the supported messages and operations of the GAPM.
当远程对等方尝试连接到设备时,GAP控制器将通过GAPC_CONNECTION_REQ_IND向应用程序报告对等方的请求。 由于堆栈现在是指特定的连接,因此消息现在将从相关的GAP控制器传递到相关的GAP控制器。 应用程序GAP处理程序将以所需的安全要求响应此请求,并将尝试根据要求与对等方建立安全或非安全连接。 安全管理协议消息通过GAP控制器到达应用程序。 建立安全连接后,设备即已连接,并且可以开始使用可用的配置文件服务。 每个服务可能有其自己的安全性要求,并且建立具有足够安全性的连接会将服务暴露给对等方。
请参阅[11],以获取GAPC支持的消息和操作的完整列表。

6.3 BLE Data Services

与对等设备建立连接后,与GAP相关的操作仅用于管理连接的某些方面,例如更改连接参数,安全级别或断开连接。 BLE连接的数据服务通过数据库提供。BLE堆栈为应用程序提供了许多API,以管理和与本地和远程数据库交换数据。 这些就是GATT管理器和GATT控制器API。 另外,程序员也可以直接使用属性数据库API(ATTDB),而不需要通过GATT来添加和管理数据库中的服务和特征。 其背后的原因是产生更小而有效的代码。 用户可以通过GATT使用任何一种方法,也可以直接使用ATTDB。

这一节就是讲ATTDB也可以用于交换数据,而不必用GATT,那么优势是啥?反正不想了解太多,就直接用GATT。

6.3.1 GATT
与GAP相似,GATT包含两个模块:GATT管理器和GATT控制器。 GATT管理器(manager)与特定的连接无关,它被实例化一次以提供用于管理内部属性数据库的消息API。 GATT管理器放置在配置文件或应用程序与ATT管理器之间,并在它们之间传递消息。 它提供服务和属性操作,例如向数据库添加服务和特征,设置和获取权限级别以及设置和获取属性值。

GATT控制器(controller)与特定的BLE连接实例有关。 客户端和服务器角色均使用该接口。 在客户端(client)角色中,该接口用于发现,读取和写入对等设备的属性,并接收通知或指示。 在服务器(server)角色中,当对等设备请求修改数据库时,将通知此接口,并发送指示或通知。
有关GATT控制器的详细说明,请参阅[12]。

6.3.2 ATTDB
代替使用GATT Manager API,用户可以直接访问本机属性数据库API。 ATTDB API提供了以下功能:在数据库中添加元素(服务和属性),选择元素在数据库中的位置,隐藏/显示属性以及管理权限及其值。 有关ATTDB支持的功能的详细说明,请参阅attm_db.h,attm_db_128.h和attm_util.h文件以及[13]中的内容。

6.4 Bluetooth LE Profiles

SDK提供了各种配置文件的实现,每种配置文件都有向应用程序公开的自己的特定于配置文件的API。请访问对话框支持网站,以获取SDK支持的配置文件的最新列表。有两个不同的角色:服务器角色和客户端角色。服务器在本地设备上公开一个配置文件数据库。客户端读取,写入和管理远程设备的数据库。

每个配置文件服务器都实现常规和特定于配置文件的功能。通用部分包括:
●概要文件数据库描述以及所有服务和属性。
●配置文件初始化功能,用于创建配置文件任务。
●应用程序任务发出相关消息时创建数据库的数据库创建处理程序。
●配置文件启用处理程序,当应用程序任务发出相关消息时启用该处理程序。
●配置文件断开连接处理程序,在连接断开时负责配置文件内务处理。

根据配置文件,配置文件特定部分可以包括在有或没有通知的情况下更新特定属性,以及处理和验证来自对等设备的写入尝试。

类似的原则也适用于客户端配置文件。客户端将包括预期服务,功能和消息处理程序的描述,以初始化,启用客户端,保留发现结果以及错误和断开连接的处理程序。根据特定的配置文件,可能存在用于读写操作和接收通知的特殊处理程序,并与特定属性绑定在一起。有关详细信息,请参阅支持站点中每个配置文件的可用文档,或浏览<profile_short> .h和<profile_short> _task.h头文件。

该SDK提供了一组有用的辅助函数,以访问GATT和ATTDB服务。它们位于prf_utils.h中,在现有的配置文件代码中经常使用。有关详细信息,请参阅prf_utils.h。

DA14580软件开发平台参考(二)相关推荐

  1. DA14580软件开发平台参考(一)

    翻译的是这个文档. 它介绍了整个系统架构,组件,应用程序编程接口(API)以及开发工具链,环境和过程. 问题点请在评论中留言,我看到了回去改正. 3 介绍 本文档旨在通过为蓝牙低功耗标准提供实用的高级 ...

  2. DA14580软件开发平台参考(五)

    翻译的是这个文档. 它介绍了整个系统架构,组件,应用程序编程接口(API)以及开发工具链,环境和过程. 问题点请在评论中留言,我看到了回去改正. 这篇主要是讲SDk5.0.4里面有什么? 11 Dev ...

  3. DA14580软件开发平台参考(三)

    翻译的是这个文档. 它介绍了整个系统架构,组件,应用程序编程接口(API)以及开发工具链,环境和过程. 问题点请在评论中留言,我看到了回去改正. 7 System Software DA1458x S ...

  4. 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 文章汇总及学习指南...

    一.AgileEAS.NET平台简介 AgileEAS.NET平台是一套应用系统快速开发平台,用于帮助中小软件开发商快速构建自己的企业信息管理类开发团队,以达到节省开发成本.缩短开发时间,快速适应市场 ...

  5. 使用华为云软件开发平台devcloud和应用管理与运维平台servicestage实现持续集成(CI)持续部署(CD)

    本文来自于知乎专栏:https://zhuanlan.zhihu.com/p/385350636 说明: 软件开发平台devcloud是持续集成(CI)持续部署(CD)工具: 应用管理与运维平台ser ...

  6. 建立智慧的软件开发中心,第 5 部分: 智慧软件开发中心参考框架

    李纪华, 技术主管, IBM 简介: 随着应用软件复杂度的不断提高,软件架构越来越重要,好的架构可以增强系统的可用性.适应变化的能力以及健壮性.而参考架构(Reference Architecture ...

  7. 软件开发随笔系列二——关于架构和模型

    软件开发随笔系列二--关于架构和模型 文章目录 软件开发随笔系列二--关于架构和模型 软件模型 功能模型 概念层 边界 参与方 分组分类 逻辑层 功能组织图 层次.模块化 接口 流程模型 概念层 业务 ...

  8. 全Java网管软件开发平台SugarNMS

    一. SugarNMS平台介绍 智和网管软件开发平台(SugarNMS Platform)是北京智和信通技术有限公司专为期望快速搭建可靠网管软件的企业而准备,开发平台充分利用智和网管软件已有的软件功能 ...

  9. HiSDP —— 高效的C++软件开发平台

    目前阿里集团每天有近1000PB的数据是通过LogAgent采集的,为了让LogAgent做到资源占用节省和高效采集,背后是基于HiSDP去构建的. 缘由 当决定采用C++编程语言去开发一个软件时,紧 ...

最新文章

  1. ViewPager一屏显示多个item,及边缘滑动事件优化
  2. 基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署
  3. PHP去掉诡异的BOM \ufeff JSON开头包含红点
  4. 复习JavaScript随手记
  5. 一个YII社区学习网站
  6. 最全面的几何画板实用教程视频免费下载
  7. 微软 SQL Server 2019 将免费支持 Java;Rancher Labs获2500万美元融资;腾讯云进军日本市场……...
  8. Python 列表(List)
  9. Linux操作系统下进程讲解(史上最强总结)
  10. 如何有效使用Project
  11. java路径不存在则创建文件夹_java实现文件夹不存在则创建
  12. win10 当前操作环境不支持支付宝控件 完美解决办法
  13. 计算机专业改动漫设计,《计算机动漫与游戏制作》专业课程体系改革方案.doc...
  14. 制作课件的软件及特点作用
  15. 小白做shopee平台,怎么解决货源问题,这三点一定要掌握
  16. 企业微信自建应用开发
  17. 记 flip 简单的动画思路
  18. 仿“易企秀”编辑器之拖拉拽
  19. 【Unity3D】水波特效
  20. Mac上的Redis客户端 G-dis

热门文章

  1. psd转换html字体行高,将PSD网站模板转换为XHTML+CSS
  2. Redis Lua脚本大学教程
  3. linux脚本自动更换界面,linux自动更换壁纸脚本
  4. 前端面试问题(四)html css
  5. 科锐国际薪酬报告:汽车行业国际化人才成争夺焦点
  6. leetcode系列-198.打家劫舍
  7. 2022-1-23 C++ —— STL tuple
  8. WinForm 关于任务栏图标进程结束后图标无法自动清除的问题!
  9. 金程CFA:突发!高盛或大规模裁员!
  10. Existing lock /var/run/yum.pid: another copy is running as pid 22873. Another app is currently hold.