SimpleLink WiFi CC32xx电源管理框架介绍
Loading the player...
将在30s后自动为您播放下一课程
欢迎学习适用于 CC3220 无线 MCU 的 电源管理框架教程。 本教程的 目标是了解 CC3220 器件的 各种低功耗模式, 并使用户熟悉 电源管理框架。 在学习本教程之后, 您将能够了解 CC3220 MCU 支持的各种 低功耗模式, 在 TI 驱动程序内 使用电源管理框架, 使用 TI 驱动程序 配置外设,初始化 并启用电源 管理结构, 为低功耗模式 指定 I/O 设置, 最后调试功率 感知应用。 CC3220 器件支持 以下功耗模式 -- 睡眠模式 -- 该模式是 ARM Cortex-M4 处理器的 标准低功耗模式; 低功耗深度睡眠模式 -- 我在本教程中 将其称为 LPDS。 在该模式下,功能 时钟和外设时钟 会选通 -- 慢时钟继续 在后台运行。 最后,我们有休眠模式, 它是关闭应用和网络 处理器的 极低功耗 模式。 慢时钟也会继续 在该模式下运行。 该图显展示了 其中每种功耗 模式的特性以及 相对电流消耗 和唤醒时间。 右侧的箭头 有两种含义。 一种含义是电流 消耗在从睡眠 转换到休眠时 会减少,相反,另一种 含义是唤醒时间 在从睡眠转换到 休眠时会增加。 您可以看到 各种功耗模式 是如何影响 RAM、 CPU 和外设上下文 保留的以及可以 使用哪些唤醒源。 让我们更加详细 一点地讨论每种模式。 在睡眠模式下, 处理器时钟 停止,这会 中止代码执行。 外设 配置 将会保留,但它们的 时钟会选通, 这将导致在未启用 睡眠时钟的情况下, 所有正在进行的 外设事务都会停止。 在睡眠模式下, 还会保留 SRAM 和慢时钟 计数器的内容。 睡眠模式下的 唤醒时间非常短, 任何中断都 可能唤醒 MCU。 在这里要注意的是, 当 MCU 进入睡眠模式时, 调试器会断开。 与睡眠模式类似,低功耗 深度睡眠模式会在保留 慢时钟计数器的同时 选通处理器时钟。 与睡眠模式不同, 外设时钟也会 选通,从而 导致配置损失。 不过,可以完全 或部分保留 SRAM。 256 KB 的 SRAM 划分为四个块, 其中每个块为 64 KB。 可以将任何数量的 块保留在低功耗 深度睡眠模式,但无法 保留某个块的一部分。 这意味着在进入 LPDS 之前可以通过 软件在 RAM 中保留外设 配置,并且可以通过 在唤醒之后 从 RAM 中检索 来恢复它。 唤醒时间大约 为 3 毫秒, 此时会执行软件开销。 在 LPDS 下,并非每个 中断都可以唤醒 MCU。 只有一组指定的 可编程唤醒源 可用于该模式。 可用的 唤醒源为 -- 来自网络处理器、LPDS 唤醒计时器的中断 -- 可以在应用中指定 它的持续时间。 此外,可以将 GPIO 的某个子集 设置为外部唤醒源。 与睡眠模式类似, 调试器会在 MCU 进入 LPDS 时断开。 LPDS 仅影响 应用 MCU,而 不会影响网络处理器, 这在本质上意味着, 任何网络配置, 包括到 AP 的连接 以及所有互联网 套接字连接,都将 在进入和退出 LPDS 时保留。 通过正确地 设置引脚, 电流消耗可以 低至 1 毫安, 并且器件 保持与 AP 和互联网的连接。 该模式非常适合 应用在大多数 时间都保持 空闲,但仍 需要保持连接到 网络以便可以 在接收到来自 网络的信号时 立即执行某种操作的情形。 休眠与 LPDS 和睡眠不同, 会影响应用 和 NWP 处理器, 从而导致极低的 电流消耗。 它本质上 会关闭芯片, 仅保留 少数寄存器。 慢时钟计数器会在 该模式下保持活动状态。 网络配置 也会丢失。 来自慢时钟 计数器的中断 可能会将系统 从休眠模式唤醒。 此外,可以同时将一组 指定的 GPIO 设置为 唤醒源。 尽管在该情况下 电流消耗极低, 但它与 LPDS 相比具有 相对较长的唤醒时间。 该模式非常适合 器件在大多数 时间处于 非活动状态, 只须定期或基于 某种 GPIO 活动 执行某种操作的情况。 到目前为止,我们 已经讨论了低功耗 模式及其特性。 在接下来的幻灯片中, 我们将从软件的角度 讨论如何 在应用中 使用低功耗功能。 在本教程中, 电源管理框架 将被称为 PM 模块或 PM 框架, 它是 TI 驱动 程序库的 一部分,负责 运行各种 低功耗模式。 尽管它可以 单独使用,无需 运行该库中的 外设驱动程序, 但强烈建议还 针对外设使用 TI 驱动程序。 这是因为,所有驱动程序 都能够感知功率,并在 电源管理模块中 注册它们自身。 这可以简化 外设配置管理, 此时 MCU 循环 进入 LPDS。 TI 驱动程序是易于使用的 接口驱动程序集合,适用于 大多数外设。 对于适用于德州仪器 (TI) 的其他 MCU 的 TI 驱动程序而言, 接口是类似的。 它位于 driverlib 之上, driverlib 是一个低级 外设驱动程序库。 使用通用 RTOS API 可使 驱动程序重新进入, 这意味着它们可以与任何 RTOS 一起工作,甚至无需 RTOS 即可工作, 前提是 提供了移植层。 CC3220 SDK 为 TI RTOS、Free RTOS 和非 OS 环境 提供移植层。 这些驱动程序 能够感知功率, 并且支持 SDK 中的 以下工具链 -- Code Composer Studio, 它是德州仪器 (TI) 提供的免费 IDE,以及 IAR Embedded Workbench 和 GCC。 如前面所述, PM 框架 与 TI 驱动程序集成在一起。 每个器件驱动程序都会 在打开接口时在 PM 模块中 注册它们自身。 应用需要在一开始 初始化 PM 模块, 但可以在 运行时启用 或禁用它。 通常,一进入 LPDS, 外设时钟就会选通, 并且外设 配置将会丢失。 PM 模块负责 在退出 LPDS 之后 启用该时钟。 它还将外设 配置恢复到 进入 LPDS 之前的状态。 如果在进入 LPDS 之前 未正确设置引脚,则可能 会导致电流泄漏。 因此,有必要 正确设置引脚。 PM 模块负责 根据设置 结构来设置引脚, 设置结构是 在初始化 PM 模块时指定的。 尽管 PM 模块 负责管理 外设配置和 引脚设置, 但它仍允许针对 进入 LPDS、退出 LPDS 和进入休眠模式等 各种功耗事件注册 挂钩函数。 如果在 RTOS 环境中 工作,并且启用了 PM 框架,则电源 管理会检查所有 注册的驱动程序 以检查是否可以 将 MCU 置于 LPDS。 仅在确认当前没有 任何外设处于活动 状态之后,它才 允许应用 MCU 进入 LPDS。 此外,它还确保它具有 足够的时间来循环 进入 LPDS 周期。 因此,如果某个任务要再次 极短暂地处于活动状态, 将运行睡眠负载, 而不是 LPDS。 如果在非 OS 环境中工作, 则应用必须显式 调用电源管理函数, 在这之后,它将 执行类似的检查, 以确定应用 MCU 是否可以 进入 LPDS。 与 LPDS 不同, 需要由应用 执行函数调用,以便 将 SOC 置于休眠模式。 无论 PM 框架 是否启用, 一旦调用 其 API, 系统就会进入休眠模式。 器件保持在休眠 模式的持续时间 作为参数传递 到函数中。 如果持续时间 大于最低值, 器件将进入 休眠模式, 并且保持在 该模式,直到 计时器计时结束或 发生外部触发事件。 可以在 PM 配置 结构中指定 GPIO 唤醒源。 可以在休眠 期间保留 I/O, 也可以在 PM 配置 结构中指定 I/O。 在使用休眠模式时, 开发人员需要确保 以下几点 -- 在进入休眠模式之前 停止网络处理器, 在从休眠模式唤醒之后 禁用保留,指定为 第 1 组的 SFlash 引脚保留已经 由引导加载 程序禁用。 对于其他组, 必须由应用 禁用保留, 但仅在重新 配置引脚之后进行。 下面针对其中的 每个字段提供了 样例电源管理 结构和简短 说明。 可以在 PM 配置 结构中指定 LPDS 的引脚 设置结构。 应正确设置引脚 以实现较低的 电流消耗, 这一点极其重要。 以下是所有引脚可能 出现的设置状态。 样例设置结构 如下所示 -- 能够以组的形式将 I/O 保留在休眠模式, 不支持针对 I/O 进行单独保留。 这里显示的是四个 消耗大部分 I/O 的组。 再强调一次,应确保 在从休眠模式唤醒之后 禁用保留。 无论器件进入 哪种低功耗, 调试器都将断开。 可以在器件退出 LPDS 并保持在 活动模式后重新 连接调试器。 如果希望重新连接到 调试器,则有必要使用 将调试接口在 LPDS 保持 活动状态并且不设置 JTag 引脚的设置。 要在从 LPDS 唤醒之后 重新连接调试器, 应用需要确保 应用 MCU 不立即 再次进入 LPDS。 可以通过以下方法 来实现该目的 -- 禁用功耗策略和 LPDS 退出挂钩函数, 或放置用户 控制的 while 循环, 该循环可以在 重新从调制器 连接之后中断。 以下 SDK 示例中 使用了到目前为止 展示的 大部分设置。 Idle Profile -- 这会运行 LPDS, 它是基于 RTOS 的示例, 根据 CCS 和 IAR 使用 不同的 RTOS。 Idle Profile Nonos 运行 LPDS,它是一个 nonon 示例。 Sensor Profile 是一个 运行休眠模式的应用。
欢迎学习适用于 CC3220 无线 MCU 的 电源管理框架教程。 本教程的 目标是了解 CC3220 器件的 各种低功耗模式, 并使用户熟悉 电源管理框架。 在学习本教程之后, 您将能够了解 CC3220 MCU 支持的各种 低功耗模式, 在 TI 驱动程序内 使用电源管理框架, 使用 TI 驱动程序 配置外设,初始化 并启用电源 管理结构, 为低功耗模式 指定 I/O 设置, 最后调试功率 感知应用。 CC3220 器件支持 以下功耗模式 -- 睡眠模式 -- 该模式是 ARM Cortex-M4 处理器的 标准低功耗模式; 低功耗深度睡眠模式 -- 我在本教程中 将其称为 LPDS。 在该模式下,功能 时钟和外设时钟 会选通 -- 慢时钟继续 在后台运行。 最后,我们有休眠模式, 它是关闭应用和网络 处理器的 极低功耗 模式。 慢时钟也会继续 在该模式下运行。 该图显展示了 其中每种功耗 模式的特性以及 相对电流消耗 和唤醒时间。 右侧的箭头 有两种含义。 一种含义是电流 消耗在从睡眠 转换到休眠时 会减少,相反,另一种 含义是唤醒时间 在从睡眠转换到 休眠时会增加。 您可以看到 各种功耗模式 是如何影响 RAM、 CPU 和外设上下文 保留的以及可以 使用哪些唤醒源。 让我们更加详细 一点地讨论每种模式。 在睡眠模式下, 处理器时钟 停止,这会 中止代码执行。 外设 配置 将会保留,但它们的 时钟会选通, 这将导致在未启用 睡眠时钟的情况下, 所有正在进行的 外设事务都会停止。 在睡眠模式下, 还会保留 SRAM 和慢时钟 计数器的内容。 睡眠模式下的 唤醒时间非常短, 任何中断都 可能唤醒 MCU。 在这里要注意的是, 当 MCU 进入睡眠模式时, 调试器会断开。 与睡眠模式类似,低功耗 深度睡眠模式会在保留 慢时钟计数器的同时 选通处理器时钟。 与睡眠模式不同, 外设时钟也会 选通,从而 导致配置损失。 不过,可以完全 或部分保留 SRAM。 256 KB 的 SRAM 划分为四个块, 其中每个块为 64 KB。 可以将任何数量的 块保留在低功耗 深度睡眠模式,但无法 保留某个块的一部分。 这意味着在进入 LPDS 之前可以通过 软件在 RAM 中保留外设 配置,并且可以通过 在唤醒之后 从 RAM 中检索 来恢复它。 唤醒时间大约 为 3 毫秒, 此时会执行软件开销。 在 LPDS 下,并非每个 中断都可以唤醒 MCU。 只有一组指定的 可编程唤醒源 可用于该模式。 可用的 唤醒源为 -- 来自网络处理器、LPDS 唤醒计时器的中断 -- 可以在应用中指定 它的持续时间。 此外,可以将 GPIO 的某个子集 设置为外部唤醒源。 与睡眠模式类似, 调试器会在 MCU 进入 LPDS 时断开。 LPDS 仅影响 应用 MCU,而 不会影响网络处理器, 这在本质上意味着, 任何网络配置, 包括到 AP 的连接 以及所有互联网 套接字连接,都将 在进入和退出 LPDS 时保留。 通过正确地 设置引脚, 电流消耗可以 低至 1 毫安, 并且器件 保持与 AP 和互联网的连接。 该模式非常适合 应用在大多数 时间都保持 空闲,但仍 需要保持连接到 网络以便可以 在接收到来自 网络的信号时 立即执行某种操作的情形。 休眠与 LPDS 和睡眠不同, 会影响应用 和 NWP 处理器, 从而导致极低的 电流消耗。 它本质上 会关闭芯片, 仅保留 少数寄存器。 慢时钟计数器会在 该模式下保持活动状态。 网络配置 也会丢失。 来自慢时钟 计数器的中断 可能会将系统 从休眠模式唤醒。 此外,可以同时将一组 指定的 GPIO 设置为 唤醒源。 尽管在该情况下 电流消耗极低, 但它与 LPDS 相比具有 相对较长的唤醒时间。 该模式非常适合 器件在大多数 时间处于 非活动状态, 只须定期或基于 某种 GPIO 活动 执行某种操作的情况。 到目前为止,我们 已经讨论了低功耗 模式及其特性。 在接下来的幻灯片中, 我们将从软件的角度 讨论如何 在应用中 使用低功耗功能。 在本教程中, 电源管理框架 将被称为 PM 模块或 PM 框架, 它是 TI 驱动 程序库的 一部分,负责 运行各种 低功耗模式。 尽管它可以 单独使用,无需 运行该库中的 外设驱动程序, 但强烈建议还 针对外设使用 TI 驱动程序。 这是因为,所有驱动程序 都能够感知功率,并在 电源管理模块中 注册它们自身。 这可以简化 外设配置管理, 此时 MCU 循环 进入 LPDS。 TI 驱动程序是易于使用的 接口驱动程序集合,适用于 大多数外设。 对于适用于德州仪器 (TI) 的其他 MCU 的 TI 驱动程序而言, 接口是类似的。 它位于 driverlib 之上, driverlib 是一个低级 外设驱动程序库。 使用通用 RTOS API 可使 驱动程序重新进入, 这意味着它们可以与任何 RTOS 一起工作,甚至无需 RTOS 即可工作, 前提是 提供了移植层。 CC3220 SDK 为 TI RTOS、Free RTOS 和非 OS 环境 提供移植层。 这些驱动程序 能够感知功率, 并且支持 SDK 中的 以下工具链 -- Code Composer Studio, 它是德州仪器 (TI) 提供的免费 IDE,以及 IAR Embedded Workbench 和 GCC。 如前面所述, PM 框架 与 TI 驱动程序集成在一起。 每个器件驱动程序都会 在打开接口时在 PM 模块中 注册它们自身。 应用需要在一开始 初始化 PM 模块, 但可以在 运行时启用 或禁用它。 通常,一进入 LPDS, 外设时钟就会选通, 并且外设 配置将会丢失。 PM 模块负责 在退出 LPDS 之后 启用该时钟。 它还将外设 配置恢复到 进入 LPDS 之前的状态。 如果在进入 LPDS 之前 未正确设置引脚,则可能 会导致电流泄漏。 因此,有必要 正确设置引脚。 PM 模块负责 根据设置 结构来设置引脚, 设置结构是 在初始化 PM 模块时指定的。 尽管 PM 模块 负责管理 外设配置和 引脚设置, 但它仍允许针对 进入 LPDS、退出 LPDS 和进入休眠模式等 各种功耗事件注册 挂钩函数。 如果在 RTOS 环境中 工作,并且启用了 PM 框架,则电源 管理会检查所有 注册的驱动程序 以检查是否可以 将 MCU 置于 LPDS。 仅在确认当前没有 任何外设处于活动 状态之后,它才 允许应用 MCU 进入 LPDS。 此外,它还确保它具有 足够的时间来循环 进入 LPDS 周期。 因此,如果某个任务要再次 极短暂地处于活动状态, 将运行睡眠负载, 而不是 LPDS。 如果在非 OS 环境中工作, 则应用必须显式 调用电源管理函数, 在这之后,它将 执行类似的检查, 以确定应用 MCU 是否可以 进入 LPDS。 与 LPDS 不同, 需要由应用 执行函数调用,以便 将 SOC 置于休眠模式。 无论 PM 框架 是否启用, 一旦调用 其 API, 系统就会进入休眠模式。 器件保持在休眠 模式的持续时间 作为参数传递 到函数中。 如果持续时间 大于最低值, 器件将进入 休眠模式, 并且保持在 该模式,直到 计时器计时结束或 发生外部触发事件。 可以在 PM 配置 结构中指定 GPIO 唤醒源。 可以在休眠 期间保留 I/O, 也可以在 PM 配置 结构中指定 I/O。 在使用休眠模式时, 开发人员需要确保 以下几点 -- 在进入休眠模式之前 停止网络处理器, 在从休眠模式唤醒之后 禁用保留,指定为 第 1 组的 SFlash 引脚保留已经 由引导加载 程序禁用。 对于其他组, 必须由应用 禁用保留, 但仅在重新 配置引脚之后进行。 下面针对其中的 每个字段提供了 样例电源管理 结构和简短 说明。 可以在 PM 配置 结构中指定 LPDS 的引脚 设置结构。 应正确设置引脚 以实现较低的 电流消耗, 这一点极其重要。 以下是所有引脚可能 出现的设置状态。 样例设置结构 如下所示 -- 能够以组的形式将 I/O 保留在休眠模式, 不支持针对 I/O 进行单独保留。 这里显示的是四个 消耗大部分 I/O 的组。 再强调一次,应确保 在从休眠模式唤醒之后 禁用保留。 无论器件进入 哪种低功耗, 调试器都将断开。 可以在器件退出 LPDS 并保持在 活动模式后重新 连接调试器。 如果希望重新连接到 调试器,则有必要使用 将调试接口在 LPDS 保持 活动状态并且不设置 JTag 引脚的设置。 要在从 LPDS 唤醒之后 重新连接调试器, 应用需要确保 应用 MCU 不立即 再次进入 LPDS。 可以通过以下方法 来实现该目的 -- 禁用功耗策略和 LPDS 退出挂钩函数, 或放置用户 控制的 while 循环, 该循环可以在 重新从调制器 连接之后中断。 以下 SDK 示例中 使用了到目前为止 展示的 大部分设置。 Idle Profile -- 这会运行 LPDS, 它是基于 RTOS 的示例, 根据 CCS 和 IAR 使用 不同的 RTOS。 Idle Profile Nonos 运行 LPDS,它是一个 nonon 示例。 Sensor Profile 是一个 运行休眠模式的应用。
欢迎学习适用于 CC3220 无线 MCU 的
电源管理框架教程。
本教程的 目标是了解
CC3220 器件的 各种低功耗模式,
并使用户熟悉 电源管理框架。
在学习本教程之后, 您将能够了解 CC3220 MCU
支持的各种 低功耗模式,
在 TI 驱动程序内 使用电源管理框架,
使用 TI 驱动程序 配置外设,初始化
并启用电源 管理结构,
为低功耗模式 指定 I/O 设置,
最后调试功率 感知应用。
CC3220 器件支持 以下功耗模式 --
睡眠模式 -- 该模式是 ARM Cortex-M4 处理器的
标准低功耗模式; 低功耗深度睡眠模式 --
我在本教程中 将其称为 LPDS。
在该模式下,功能 时钟和外设时钟
会选通 --
慢时钟继续 在后台运行。
最后,我们有休眠模式, 它是关闭应用和网络
处理器的 极低功耗
模式。
慢时钟也会继续 在该模式下运行。
该图显展示了 其中每种功耗
模式的特性以及 相对电流消耗
和唤醒时间。
右侧的箭头 有两种含义。
一种含义是电流 消耗在从睡眠
转换到休眠时 会减少,相反,另一种
含义是唤醒时间 在从睡眠转换到
休眠时会增加。
您可以看到 各种功耗模式
是如何影响 RAM、 CPU 和外设上下文
保留的以及可以 使用哪些唤醒源。
让我们更加详细 一点地讨论每种模式。
在睡眠模式下, 处理器时钟
停止,这会 中止代码执行。
外设 配置
将会保留,但它们的 时钟会选通,
这将导致在未启用 睡眠时钟的情况下,
所有正在进行的 外设事务都会停止。
在睡眠模式下, 还会保留 SRAM
和慢时钟 计数器的内容。
睡眠模式下的 唤醒时间非常短,
任何中断都 可能唤醒 MCU。
在这里要注意的是, 当 MCU 进入睡眠模式时,
调试器会断开。
与睡眠模式类似,低功耗 深度睡眠模式会在保留
慢时钟计数器的同时 选通处理器时钟。
与睡眠模式不同, 外设时钟也会
选通,从而 导致配置损失。
不过,可以完全 或部分保留
SRAM。
256 KB 的 SRAM 划分为四个块,
其中每个块为 64 KB。
可以将任何数量的 块保留在低功耗
深度睡眠模式,但无法 保留某个块的一部分。
这意味着在进入 LPDS 之前可以通过
软件在 RAM 中保留外设 配置,并且可以通过
在唤醒之后 从 RAM 中检索
来恢复它。
唤醒时间大约 为 3 毫秒,
此时会执行软件开销。
在 LPDS 下,并非每个 中断都可以唤醒 MCU。
只有一组指定的 可编程唤醒源
可用于该模式。
可用的 唤醒源为 --
来自网络处理器、LPDS 唤醒计时器的中断 --
可以在应用中指定 它的持续时间。
此外,可以将 GPIO 的某个子集
设置为外部唤醒源。
与睡眠模式类似, 调试器会在 MCU
进入 LPDS 时断开。
LPDS 仅影响 应用 MCU,而
不会影响网络处理器, 这在本质上意味着,
任何网络配置, 包括到 AP 的连接
以及所有互联网 套接字连接,都将
在进入和退出 LPDS 时保留。
通过正确地 设置引脚,
电流消耗可以 低至 1 毫安,
并且器件 保持与 AP
和互联网的连接。
该模式非常适合 应用在大多数
时间都保持 空闲,但仍
需要保持连接到 网络以便可以
在接收到来自 网络的信号时
立即执行某种操作的情形。
休眠与 LPDS 和睡眠不同,
会影响应用 和 NWP 处理器,
从而导致极低的 电流消耗。
它本质上 会关闭芯片,
仅保留 少数寄存器。
慢时钟计数器会在 该模式下保持活动状态。
网络配置 也会丢失。
来自慢时钟 计数器的中断
可能会将系统 从休眠模式唤醒。
此外,可以同时将一组 指定的 GPIO 设置为
唤醒源。
尽管在该情况下 电流消耗极低,
但它与 LPDS 相比具有 相对较长的唤醒时间。
该模式非常适合 器件在大多数
时间处于 非活动状态,
只须定期或基于 某种 GPIO 活动
执行某种操作的情况。
到目前为止,我们 已经讨论了低功耗
模式及其特性。
在接下来的幻灯片中, 我们将从软件的角度
讨论如何 在应用中
使用低功耗功能。
在本教程中, 电源管理框架
将被称为 PM 模块或 PM 框架,
它是 TI 驱动 程序库的
一部分,负责 运行各种
低功耗模式。
尽管它可以 单独使用,无需
运行该库中的 外设驱动程序,
但强烈建议还 针对外设使用
TI 驱动程序。
这是因为,所有驱动程序 都能够感知功率,并在
电源管理模块中 注册它们自身。
这可以简化 外设配置管理,
此时 MCU 循环 进入 LPDS。
TI 驱动程序是易于使用的 接口驱动程序集合,适用于
大多数外设。
对于适用于德州仪器 (TI) 的其他 MCU 的 TI 驱动程序而言,
接口是类似的。
它位于 driverlib 之上, driverlib 是一个低级
外设驱动程序库。
使用通用 RTOS API 可使 驱动程序重新进入,
这意味着它们可以与任何 RTOS 一起工作,甚至无需 RTOS 即可工作,
前提是 提供了移植层。
CC3220 SDK 为 TI RTOS、Free RTOS
和非 OS 环境 提供移植层。
这些驱动程序 能够感知功率,
并且支持 SDK 中的 以下工具链 --
Code Composer Studio, 它是德州仪器 (TI)
提供的免费 IDE,以及 IAR Embedded Workbench 和 GCC。
如前面所述, PM 框架
与 TI 驱动程序集成在一起。
每个器件驱动程序都会 在打开接口时在 PM 模块中
注册它们自身。
应用需要在一开始 初始化 PM 模块,
但可以在 运行时启用
或禁用它。
通常,一进入 LPDS, 外设时钟就会选通,
并且外设 配置将会丢失。
PM 模块负责 在退出 LPDS 之后
启用该时钟。
它还将外设 配置恢复到
进入 LPDS 之前的状态。
如果在进入 LPDS 之前 未正确设置引脚,则可能
会导致电流泄漏。
因此,有必要 正确设置引脚。
PM 模块负责 根据设置
结构来设置引脚, 设置结构是
在初始化 PM 模块时指定的。
尽管 PM 模块 负责管理
外设配置和 引脚设置,
但它仍允许针对 进入 LPDS、退出 LPDS
和进入休眠模式等 各种功耗事件注册
挂钩函数。
如果在 RTOS 环境中 工作,并且启用了
PM 框架,则电源 管理会检查所有
注册的驱动程序 以检查是否可以
将 MCU 置于 LPDS。
仅在确认当前没有 任何外设处于活动
状态之后,它才 允许应用 MCU
进入 LPDS。
此外,它还确保它具有 足够的时间来循环
进入 LPDS 周期。
因此,如果某个任务要再次 极短暂地处于活动状态,
将运行睡眠负载, 而不是 LPDS。
如果在非 OS 环境中工作,
则应用必须显式 调用电源管理函数,
在这之后,它将 执行类似的检查,
以确定应用 MCU 是否可以
进入 LPDS。
与 LPDS 不同, 需要由应用
执行函数调用,以便 将 SOC 置于休眠模式。
无论 PM 框架 是否启用,
一旦调用 其 API,
系统就会进入休眠模式。
器件保持在休眠 模式的持续时间
作为参数传递 到函数中。
如果持续时间 大于最低值,
器件将进入 休眠模式,
并且保持在 该模式,直到
计时器计时结束或 发生外部触发事件。
可以在 PM 配置 结构中指定
GPIO 唤醒源。
可以在休眠 期间保留 I/O,
也可以在 PM 配置 结构中指定 I/O。
在使用休眠模式时, 开发人员需要确保
以下几点 --
在进入休眠模式之前 停止网络处理器,
在从休眠模式唤醒之后 禁用保留,指定为
第 1 组的 SFlash 引脚保留已经
由引导加载 程序禁用。
对于其他组, 必须由应用
禁用保留, 但仅在重新
配置引脚之后进行。
下面针对其中的 每个字段提供了
样例电源管理 结构和简短
说明。
可以在 PM 配置 结构中指定
LPDS 的引脚 设置结构。
应正确设置引脚 以实现较低的
电流消耗, 这一点极其重要。
以下是所有引脚可能 出现的设置状态。
样例设置结构 如下所示 --
能够以组的形式将 I/O 保留在休眠模式,
不支持针对 I/O 进行单独保留。
这里显示的是四个 消耗大部分 I/O 的组。
再强调一次,应确保 在从休眠模式唤醒之后
禁用保留。
无论器件进入 哪种低功耗,
调试器都将断开。
可以在器件退出 LPDS 并保持在
活动模式后重新 连接调试器。
如果希望重新连接到 调试器,则有必要使用
将调试接口在 LPDS 保持 活动状态并且不设置
JTag 引脚的设置。
要在从 LPDS 唤醒之后 重新连接调试器,
应用需要确保 应用 MCU 不立即
再次进入 LPDS。
可以通过以下方法 来实现该目的 --
禁用功耗策略和 LPDS 退出挂钩函数,
或放置用户 控制的 while 循环,
该循环可以在 重新从调制器
连接之后中断。
以下 SDK 示例中 使用了到目前为止
展示的 大部分设置。
Idle Profile -- 这会运行 LPDS,
它是基于 RTOS 的示例, 根据 CCS 和 IAR 使用
不同的 RTOS。
Idle Profile Nonos 运行 LPDS,它是一个 nonon 示例。
Sensor Profile 是一个 运行休眠模式的应用。
欢迎学习适用于 CC3220 无线 MCU 的 电源管理框架教程。 本教程的 目标是了解 CC3220 器件的 各种低功耗模式, 并使用户熟悉 电源管理框架。 在学习本教程之后, 您将能够了解 CC3220 MCU 支持的各种 低功耗模式, 在 TI 驱动程序内 使用电源管理框架, 使用 TI 驱动程序 配置外设,初始化 并启用电源 管理结构, 为低功耗模式 指定 I/O 设置, 最后调试功率 感知应用。 CC3220 器件支持 以下功耗模式 -- 睡眠模式 -- 该模式是 ARM Cortex-M4 处理器的 标准低功耗模式; 低功耗深度睡眠模式 -- 我在本教程中 将其称为 LPDS。 在该模式下,功能 时钟和外设时钟 会选通 -- 慢时钟继续 在后台运行。 最后,我们有休眠模式, 它是关闭应用和网络 处理器的 极低功耗 模式。 慢时钟也会继续 在该模式下运行。 该图显展示了 其中每种功耗 模式的特性以及 相对电流消耗 和唤醒时间。 右侧的箭头 有两种含义。 一种含义是电流 消耗在从睡眠 转换到休眠时 会减少,相反,另一种 含义是唤醒时间 在从睡眠转换到 休眠时会增加。 您可以看到 各种功耗模式 是如何影响 RAM、 CPU 和外设上下文 保留的以及可以 使用哪些唤醒源。 让我们更加详细 一点地讨论每种模式。 在睡眠模式下, 处理器时钟 停止,这会 中止代码执行。 外设 配置 将会保留,但它们的 时钟会选通, 这将导致在未启用 睡眠时钟的情况下, 所有正在进行的 外设事务都会停止。 在睡眠模式下, 还会保留 SRAM 和慢时钟 计数器的内容。 睡眠模式下的 唤醒时间非常短, 任何中断都 可能唤醒 MCU。 在这里要注意的是, 当 MCU 进入睡眠模式时, 调试器会断开。 与睡眠模式类似,低功耗 深度睡眠模式会在保留 慢时钟计数器的同时 选通处理器时钟。 与睡眠模式不同, 外设时钟也会 选通,从而 导致配置损失。 不过,可以完全 或部分保留 SRAM。 256 KB 的 SRAM 划分为四个块, 其中每个块为 64 KB。 可以将任何数量的 块保留在低功耗 深度睡眠模式,但无法 保留某个块的一部分。 这意味着在进入 LPDS 之前可以通过 软件在 RAM 中保留外设 配置,并且可以通过 在唤醒之后 从 RAM 中检索 来恢复它。 唤醒时间大约 为 3 毫秒, 此时会执行软件开销。 在 LPDS 下,并非每个 中断都可以唤醒 MCU。 只有一组指定的 可编程唤醒源 可用于该模式。 可用的 唤醒源为 -- 来自网络处理器、LPDS 唤醒计时器的中断 -- 可以在应用中指定 它的持续时间。 此外,可以将 GPIO 的某个子集 设置为外部唤醒源。 与睡眠模式类似, 调试器会在 MCU 进入 LPDS 时断开。 LPDS 仅影响 应用 MCU,而 不会影响网络处理器, 这在本质上意味着, 任何网络配置, 包括到 AP 的连接 以及所有互联网 套接字连接,都将 在进入和退出 LPDS 时保留。 通过正确地 设置引脚, 电流消耗可以 低至 1 毫安, 并且器件 保持与 AP 和互联网的连接。 该模式非常适合 应用在大多数 时间都保持 空闲,但仍 需要保持连接到 网络以便可以 在接收到来自 网络的信号时 立即执行某种操作的情形。 休眠与 LPDS 和睡眠不同, 会影响应用 和 NWP 处理器, 从而导致极低的 电流消耗。 它本质上 会关闭芯片, 仅保留 少数寄存器。 慢时钟计数器会在 该模式下保持活动状态。 网络配置 也会丢失。 来自慢时钟 计数器的中断 可能会将系统 从休眠模式唤醒。 此外,可以同时将一组 指定的 GPIO 设置为 唤醒源。 尽管在该情况下 电流消耗极低, 但它与 LPDS 相比具有 相对较长的唤醒时间。 该模式非常适合 器件在大多数 时间处于 非活动状态, 只须定期或基于 某种 GPIO 活动 执行某种操作的情况。 到目前为止,我们 已经讨论了低功耗 模式及其特性。 在接下来的幻灯片中, 我们将从软件的角度 讨论如何 在应用中 使用低功耗功能。 在本教程中, 电源管理框架 将被称为 PM 模块或 PM 框架, 它是 TI 驱动 程序库的 一部分,负责 运行各种 低功耗模式。 尽管它可以 单独使用,无需 运行该库中的 外设驱动程序, 但强烈建议还 针对外设使用 TI 驱动程序。 这是因为,所有驱动程序 都能够感知功率,并在 电源管理模块中 注册它们自身。 这可以简化 外设配置管理, 此时 MCU 循环 进入 LPDS。 TI 驱动程序是易于使用的 接口驱动程序集合,适用于 大多数外设。 对于适用于德州仪器 (TI) 的其他 MCU 的 TI 驱动程序而言, 接口是类似的。 它位于 driverlib 之上, driverlib 是一个低级 外设驱动程序库。 使用通用 RTOS API 可使 驱动程序重新进入, 这意味着它们可以与任何 RTOS 一起工作,甚至无需 RTOS 即可工作, 前提是 提供了移植层。 CC3220 SDK 为 TI RTOS、Free RTOS 和非 OS 环境 提供移植层。 这些驱动程序 能够感知功率, 并且支持 SDK 中的 以下工具链 -- Code Composer Studio, 它是德州仪器 (TI) 提供的免费 IDE,以及 IAR Embedded Workbench 和 GCC。 如前面所述, PM 框架 与 TI 驱动程序集成在一起。 每个器件驱动程序都会 在打开接口时在 PM 模块中 注册它们自身。 应用需要在一开始 初始化 PM 模块, 但可以在 运行时启用 或禁用它。 通常,一进入 LPDS, 外设时钟就会选通, 并且外设 配置将会丢失。 PM 模块负责 在退出 LPDS 之后 启用该时钟。 它还将外设 配置恢复到 进入 LPDS 之前的状态。 如果在进入 LPDS 之前 未正确设置引脚,则可能 会导致电流泄漏。 因此,有必要 正确设置引脚。 PM 模块负责 根据设置 结构来设置引脚, 设置结构是 在初始化 PM 模块时指定的。 尽管 PM 模块 负责管理 外设配置和 引脚设置, 但它仍允许针对 进入 LPDS、退出 LPDS 和进入休眠模式等 各种功耗事件注册 挂钩函数。 如果在 RTOS 环境中 工作,并且启用了 PM 框架,则电源 管理会检查所有 注册的驱动程序 以检查是否可以 将 MCU 置于 LPDS。 仅在确认当前没有 任何外设处于活动 状态之后,它才 允许应用 MCU 进入 LPDS。 此外,它还确保它具有 足够的时间来循环 进入 LPDS 周期。 因此,如果某个任务要再次 极短暂地处于活动状态, 将运行睡眠负载, 而不是 LPDS。 如果在非 OS 环境中工作, 则应用必须显式 调用电源管理函数, 在这之后,它将 执行类似的检查, 以确定应用 MCU 是否可以 进入 LPDS。 与 LPDS 不同, 需要由应用 执行函数调用,以便 将 SOC 置于休眠模式。 无论 PM 框架 是否启用, 一旦调用 其 API, 系统就会进入休眠模式。 器件保持在休眠 模式的持续时间 作为参数传递 到函数中。 如果持续时间 大于最低值, 器件将进入 休眠模式, 并且保持在 该模式,直到 计时器计时结束或 发生外部触发事件。 可以在 PM 配置 结构中指定 GPIO 唤醒源。 可以在休眠 期间保留 I/O, 也可以在 PM 配置 结构中指定 I/O。 在使用休眠模式时, 开发人员需要确保 以下几点 -- 在进入休眠模式之前 停止网络处理器, 在从休眠模式唤醒之后 禁用保留,指定为 第 1 组的 SFlash 引脚保留已经 由引导加载 程序禁用。 对于其他组, 必须由应用 禁用保留, 但仅在重新 配置引脚之后进行。 下面针对其中的 每个字段提供了 样例电源管理 结构和简短 说明。 可以在 PM 配置 结构中指定 LPDS 的引脚 设置结构。 应正确设置引脚 以实现较低的 电流消耗, 这一点极其重要。 以下是所有引脚可能 出现的设置状态。 样例设置结构 如下所示 -- 能够以组的形式将 I/O 保留在休眠模式, 不支持针对 I/O 进行单独保留。 这里显示的是四个 消耗大部分 I/O 的组。 再强调一次,应确保 在从休眠模式唤醒之后 禁用保留。 无论器件进入 哪种低功耗, 调试器都将断开。 可以在器件退出 LPDS 并保持在 活动模式后重新 连接调试器。 如果希望重新连接到 调试器,则有必要使用 将调试接口在 LPDS 保持 活动状态并且不设置 JTag 引脚的设置。 要在从 LPDS 唤醒之后 重新连接调试器, 应用需要确保 应用 MCU 不立即 再次进入 LPDS。 可以通过以下方法 来实现该目的 -- 禁用功耗策略和 LPDS 退出挂钩函数, 或放置用户 控制的 while 循环, 该循环可以在 重新从调制器 连接之后中断。 以下 SDK 示例中 使用了到目前为止 展示的 大部分设置。 Idle Profile -- 这会运行 LPDS, 它是基于 RTOS 的示例, 根据 CCS 和 IAR 使用 不同的 RTOS。 Idle Profile Nonos 运行 LPDS,它是一个 nonon 示例。 Sensor Profile 是一个 运行休眠模式的应用。
欢迎学习适用于 CC3220 无线 MCU 的
电源管理框架教程。
本教程的 目标是了解
CC3220 器件的 各种低功耗模式,
并使用户熟悉 电源管理框架。
在学习本教程之后, 您将能够了解 CC3220 MCU
支持的各种 低功耗模式,
在 TI 驱动程序内 使用电源管理框架,
使用 TI 驱动程序 配置外设,初始化
并启用电源 管理结构,
为低功耗模式 指定 I/O 设置,
最后调试功率 感知应用。
CC3220 器件支持 以下功耗模式 --
睡眠模式 -- 该模式是 ARM Cortex-M4 处理器的
标准低功耗模式; 低功耗深度睡眠模式 --
我在本教程中 将其称为 LPDS。
在该模式下,功能 时钟和外设时钟
会选通 --
慢时钟继续 在后台运行。
最后,我们有休眠模式, 它是关闭应用和网络
处理器的 极低功耗
模式。
慢时钟也会继续 在该模式下运行。
该图显展示了 其中每种功耗
模式的特性以及 相对电流消耗
和唤醒时间。
右侧的箭头 有两种含义。
一种含义是电流 消耗在从睡眠
转换到休眠时 会减少,相反,另一种
含义是唤醒时间 在从睡眠转换到
休眠时会增加。
您可以看到 各种功耗模式
是如何影响 RAM、 CPU 和外设上下文
保留的以及可以 使用哪些唤醒源。
让我们更加详细 一点地讨论每种模式。
在睡眠模式下, 处理器时钟
停止,这会 中止代码执行。
外设 配置
将会保留,但它们的 时钟会选通,
这将导致在未启用 睡眠时钟的情况下,
所有正在进行的 外设事务都会停止。
在睡眠模式下, 还会保留 SRAM
和慢时钟 计数器的内容。
睡眠模式下的 唤醒时间非常短,
任何中断都 可能唤醒 MCU。
在这里要注意的是, 当 MCU 进入睡眠模式时,
调试器会断开。
与睡眠模式类似,低功耗 深度睡眠模式会在保留
慢时钟计数器的同时 选通处理器时钟。
与睡眠模式不同, 外设时钟也会
选通,从而 导致配置损失。
不过,可以完全 或部分保留
SRAM。
256 KB 的 SRAM 划分为四个块,
其中每个块为 64 KB。
可以将任何数量的 块保留在低功耗
深度睡眠模式,但无法 保留某个块的一部分。
这意味着在进入 LPDS 之前可以通过
软件在 RAM 中保留外设 配置,并且可以通过
在唤醒之后 从 RAM 中检索
来恢复它。
唤醒时间大约 为 3 毫秒,
此时会执行软件开销。
在 LPDS 下,并非每个 中断都可以唤醒 MCU。
只有一组指定的 可编程唤醒源
可用于该模式。
可用的 唤醒源为 --
来自网络处理器、LPDS 唤醒计时器的中断 --
可以在应用中指定 它的持续时间。
此外,可以将 GPIO 的某个子集
设置为外部唤醒源。
与睡眠模式类似, 调试器会在 MCU
进入 LPDS 时断开。
LPDS 仅影响 应用 MCU,而
不会影响网络处理器, 这在本质上意味着,
任何网络配置, 包括到 AP 的连接
以及所有互联网 套接字连接,都将
在进入和退出 LPDS 时保留。
通过正确地 设置引脚,
电流消耗可以 低至 1 毫安,
并且器件 保持与 AP
和互联网的连接。
该模式非常适合 应用在大多数
时间都保持 空闲,但仍
需要保持连接到 网络以便可以
在接收到来自 网络的信号时
立即执行某种操作的情形。
休眠与 LPDS 和睡眠不同,
会影响应用 和 NWP 处理器,
从而导致极低的 电流消耗。
它本质上 会关闭芯片,
仅保留 少数寄存器。
慢时钟计数器会在 该模式下保持活动状态。
网络配置 也会丢失。
来自慢时钟 计数器的中断
可能会将系统 从休眠模式唤醒。
此外,可以同时将一组 指定的 GPIO 设置为
唤醒源。
尽管在该情况下 电流消耗极低,
但它与 LPDS 相比具有 相对较长的唤醒时间。
该模式非常适合 器件在大多数
时间处于 非活动状态,
只须定期或基于 某种 GPIO 活动
执行某种操作的情况。
到目前为止,我们 已经讨论了低功耗
模式及其特性。
在接下来的幻灯片中, 我们将从软件的角度
讨论如何 在应用中
使用低功耗功能。
在本教程中, 电源管理框架
将被称为 PM 模块或 PM 框架,
它是 TI 驱动 程序库的
一部分,负责 运行各种
低功耗模式。
尽管它可以 单独使用,无需
运行该库中的 外设驱动程序,
但强烈建议还 针对外设使用
TI 驱动程序。
这是因为,所有驱动程序 都能够感知功率,并在
电源管理模块中 注册它们自身。
这可以简化 外设配置管理,
此时 MCU 循环 进入 LPDS。
TI 驱动程序是易于使用的 接口驱动程序集合,适用于
大多数外设。
对于适用于德州仪器 (TI) 的其他 MCU 的 TI 驱动程序而言,
接口是类似的。
它位于 driverlib 之上, driverlib 是一个低级
外设驱动程序库。
使用通用 RTOS API 可使 驱动程序重新进入,
这意味着它们可以与任何 RTOS 一起工作,甚至无需 RTOS 即可工作,
前提是 提供了移植层。
CC3220 SDK 为 TI RTOS、Free RTOS
和非 OS 环境 提供移植层。
这些驱动程序 能够感知功率,
并且支持 SDK 中的 以下工具链 --
Code Composer Studio, 它是德州仪器 (TI)
提供的免费 IDE,以及 IAR Embedded Workbench 和 GCC。
如前面所述, PM 框架
与 TI 驱动程序集成在一起。
每个器件驱动程序都会 在打开接口时在 PM 模块中
注册它们自身。
应用需要在一开始 初始化 PM 模块,
但可以在 运行时启用
或禁用它。
通常,一进入 LPDS, 外设时钟就会选通,
并且外设 配置将会丢失。
PM 模块负责 在退出 LPDS 之后
启用该时钟。
它还将外设 配置恢复到
进入 LPDS 之前的状态。
如果在进入 LPDS 之前 未正确设置引脚,则可能
会导致电流泄漏。
因此,有必要 正确设置引脚。
PM 模块负责 根据设置
结构来设置引脚, 设置结构是
在初始化 PM 模块时指定的。
尽管 PM 模块 负责管理
外设配置和 引脚设置,
但它仍允许针对 进入 LPDS、退出 LPDS
和进入休眠模式等 各种功耗事件注册
挂钩函数。
如果在 RTOS 环境中 工作,并且启用了
PM 框架,则电源 管理会检查所有
注册的驱动程序 以检查是否可以
将 MCU 置于 LPDS。
仅在确认当前没有 任何外设处于活动
状态之后,它才 允许应用 MCU
进入 LPDS。
此外,它还确保它具有 足够的时间来循环
进入 LPDS 周期。
因此,如果某个任务要再次 极短暂地处于活动状态,
将运行睡眠负载, 而不是 LPDS。
如果在非 OS 环境中工作,
则应用必须显式 调用电源管理函数,
在这之后,它将 执行类似的检查,
以确定应用 MCU 是否可以
进入 LPDS。
与 LPDS 不同, 需要由应用
执行函数调用,以便 将 SOC 置于休眠模式。
无论 PM 框架 是否启用,
一旦调用 其 API,
系统就会进入休眠模式。
器件保持在休眠 模式的持续时间
作为参数传递 到函数中。
如果持续时间 大于最低值,
器件将进入 休眠模式,
并且保持在 该模式,直到
计时器计时结束或 发生外部触发事件。
可以在 PM 配置 结构中指定
GPIO 唤醒源。
可以在休眠 期间保留 I/O,
也可以在 PM 配置 结构中指定 I/O。
在使用休眠模式时, 开发人员需要确保
以下几点 --
在进入休眠模式之前 停止网络处理器,
在从休眠模式唤醒之后 禁用保留,指定为
第 1 组的 SFlash 引脚保留已经
由引导加载 程序禁用。
对于其他组, 必须由应用
禁用保留, 但仅在重新
配置引脚之后进行。
下面针对其中的 每个字段提供了
样例电源管理 结构和简短
说明。
可以在 PM 配置 结构中指定
LPDS 的引脚 设置结构。
应正确设置引脚 以实现较低的
电流消耗, 这一点极其重要。
以下是所有引脚可能 出现的设置状态。
样例设置结构 如下所示 --
能够以组的形式将 I/O 保留在休眠模式,
不支持针对 I/O 进行单独保留。
这里显示的是四个 消耗大部分 I/O 的组。
再强调一次,应确保 在从休眠模式唤醒之后
禁用保留。
无论器件进入 哪种低功耗,
调试器都将断开。
可以在器件退出 LPDS 并保持在
活动模式后重新 连接调试器。
如果希望重新连接到 调试器,则有必要使用
将调试接口在 LPDS 保持 活动状态并且不设置
JTag 引脚的设置。
要在从 LPDS 唤醒之后 重新连接调试器,
应用需要确保 应用 MCU 不立即
再次进入 LPDS。
可以通过以下方法 来实现该目的 --
禁用功耗策略和 LPDS 退出挂钩函数,
或放置用户 控制的 while 循环,
该循环可以在 重新从调制器
连接之后中断。
以下 SDK 示例中 使用了到目前为止
展示的 大部分设置。
Idle Profile -- 这会运行 LPDS,
它是基于 RTOS 的示例, 根据 CCS 和 IAR 使用
不同的 RTOS。
Idle Profile Nonos 运行 LPDS,它是一个 nonon 示例。
Sensor Profile 是一个 运行休眠模式的应用。
视频报错
手机看
扫码用手机观看
收藏本课程
-
未学习 SimpleLink WiFi CC32xx电源管理框架介绍
00:12:41
播放中
视频简介
SimpleLink WiFi CC32xx电源管理框架介绍
所属课程:SimpleLink WiFi CC32xx电源管理框架介绍
发布时间:2017.08.16
视频集数:1
本节视频时长:00:12:41
CC3220无线MCU具有三种电源模式:睡眠,低功耗深度睡眠和休眠模式。 这些功能可以实现SimpleLink Wi-Fi的超低功耗。 看本视频了解更多!
//=$v1;?>
//=$v['id']?>//=$v['down_category']?>//=$v['link']?>//=$v['is_dl']?>//=$v['link']?>//=$v['name']?>//=$v['name']?>
//=$v['id']?>//=$v['down_category']?>//=$v['path']?>//=$v['is_dl']?>//=$v['path']?>//=$v['name']?>//=$v['name']?>
////=count($lesson['bbsinfo'])?>
//=$elink?>//=$elink?>//=$tags[0]?>//=$tags[0]?>//=$elink?>//= $elink?>//=$tags[1]?>//=$tags[1]?>
//=$lesson['bbs'];?>
//=count($lesson['bbsinfo'])?>