《低功耗蓝牙开发权威指南》——3.4节协议栈划分

简介:

本节书摘来自华章社区《低功耗蓝牙开发权威指南》一书中的第3章,第3.4节协议栈划分,作者 (英)Robin Heydon,更多章节内容可以访问云栖社区“华章社区”公众号查看

3.4 协议栈划分
构建一个低功耗蓝牙产品可能使用多种不同的协议栈划分方案。标准规范定义了一种协议栈划分的方法,即使用主机控制器接口分隔主机和控制器这两部分。即便如此,我们也可以使用许多不同的方案。

3.4.1 单芯片解决方案
单芯片解决方案可能是低功耗蓝牙里最简单的协议栈划分方案,如图3-6所示。图中其实并未划分协议栈,产品的所有部分都装在一个芯片上。该芯片包括控制器、主机软件和应用程序。这是低功耗产品的极简方案,只需要一个电源、一根天线、一些连接按钮或灯泡的硬件接口,以及一些额外的分立元件。


f0f6d93d8a915247de30f24a501b81fb2a065e0c

不过,使用单芯片解决方案也有一些劣势。首先,因为芯片资源使用受限会导致开发环境使用起来也很困难。其次,为降低成本需要将软件烧录在片内的只读存储器(ROM)中,这就需要为每个产品单独定制芯片。当产品的批量很大时,这样做可以减少物料清单中元件的数量,但在小批量生产时,成本却可能相当昂贵。
对小批量生产或是原型产品来说,可以选用量产的单芯片和一块小的非易失性存储器芯片相结合,前者包含了从控制器到主机的所有一切,后者用于存储应用程序。这会让小批量生产具有非常低的成本。上电时,在非易失性存储器中的内容被读入单芯片中执行。因此,可以同时拥有一个有效的原型平台,以及一个具有成本效益的小规模生产方案。

3.4.2 双芯片解决方案
经典的双芯片解决方案是将控制器放在一个芯片上,而将主机和应用程序放在另一个单独的芯片上,如图3-7a。这种模式通常用于手机和电脑,因为它们已经拥有了非常强大的处理器能够运行完整的主机和应用软件栈。该方案通常使用提供了标准的主机控制器接口的量产控制器芯片。对于拥有强大处理器的设备而言,这种架构上的划分固然是一种理想的方案,不过对其他类型的设备而言,该方案却不能视作理想的选择。


528336c9c8695d86dba70c42ee5b998c09724a69

一种替代的双芯片解决方案把控制器和主机放在同一个芯片上,而把应用程序放在另一个单独的芯片上,如图3-7b所示。这样做的好处是,由于应用芯片不需要太多的内存或其他资源来运行应用程序,它可以是一个非常小的低功耗微处理器。两个芯片之间的接口通常是一个自定义的接口,比如采用简单的UART。该解决方案的优点是两种标准的量产芯片可以相互组合,同时,还可使用关于应用芯片的标准开发工具。

3.4.3 三芯片解决方案
当然,还可以使用多芯片解决方案,例如结合一个标准的控制器芯片、一个主机芯片和一个应用芯片,如图3-8所示。其中,主机芯片将需要两个独立的接口。


4a146b9c7bfe02fdb16c2ad52541abd0b36985f5

这种解决方案往往十分昂贵,通常只限于开发那些使用多个接口以允许每层单独进行测试的系统。小批量生产时,由于减少元器件带来的成本节省较为有限,也能够容忍这种复杂性。对于大批量生产的产品,从成本的角度来看绝对不会采用这种架构。

相关文章
|
25天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
116 9
|
16天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
22 1
|
3天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
25 5
|
19天前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
22天前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
24天前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
47 4
|
28天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
数据结构(栈与列队)
数据结构(栈与列队)
20 1
|
2月前
|
存储 JavaScript 前端开发
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
72 1
|
2月前
【数据结构】-- 栈和队列
【数据结构】-- 栈和队列
17 0