开始使用UCD3138数字电源控制器工具
Loading the player...
将在30s后自动为您播放下一课程
在此演示中, 我将概述一下在开始 UCD3138 系列 电源控制器 上进行开发时 所需的 工具和硬件。 要对 UCD3138 系列上 基于闪存的存储器编程, 我们需要安装两个 TI 专属工具。 TI 可免费提供 这两款工具。 第一款工具称作 Code Composer Studio。 这是集成 开发环境, 其中 C - 源代码 - 可编辑、编译、汇编 以及链接。 第二款工具称作 UCD 器件 GUI。 此工具直接 与 UCD 器件 通信并配置 其基于闪存的 程序存储器。 它将 Code Composer Studio 的输出作为输入。 UCD 的基于 闪存的程序存储器 是通过 PMBus 接口 配置的。 PMBus 是电源管理 总线的简称。 我们在后续阶段将更为 详细地讨论该标准。 必须具有 USB 至 PMBus 硬件适配器, 以便 UCD 器件 GUI 可以与 UCD 器件通信。 请注意,UCD 31xx 系列上的 闪存还支持 通过各类 其他接口编程, 例如 SPI、I2C、 UART 以及 JTAG。 为简洁起见,我们 在这些教程中 将仅着重于 PMBus。 我现在介绍一下 Code Composer Studio 这款工具。 这是基于 Eclipse 的 集成开发 环境。 它支持所有 德州仪器 (TI) 微控制器 和嵌入式 处理器产品组合。 它包含 C 和 C++ 编译器、汇编器 以及连接器,即一款完全 集成的 CodeWright 编辑器, 以及具有多项目支持的 集成可视化工程 管理器。 我们很快将讨论 Code Composer Studio 的安装, 并且我们将向您展示 如何开始使用该工具。 有关更多信息,请导航至 www.ti.com/ccs。 我们强烈建议安装 CCS 6.1 版或更高版本, 以获得最新 支持和功能。 我们将使用的第二款 工具称作 UCD 器件 GUI。 它包含功能 更全面的 数字电源 设计器的功能子集, 并且可为工具集的 一部分使用。 它主要用于 将程序下载 至 UCD 上基于闪存的存储器, 控制程序执行, 并使用 PMBus 命令 访问和修改存储器的内容。 在此演示中, 稍后将展示 安装演示。 有关更多信息, 请导航至所示链接。 现在,简单概述从 C 源文件 到编程 UCD 器件的 代码开 发流程。 在 Code Composer Studio 中,程序会将 C 或 C++ 源文件 传入并经过 C 编译器 以进行解析和优化。 该过程的输出是 一组汇编源文件。 然后,程序会将这些 汇编源文件 传入并经过汇编器 以创建一个目标文件集。 然后,程序将该目标文件集 传入并经过连接器, 以创建可执行的 . out 文件。 然后,程序将该输出文件传入并经过 ARMHEX 工具, 以创建 UCD 器件 GUI 可读取的 .x0 文件。 该系列步骤 可能显得比较复杂, 但在 Code Composer Studio 内 构建 C 或 C++ 空间项目时, 整个流程 会自动执行。 因此,该过程 将全部对用户隐藏。 德州仪器 (TI) 提供 具有相应设置的 示例项目, 从而您能够 快速开始开发。 在通过 USB 至 PMBus 硬件 适配器 对 UCD 器件编程时, UCD 器件 GUI 会读取 CCS 构建过程的输出, 即 Tektronix .x0 文件。 要完成这些实验, 还需要某些硬件。 需要一块 开环测试板。 TI提供了三块 测试版,且它们 根据您使用的 UCD 器件和引脚计数 而不同。 从 TI 网站或 大多数分销商处 可直接订购这些板。 德州仪器 TI.com.cn 还提供 文档和示意图。 还需要一个 USB 至 GPIO 适配器 以使用 GUI 经由 PMBus 接口 与 UCD 器件通信。 有关订购信息, 请访问所示链接。 此外,还值得下载 三本主要的程序员 手册 - 监控与 通信程序员手册、 数字电源外设 程序员手册, 以及 ARM 和数字 系统程序员手册。 您可能还希望下载 有关衍生器件的 程序员手册。 现在,我将展示如何 下载和安装 Code Composer Studio。 TI 免费提供这款称作 Code Composer Studio 工具,您将用其 编写 C 源代码 - 这些代码将被编译、 汇编并最终下载至 您的目标 UCD 器件。 要获得该工具, 请在 Internet 浏览器中导航至 www.ti.com/ccs。 向下滚动并单击 下载按钮 以下载最新版 Windows 或 Linux。 如果您还未建立 myTI 帐户, 请建立帐户。 如果您有 myTI 帐户,请使用您的 登录信息登录。 按照安装 说明操作。 您将收到含有 CCS 软件下载 链接的电子邮件。 继续按照安装 说明操作。 当程序提示您选择产品系列时, 确保选择“UCD Digital Power Controllers” (UCS 数字电源控制器)。 选择要安装的 调试探针, 例如 JTAG 调试探针 和开发板的驱动程序, 然后单击“Finish”(完成)。 现在,我将展示如何 下载和安装 UCD 器件 GUI。 在 Internet 浏览器中,访问 www.ti.com/tool/fusion digital power designer。 选择下载最新版本, 然后按照 安装说明操作。 当程序提示您安装其他 工具时,确保安装 UCD 3xxx UCD 9xxx 器件 GUI。 单击“Finish”(完成)。 我现将展示如何 开始使用 Code Composer Studio。 此处是编辑视图下的 Code Composer Studio。 该视图分为四个主要部分 - Project “Project Explorer”(项目浏览器) 区域 - 用于管理构成工作区的每个项目 -- “Source Editor” (源编辑器)-- 提供 编辑器空间 并可按您的 喜好配置-- “Console Window”(控制台窗口)-- 针对自构建过程输出的原始消息 -- 以及“Problems Window” (问题窗口)-- 提供 构建过程发出的 所有错误、警告以及其他提示的 结构化展示。 现在,对于构建过程, 我们将首先将 实验练习一导入 CCS。 选择“Project”(项目)。 导入 CCS 项目。 浏览至含有 实验练习一 源代码的目录。 单击“Finish”(完成)。 您现在应在“Project Explorer” (项目浏览器)窗格中查看实验练习一 项目。 展开项目以 查看源文件。 下一步是 构建项目。 构建项目可 通过许多方式完成。 构建前, 让我们看一下 项目配置, 项目配置是 有关构建的设置。 右键单击项目 并选择“Properties”(属性)。 创建源代码 一直是为了处理 UCD 器件的 任何版本。 要选择将构建的 目标 UCD 器件, 单击“Manage Configurations”(管理配置)。 要使特定 器件活跃, 在状态列中 选择“Set Active”(设为有效)。 例如,如果您要 使 UCD3138128 游戏, 左键单击,然后单击 “Set Active”(设为有效)。 在本演示中,我们要 构建将会 下载至 UCD3138 的项目,所以将 UCD3138 设为 有效配置。 单击“OK”(确定)退出 “Properties”(属性)窗口。 要构建项目,右键单击“Project Explorer” (项目浏览器)区域中的项目, 然后选择 “Build Project”(构建项目)。 此操作将为 UCD3138 构建项目, 因为我们已将其 设为活动配置。 或者, 选择工具栏中 锤形图标旁的 向下箭头, 以构建四个 UCD 器件 中的任一个器件。 此处是展示原始 构建输出的控制台窗口。 这主要是 与项目中每个 文件的编译有关的 编译器消息。 在控制台底部, 注意 连接器消息, 以及 ARMHEX 消息, 指示 COFF 输出 文件转化为 Tektronix HEX 输出文件已完成。 如果存在构建 错误或警告, 这些也可以 通过单击控制台 窗口上方的 向上箭头键和 向下箭头键快速导航。 在 CCS 中构建 项目有意义的 唯一前提是 构建过程的输出 可在 UCD3138xxx 器件 自身中使用。 要查找将载入 器件 GUI 的输出文件, 浏览至含有 C 源文件的目录。 当为某个项目 设置配置后, CCS 会创建与 配置名称同名的 文件夹。 例如,我们为 UCD3138 配置构建。 执行此操作会在 含有 C 源文件的 文件夹中创建 称作 UCD3138 的文件夹。 降序向下访问该目录 以查看输出文件。 由 UCD 器件 GUI 用于 UCD 器件编程的文件 带有扩展名 .x0。 在我们的案例中, 它称作 Lab_1_UCD3138.x0。 我现将简要介绍 实验练习一中 源代码内的 UCD 项目结构。 这是一个典型的 项目文件夹结构。 其设置使您可以 通过 Code Composer Studio 中的 单一项目 访问每个 UCD 版本的 标题和连接器 命令文件。 源文件位于 其自身的文件夹中。 该文件夹也 包含项目的一些 头文件。 我们一会将简要 查看主要源文件。 当项目在 含有源文件的 文件夹中 构建和放置时, 将生成输出文件。 每个 UCD 版本 有一个单独的 输出文件夹。 PMBus_common 包含 PMBus 处理程序例程 所需的文件,这对于 所有 UCD 版本都是相同的。 每个 UCD 器件 版本的头文件和 连接器命令 文件也放置 在该级别上。 当您在 CCS 中 选择特定的配置时, CCS 创建过程 将配置为 给所选的 UCD 器件 选择正确的头文件 和连接器命令文件。 这些头文件和连接器 命令文件夹的 大部分内容 都不必更改, 因此,目前只需知道 它们的存在即可。 每个 UCD 器件的样片 标题和连接器命令文件 都由 TI 提供。 现在简要介绍一下 主要源文件。 在 CCS 中打开实验练习一项目。 main.c 包含 主程序函数。 一般而言,在 main.c 中会 调用一些初始化函数。 例如,在此例中, 代码调用 init_PMBus 以初始化 UCD 器件中的 PMBus 外设, 然后为 PMBus 处理 程序例程设置变量。 clear_integrity_word 这个函数 将清除编程 闪存校验和, 是决定器件是在 ROM 模式 还是在闪存模式下引导的关键。 我稍后将更详细地 解释这个函数, 以及 ROM 模式与 闪存模式的差异。 这是主循环。 您可以看到, 它是一个无限循环。 在主循环中,我们通常 放置常规处理例程。 即,时间对其 并非特别关键或 特别敏感的例程。 例如,PMBus 处理程序例程 总是置于此处。 一般使用静态 或全局变量 将这些例程 实施为状态机, 从而可以通过快速而标准的 中断服务例程将这些例程中断, 并可在中断 服务例程 执行完毕时, 即时无缝地 继续执行这些例程。 interrupts.c 包含快速 和标准中断服务 例程。 中断服务例程 现在是空的。 随着我们逐渐 完成实验练习, 我们将向它们添加代码。 外设的全局 变量定义 位于 cyclone_global_variable_defs.c 中。 例如,ADC 寄存器就在此处定义。 现在,我们将浏览 部分 include 文件和连接器 命令文件。 首先,简要看一下 连接器命令文件。 我们将看一下适用于 UCD3138 的 连接器命令文件。 UCD3138 系列 中的每个器件 都具有其自身的 连接器命令文件集。 目前只需知道 这些文件的存在即可。 您无需 修改它们。 Cyclone_headers.cmd 是 将 UCD 器件的外设结构 映射至内存的 连接器命令文件。 例如,LOOP_MUX、 UART 外设以及 ADC。 UCD 器件的 总体内存映射 都在 cyclone.cmd 中定义。 例如,我们将 D-闪存或者说数据闪存的 起始地址定义为 十六进制 18800,并且长度是 以十六进制表示的 800 字节。 Load_UCD3138.asm 含有 适用于 UCD3138 器件的 自定义系统 和变量初始化。 UCD3138 系列 中的每个器件 都有其自身的 load.asm 文件。 Load.asm 还包含 中断和复位矢量。 相应 load.asm 文件的纳入 取决于您在 Code Composer Studio 中 构建的代码是针对哪种 UCD 器件。 例如,如果您针对 UCD 3138064 器件构建代码, 则项目中将包括 load_UCD3138064.asm。 该代码的开销 必须低, 因此以汇编语言 编写该代码。 您无需 修改此代码, 因此现在无需 更为详尽地学习该代码。 现在,简要看一下 头文件。 我们将看一下适用于 UCD3138 的头文件。 UCD3138 系列 中的每个器件 都具有其自身的头文件集。 目前只需知道 这些文件的存在即可。 您无需 修改它们。 UCD3138a64_headerfiles 文件夹中的这些文件 包含 UCD3138a64 器件的头文件。 这些特殊的文件包含 外设的结构 文件。 Cyclone_device.h 是一个 含有所有其他 外设头文件的 头文件。 我们稍后将更为详细地 展示这些结构体的 用法。 简而言之,它们使我们能够 使用一次读取-修改-写入操作 设置或清除 寄存器中的单个位。 与使用单个常量编写的 单个寄存器相比, 它们在时间和代码 空间方面相对低效。 最佳方法是在开发中 使用这些结构体, 然后在稍后需要优化代码时, 切换至常量。 现在,简要看一下 实验练习一的代码。 它非常简单。 它只不过将一个字符串 变量设为“Hello World”。 在实验练习一,我们创建了一个称作 a_string 的 字符串变量, 该变量在 variables.h 中定义。 如果我们回到 main.c,我们会将 a_string 的值设为“Hello World”。 当我们 使用 UCD GUI 将该程序下载 至 UCD 编程闪存后, 我们将能够使用 UCD GUI 读取 a_string 的内容, 并验证其内容 是否真的是“Hello World”。 现在,我将展示如何 使用 UCD 器件 GUI 在 UCD 器件中 下载固件和访问内存变量。 在打开 GUI 之前, 将 USB 适配器线缆上的 USB 端插入计算机上的 USB 端口, 将其他 GPIO 端插入 开环评估板上的 PMBus 接头。 您应看到在 板左下角 LED 灯闪烁。 这指示 电路板已关闭 USB 至 PMBus 适配器的供电。 如果 LED 未亮起, 则您将需要在 PMBus 接头 附近的电路板右上方 插入跳线。 请参阅有关 评估板的文档, 以了解需要 插入的跳线。 默认情况下, 当您收到板时, 这些跳线应已插入。 作为 GUI 安装的 一部分, 在桌面上可能有 多达三个图标。 双击 UCD3xxx 和 UCD9xxx 器件 图标以启动 GUI。 在主要器件 GUI 窗口中,您将 看到三个窗格 - “Status”(状态)窗格, 显示与 USB 至 PMBus 适配器相连的器件的 状态;“Tools”(工具)窗格, 包含我们将 用于器件编程和 器件调试的工具; 以及“Log”(日志) 窗格, 在 UCD 器件收发PMBus 命令 过程中记录这些命令。 现在,我们来看一下与 PMBus 适配器相连的器件。 单击“Scan for Device in ROM Mode” (ROM 模式下扫描器件)。 这将通过 PMBus 接口 发送命令。 如果存在与 PMBus 相连的有效器件, 且器件处于 ROM 模式, 则 UCD 器件 将响应 PMBus 命令, 且 GUI 将检测 和解析响应, 以告诉用户 所连接的 UCD 器件 类型。 例如,UCD3138 或 UCD3138064。 稍后,我将更为详细地 讨论 ROM 和闪存模式。 如果尚未 对该器件编程, 它应处于 ROM 模式,且您 将在 GUI 的状态窗格中 看到以下消息。 您将看到目标 器件、ROM 信息 以及封装 ID。 在“Log”(日志)窗格中,您将 看到 PMBus 命令 并且应看到 以绿色突显的命令, 指示已在 ROM 模式 下找到 UCD 器件。 要对将载入器件的 固件编程, 在“Tools”(工具)窗口中 选择“Flash”(闪存)选项卡, 然后单击 固件下载链接。 固件下载 窗口将打开。 要选择将下载至 UCD 器件的固件, 单击“Select File”(选择文件) 按钮并 浏览至含有实验练习一的 .x0 文件的目录。 在我们的案例中, 它称作 Lab_1_UCD_3138.x0。 单击“Open”(打开)。 此时, 非常重要的是 选择“Radio”(无线电)按钮。 请勿写入程序校验和。 始终处于 ROM。 我稍后将更详细地 解释为何这很重要, 但是目前只需知道, 选定该选项后 对 UCD 器件编程 会使这些实验的 持续调试 更简单。 单击“Download”(下载)。 此时将出现弹出消息。 选择“Don't show this message again” (不再显示该消息)和“Yes”(是)。 此时将开始下载。 监控进度条 并查看 PMBus 日志窗口, 以了解更多 下载详细信息。 在“Log”(日志)窗格中,您应看到 消息 - “Download completed without errors”(下载完成,没有错误)- 以绿色突显, 指示下载成功。 您现在可以关闭 固件下载窗口。 我们现将使用 内存调试器来访问 和修改在我们刚才 对其编程的 UCD 器件上的内存, 例如 RAM 变量。 在调用内存 调试器之前, 检查“Command ROM to execute program” (命令 ROM 执行程序)是否呈灰显。 如未呈灰显,则单击该链接。 该链接将发送 PMBus 命令至 UCD 器件, UCD 器件中的 ROM 代码将解析这些命令, 以指示处理器 开始执行您刚才 为对程序存储器 编程而下载的代码。 如果这已灰显,我们刚才下载至 编程闪存的代码已执行, 下载至编程闪存的 代码已在执行, 这正是我们 所期待的。 如未呈灰显, 单击该链接。 以开始执行 代码和编程闪存。 此外,检查器件 ID 链接。 如呈灰显, 则需要单击该链接。 这将通过 PMBus 接口 发送至运行中的固件, 并检查 UCD 器件的 相应响应。 它使 GUI 了解 已下载至编程闪存的 固件是否正在 执行 PMBus 处理程序 例程,我们在后面 将更为详细地讨论例程。 当正在执行编程闪存 中的代码时, GUI 需要 这些例程 才能继续与 器件通信。 在“Tools”(工具)窗口中, 选择调试选项卡。 单击内存 调试器链接 以打开内存调试器。 当您第一次 使用该工具时, 它会提示您 输入密码。 在弹出窗口中 键入 f-o-r-e-s-t-l-n, 全部小写。 程序不会再次 提示您输入该密码。 单击“OK”(确定)。 要为程序中 使用的变量 加载内存映射, 依次在内存调试器中选择“File”(文件)、 “Change Map”(更改映射)。 当出现更改 映射对话框时, 选择含有您的项目的 映射和 PP 文件的 文件夹。 这与含有 Tektronix.x0 文件的文件夹 为同一文件夹, 我们在下载固件时 将导航至该文件夹。 单击“OK”(确定)。 加载相应的 映射文件将使 内存调试器能够显示 变量、寄存器以及 关联的调试字段。 对于实验练习一,我们已 使用 C 代码将称作 a_string 的 字符阵列设为“Hello World”。 选择刷新列中的 “Refresh”(刷新)按钮 更新变量。 单击名称列中的 加号可展开变量, 且您可以查看 变量阵列的元素。 “Hello World”会按顺序逐字节 以十六进制形式 显示。 48 是大写 H 的 十六进制表示法, 65 是大写 E 的 十六进制表示法,依此类推。 现在,我将简要概述 在写入编程闪存时 UCD3138 中的 引导 BOM 程序 以及校验和的放置。 这些校验和提供了 一种在允许 ARM 内核 执行编程闪存 中的代码前 让引导 ROM 检查编程闪存 完整性的方法。 这是 UCD3138 中 32 KB 编程闪存 图示。 引导程序可 置于编程闪存的 前两个 KB 中。 如果编程闪存的 前 2 KB 用于引导程序, 则该 2 KB 块的最后 4 个字节 将保留 用于 4 字节的校验和。 该校验和的 计算方式是 将前 2 KB 编程 闪存上 每字节编程 闪存的内容相加。 如果无需 引导程序, 则将保留编程闪存的 最后 4 个字节 供另一 4 个字节的校验和使用, 其计算是通过在 整个 32 KB 范围内 将编程闪存的 各字节内容相加 得出的。 在加电或复位后, 引导运行例程 将在两个位置 验证校验和, 并根据结果, 决定是 始终处于 ROM 模式,还是开始 执行编程闪存中的 代码。 这就是我们所说的闪存模式。 校验和提供了 一种在执行 编程闪存中的代码前 检查编程闪存中的 内容是否 完整的方法。 从用户角度来看, 我们在写入 编程闪存时, 纳入或排除了 这些校验和。 排除校验和会强制 器件在加电复位后 仍始终处于 ROM 模式。 纳入校验和会强制 器件在加电复位后 在闪存模式下运行,当然,前提是 编程闪存未 损坏。 我现将展示 UCD3138 上 有关引导 ROM 程序的 程序流程简图。 请注意,该 引导 ROM 例程 与 UCD 的 3138 系列产品的其他成员 略有不同。 请参阅 各种程序员 手册以了解确切详情, 但是基本上,我将讨论的原则 与整个 UCD 3138 系列均有关。 加电或复位后, 引导 ROM 程序 将初始化一些外设。 然后,它计算编程闪存 前两个 KB 的校验和, 这可用于 存储引导程序, 以及将最新 计算的校验和 与在该 2 KB 编程 闪存块的最后 4 个字节 中存储的值 进行比较。 如果校验和的值 相符,引导 ROM 例程 会强制 ARM 内核 开始执行编程闪存中的代码, 从而它从 ROM 模式 转变为闪存模式。 如果校验和的 值不相符, 则引导 ROM 程序会 计算整个 32 KB 编程 闪存的校验和。 然后,它会将此最新 计算所得的校验和 与该 32 KB 编程闪存的 最后 4 个字节中存储的值 进行比较。 如果校验和的值相符, 它会开始执行 编程闪存中的代码, 从而它从 ROM 模式转变 为闪存模式。 如果校验和的 值不相符, 它将跳至 PMBus 处理程序例程。 该例程不断 通过 PMBus 接口 拉取从诸如 UCD 器件 GUI 等主要工具 发来的有效 PMBus 命令。 这些 PMBus 命令可 用于读取、写入和擦除 程序和数据闪存。 此外,还有 命令可执行 编程闪存中的代码。 使用此命令, 我们可以在 ROM 模式下 执行编程闪存 中的代码, 而无需在对器件编程时, 写入两种校验和中的 任一种。 我们不建议编写这两种 校验和中的任一种 以及在代码开发期间 使用该命令, 因为它将确保该闪存 不会变为锁定状态。 现在,我将演示 闪存可以 如何变为锁定状态, 这表示无法再将其 擦除和对其重新编程。 这是主程序中 代码的简单图示。 这是将写入 编程闪存的代码。 此时,假设已对一个 或全部两个校验和 编程,从而引导 ROM 例程将指示 ARM 内核在加电或 复位后执行闪存中的 代码。 一般而言,我们在 主程序开头 设有初始化函数, 然后是主循环。 在主循环内部,我们 始终调用 PMBus 处理程序 例程,从而我们可以 通过 PMBus 接口 擦除闪存并对其重新编程。 一切运行正常, 每次经过主循环时, 均会调用 PMBus 处理程序例程。 但是,当程序中 有妨碍到达 主循环的错误时, 应当如何应对? 这意味着将永不调用 PMBus 处理程序例程, 从而防止 我们访问和擦除闪存 以及对闪存重新编程。 因此,编程闪存 变为已锁定 且永不能对 该部分重新编程。 所以,我们建议将后门 置于主程序的开头 以规避该问题。 clear_integrity_word 将清除 该编程闪存校验和。 您应在处于 闲置状态的 输入引脚上依情况 调用 clear_integrity_word。 将其就置于 主程序开头可最大限度 降低因错误 导致 clear_integrity_word 在需要执行时 无法执行的发生概率。 所以,如果有 错误阻碍 主循环中的 PMBus 处理程序例程 执行, 您可以 更改输入引脚的状态, 复位器件, 当编程 闪存中的代码执行时, 将即时调用 clear_integrity_word, 它将清除校验和。 然后,在复位时, 引导 ROM 代码 不会跳至编程 闪存,因为启动时 执行的校验和将失败, 但是仍将处于 ROM 模式 并执行 PMBus 处理程序例程。 从此以后,您可以擦除 并重新写入编程闪存。 函数 clear_integrity_word 会清除编程 闪存校验和, 从而它会清除编程 闪存 4 或 8 字节的内容。 擦除或写入闪存 要求该器件 处于特权模式。 为将器件置于 特权模式, 我们采用了软件的 中断机制。 软件中断不是 常规意义上的中断。 软件中断的 发起是由软件的 顺序执行 和调用 特定函数 实现的。 对软件中断 函数的调用 看上去与对任何其他 标准函数的调用别无二致。 使函数基于 软件中断 会强制 ARM 以 特权模式运行。 在特权模式下, 软件 可启用或禁用 中断,操纵程序 和数据闪存 内容及其他。 当 ARM 处于用户模式下时, 这些功能 全都不允许使用。 在 UCD3138 数字 系统程序员手册中, 您可以阅读有关 软件中断机制的更多内容。
在此演示中, 我将概述一下在开始 UCD3138 系列 电源控制器 上进行开发时 所需的 工具和硬件。 要对 UCD3138 系列上 基于闪存的存储器编程, 我们需要安装两个 TI 专属工具。 TI 可免费提供 这两款工具。 第一款工具称作 Code Composer Studio。 这是集成 开发环境, 其中 C - 源代码 - 可编辑、编译、汇编 以及链接。 第二款工具称作 UCD 器件 GUI。 此工具直接 与 UCD 器件 通信并配置 其基于闪存的 程序存储器。 它将 Code Composer Studio 的输出作为输入。 UCD 的基于 闪存的程序存储器 是通过 PMBus 接口 配置的。 PMBus 是电源管理 总线的简称。 我们在后续阶段将更为 详细地讨论该标准。 必须具有 USB 至 PMBus 硬件适配器, 以便 UCD 器件 GUI 可以与 UCD 器件通信。 请注意,UCD 31xx 系列上的 闪存还支持 通过各类 其他接口编程, 例如 SPI、I2C、 UART 以及 JTAG。 为简洁起见,我们 在这些教程中 将仅着重于 PMBus。 我现在介绍一下 Code Composer Studio 这款工具。 这是基于 Eclipse 的 集成开发 环境。 它支持所有 德州仪器 (TI) 微控制器 和嵌入式 处理器产品组合。 它包含 C 和 C++ 编译器、汇编器 以及连接器,即一款完全 集成的 CodeWright 编辑器, 以及具有多项目支持的 集成可视化工程 管理器。 我们很快将讨论 Code Composer Studio 的安装, 并且我们将向您展示 如何开始使用该工具。 有关更多信息,请导航至 www.ti.com/ccs。 我们强烈建议安装 CCS 6.1 版或更高版本, 以获得最新 支持和功能。 我们将使用的第二款 工具称作 UCD 器件 GUI。 它包含功能 更全面的 数字电源 设计器的功能子集, 并且可为工具集的 一部分使用。 它主要用于 将程序下载 至 UCD 上基于闪存的存储器, 控制程序执行, 并使用 PMBus 命令 访问和修改存储器的内容。 在此演示中, 稍后将展示 安装演示。 有关更多信息, 请导航至所示链接。 现在,简单概述从 C 源文件 到编程 UCD 器件的 代码开 发流程。 在 Code Composer Studio 中,程序会将 C 或 C++ 源文件 传入并经过 C 编译器 以进行解析和优化。 该过程的输出是 一组汇编源文件。 然后,程序会将这些 汇编源文件 传入并经过汇编器 以创建一个目标文件集。 然后,程序将该目标文件集 传入并经过连接器, 以创建可执行的 . out 文件。 然后,程序将该输出文件传入并经过 ARMHEX 工具, 以创建 UCD 器件 GUI 可读取的 .x0 文件。 该系列步骤 可能显得比较复杂, 但在 Code Composer Studio 内 构建 C 或 C++ 空间项目时, 整个流程 会自动执行。 因此,该过程 将全部对用户隐藏。 德州仪器 (TI) 提供 具有相应设置的 示例项目, 从而您能够 快速开始开发。 在通过 USB 至 PMBus 硬件 适配器 对 UCD 器件编程时, UCD 器件 GUI 会读取 CCS 构建过程的输出, 即 Tektronix .x0 文件。 要完成这些实验, 还需要某些硬件。 需要一块 开环测试板。 TI提供了三块 测试版,且它们 根据您使用的 UCD 器件和引脚计数 而不同。 从 TI 网站或 大多数分销商处 可直接订购这些板。 德州仪器 TI.com.cn 还提供 文档和示意图。 还需要一个 USB 至 GPIO 适配器 以使用 GUI 经由 PMBus 接口 与 UCD 器件通信。 有关订购信息, 请访问所示链接。 此外,还值得下载 三本主要的程序员 手册 - 监控与 通信程序员手册、 数字电源外设 程序员手册, 以及 ARM 和数字 系统程序员手册。 您可能还希望下载 有关衍生器件的 程序员手册。 现在,我将展示如何 下载和安装 Code Composer Studio。 TI 免费提供这款称作 Code Composer Studio 工具,您将用其 编写 C 源代码 - 这些代码将被编译、 汇编并最终下载至 您的目标 UCD 器件。 要获得该工具, 请在 Internet 浏览器中导航至 www.ti.com/ccs。 向下滚动并单击 下载按钮 以下载最新版 Windows 或 Linux。 如果您还未建立 myTI 帐户, 请建立帐户。 如果您有 myTI 帐户,请使用您的 登录信息登录。 按照安装 说明操作。 您将收到含有 CCS 软件下载 链接的电子邮件。 继续按照安装 说明操作。 当程序提示您选择产品系列时, 确保选择“UCD Digital Power Controllers” (UCS 数字电源控制器)。 选择要安装的 调试探针, 例如 JTAG 调试探针 和开发板的驱动程序, 然后单击“Finish”(完成)。 现在,我将展示如何 下载和安装 UCD 器件 GUI。 在 Internet 浏览器中,访问 www.ti.com/tool/fusion digital power designer。 选择下载最新版本, 然后按照 安装说明操作。 当程序提示您安装其他 工具时,确保安装 UCD 3xxx UCD 9xxx 器件 GUI。 单击“Finish”(完成)。 我现将展示如何 开始使用 Code Composer Studio。 此处是编辑视图下的 Code Composer Studio。 该视图分为四个主要部分 - Project “Project Explorer”(项目浏览器) 区域 - 用于管理构成工作区的每个项目 -- “Source Editor” (源编辑器)-- 提供 编辑器空间 并可按您的 喜好配置-- “Console Window”(控制台窗口)-- 针对自构建过程输出的原始消息 -- 以及“Problems Window” (问题窗口)-- 提供 构建过程发出的 所有错误、警告以及其他提示的 结构化展示。 现在,对于构建过程, 我们将首先将 实验练习一导入 CCS。 选择“Project”(项目)。 导入 CCS 项目。 浏览至含有 实验练习一 源代码的目录。 单击“Finish”(完成)。 您现在应在“Project Explorer” (项目浏览器)窗格中查看实验练习一 项目。 展开项目以 查看源文件。 下一步是 构建项目。 构建项目可 通过许多方式完成。 构建前, 让我们看一下 项目配置, 项目配置是 有关构建的设置。 右键单击项目 并选择“Properties”(属性)。 创建源代码 一直是为了处理 UCD 器件的 任何版本。 要选择将构建的 目标 UCD 器件, 单击“Manage Configurations”(管理配置)。 要使特定 器件活跃, 在状态列中 选择“Set Active”(设为有效)。 例如,如果您要 使 UCD3138128 游戏, 左键单击,然后单击 “Set Active”(设为有效)。 在本演示中,我们要 构建将会 下载至 UCD3138 的项目,所以将 UCD3138 设为 有效配置。 单击“OK”(确定)退出 “Properties”(属性)窗口。 要构建项目,右键单击“Project Explorer” (项目浏览器)区域中的项目, 然后选择 “Build Project”(构建项目)。 此操作将为 UCD3138 构建项目, 因为我们已将其 设为活动配置。 或者, 选择工具栏中 锤形图标旁的 向下箭头, 以构建四个 UCD 器件 中的任一个器件。 此处是展示原始 构建输出的控制台窗口。 这主要是 与项目中每个 文件的编译有关的 编译器消息。 在控制台底部, 注意 连接器消息, 以及 ARMHEX 消息, 指示 COFF 输出 文件转化为 Tektronix HEX 输出文件已完成。 如果存在构建 错误或警告, 这些也可以 通过单击控制台 窗口上方的 向上箭头键和 向下箭头键快速导航。 在 CCS 中构建 项目有意义的 唯一前提是 构建过程的输出 可在 UCD3138xxx 器件 自身中使用。 要查找将载入 器件 GUI 的输出文件, 浏览至含有 C 源文件的目录。 当为某个项目 设置配置后, CCS 会创建与 配置名称同名的 文件夹。 例如,我们为 UCD3138 配置构建。 执行此操作会在 含有 C 源文件的 文件夹中创建 称作 UCD3138 的文件夹。 降序向下访问该目录 以查看输出文件。 由 UCD 器件 GUI 用于 UCD 器件编程的文件 带有扩展名 .x0。 在我们的案例中, 它称作 Lab_1_UCD3138.x0。 我现将简要介绍 实验练习一中 源代码内的 UCD 项目结构。 这是一个典型的 项目文件夹结构。 其设置使您可以 通过 Code Composer Studio 中的 单一项目 访问每个 UCD 版本的 标题和连接器 命令文件。 源文件位于 其自身的文件夹中。 该文件夹也 包含项目的一些 头文件。 我们一会将简要 查看主要源文件。 当项目在 含有源文件的 文件夹中 构建和放置时, 将生成输出文件。 每个 UCD 版本 有一个单独的 输出文件夹。 PMBus_common 包含 PMBus 处理程序例程 所需的文件,这对于 所有 UCD 版本都是相同的。 每个 UCD 器件 版本的头文件和 连接器命令 文件也放置 在该级别上。 当您在 CCS 中 选择特定的配置时, CCS 创建过程 将配置为 给所选的 UCD 器件 选择正确的头文件 和连接器命令文件。 这些头文件和连接器 命令文件夹的 大部分内容 都不必更改, 因此,目前只需知道 它们的存在即可。 每个 UCD 器件的样片 标题和连接器命令文件 都由 TI 提供。 现在简要介绍一下 主要源文件。 在 CCS 中打开实验练习一项目。 main.c 包含 主程序函数。 一般而言,在 main.c 中会 调用一些初始化函数。 例如,在此例中, 代码调用 init_PMBus 以初始化 UCD 器件中的 PMBus 外设, 然后为 PMBus 处理 程序例程设置变量。 clear_integrity_word 这个函数 将清除编程 闪存校验和, 是决定器件是在 ROM 模式 还是在闪存模式下引导的关键。 我稍后将更详细地 解释这个函数, 以及 ROM 模式与 闪存模式的差异。 这是主循环。 您可以看到, 它是一个无限循环。 在主循环中,我们通常 放置常规处理例程。 即,时间对其 并非特别关键或 特别敏感的例程。 例如,PMBus 处理程序例程 总是置于此处。 一般使用静态 或全局变量 将这些例程 实施为状态机, 从而可以通过快速而标准的 中断服务例程将这些例程中断, 并可在中断 服务例程 执行完毕时, 即时无缝地 继续执行这些例程。 interrupts.c 包含快速 和标准中断服务 例程。 中断服务例程 现在是空的。 随着我们逐渐 完成实验练习, 我们将向它们添加代码。 外设的全局 变量定义 位于 cyclone_global_variable_defs.c 中。 例如,ADC 寄存器就在此处定义。 现在,我们将浏览 部分 include 文件和连接器 命令文件。 首先,简要看一下 连接器命令文件。 我们将看一下适用于 UCD3138 的 连接器命令文件。 UCD3138 系列 中的每个器件 都具有其自身的 连接器命令文件集。 目前只需知道 这些文件的存在即可。 您无需 修改它们。 Cyclone_headers.cmd 是 将 UCD 器件的外设结构 映射至内存的 连接器命令文件。 例如,LOOP_MUX、 UART 外设以及 ADC。 UCD 器件的 总体内存映射 都在 cyclone.cmd 中定义。 例如,我们将 D-闪存或者说数据闪存的 起始地址定义为 十六进制 18800,并且长度是 以十六进制表示的 800 字节。 Load_UCD3138.asm 含有 适用于 UCD3138 器件的 自定义系统 和变量初始化。 UCD3138 系列 中的每个器件 都有其自身的 load.asm 文件。 Load.asm 还包含 中断和复位矢量。 相应 load.asm 文件的纳入 取决于您在 Code Composer Studio 中 构建的代码是针对哪种 UCD 器件。 例如,如果您针对 UCD 3138064 器件构建代码, 则项目中将包括 load_UCD3138064.asm。 该代码的开销 必须低, 因此以汇编语言 编写该代码。 您无需 修改此代码, 因此现在无需 更为详尽地学习该代码。 现在,简要看一下 头文件。 我们将看一下适用于 UCD3138 的头文件。 UCD3138 系列 中的每个器件 都具有其自身的头文件集。 目前只需知道 这些文件的存在即可。 您无需 修改它们。 UCD3138a64_headerfiles 文件夹中的这些文件 包含 UCD3138a64 器件的头文件。 这些特殊的文件包含 外设的结构 文件。 Cyclone_device.h 是一个 含有所有其他 外设头文件的 头文件。 我们稍后将更为详细地 展示这些结构体的 用法。 简而言之,它们使我们能够 使用一次读取-修改-写入操作 设置或清除 寄存器中的单个位。 与使用单个常量编写的 单个寄存器相比, 它们在时间和代码 空间方面相对低效。 最佳方法是在开发中 使用这些结构体, 然后在稍后需要优化代码时, 切换至常量。 现在,简要看一下 实验练习一的代码。 它非常简单。 它只不过将一个字符串 变量设为“Hello World”。 在实验练习一,我们创建了一个称作 a_string 的 字符串变量, 该变量在 variables.h 中定义。 如果我们回到 main.c,我们会将 a_string 的值设为“Hello World”。 当我们 使用 UCD GUI 将该程序下载 至 UCD 编程闪存后, 我们将能够使用 UCD GUI 读取 a_string 的内容, 并验证其内容 是否真的是“Hello World”。 现在,我将展示如何 使用 UCD 器件 GUI 在 UCD 器件中 下载固件和访问内存变量。 在打开 GUI 之前, 将 USB 适配器线缆上的 USB 端插入计算机上的 USB 端口, 将其他 GPIO 端插入 开环评估板上的 PMBus 接头。 您应看到在 板左下角 LED 灯闪烁。 这指示 电路板已关闭 USB 至 PMBus 适配器的供电。 如果 LED 未亮起, 则您将需要在 PMBus 接头 附近的电路板右上方 插入跳线。 请参阅有关 评估板的文档, 以了解需要 插入的跳线。 默认情况下, 当您收到板时, 这些跳线应已插入。 作为 GUI 安装的 一部分, 在桌面上可能有 多达三个图标。 双击 UCD3xxx 和 UCD9xxx 器件 图标以启动 GUI。 在主要器件 GUI 窗口中,您将 看到三个窗格 - “Status”(状态)窗格, 显示与 USB 至 PMBus 适配器相连的器件的 状态;“Tools”(工具)窗格, 包含我们将 用于器件编程和 器件调试的工具; 以及“Log”(日志) 窗格, 在 UCD 器件收发PMBus 命令 过程中记录这些命令。 现在,我们来看一下与 PMBus 适配器相连的器件。 单击“Scan for Device in ROM Mode” (ROM 模式下扫描器件)。 这将通过 PMBus 接口 发送命令。 如果存在与 PMBus 相连的有效器件, 且器件处于 ROM 模式, 则 UCD 器件 将响应 PMBus 命令, 且 GUI 将检测 和解析响应, 以告诉用户 所连接的 UCD 器件 类型。 例如,UCD3138 或 UCD3138064。 稍后,我将更为详细地 讨论 ROM 和闪存模式。 如果尚未 对该器件编程, 它应处于 ROM 模式,且您 将在 GUI 的状态窗格中 看到以下消息。 您将看到目标 器件、ROM 信息 以及封装 ID。 在“Log”(日志)窗格中,您将 看到 PMBus 命令 并且应看到 以绿色突显的命令, 指示已在 ROM 模式 下找到 UCD 器件。 要对将载入器件的 固件编程, 在“Tools”(工具)窗口中 选择“Flash”(闪存)选项卡, 然后单击 固件下载链接。 固件下载 窗口将打开。 要选择将下载至 UCD 器件的固件, 单击“Select File”(选择文件) 按钮并 浏览至含有实验练习一的 .x0 文件的目录。 在我们的案例中, 它称作 Lab_1_UCD_3138.x0。 单击“Open”(打开)。 此时, 非常重要的是 选择“Radio”(无线电)按钮。 请勿写入程序校验和。 始终处于 ROM。 我稍后将更详细地 解释为何这很重要, 但是目前只需知道, 选定该选项后 对 UCD 器件编程 会使这些实验的 持续调试 更简单。 单击“Download”(下载)。 此时将出现弹出消息。 选择“Don't show this message again” (不再显示该消息)和“Yes”(是)。 此时将开始下载。 监控进度条 并查看 PMBus 日志窗口, 以了解更多 下载详细信息。 在“Log”(日志)窗格中,您应看到 消息 - “Download completed without errors”(下载完成,没有错误)- 以绿色突显, 指示下载成功。 您现在可以关闭 固件下载窗口。 我们现将使用 内存调试器来访问 和修改在我们刚才 对其编程的 UCD 器件上的内存, 例如 RAM 变量。 在调用内存 调试器之前, 检查“Command ROM to execute program” (命令 ROM 执行程序)是否呈灰显。 如未呈灰显,则单击该链接。 该链接将发送 PMBus 命令至 UCD 器件, UCD 器件中的 ROM 代码将解析这些命令, 以指示处理器 开始执行您刚才 为对程序存储器 编程而下载的代码。 如果这已灰显,我们刚才下载至 编程闪存的代码已执行, 下载至编程闪存的 代码已在执行, 这正是我们 所期待的。 如未呈灰显, 单击该链接。 以开始执行 代码和编程闪存。 此外,检查器件 ID 链接。 如呈灰显, 则需要单击该链接。 这将通过 PMBus 接口 发送至运行中的固件, 并检查 UCD 器件的 相应响应。 它使 GUI 了解 已下载至编程闪存的 固件是否正在 执行 PMBus 处理程序 例程,我们在后面 将更为详细地讨论例程。 当正在执行编程闪存 中的代码时, GUI 需要 这些例程 才能继续与 器件通信。 在“Tools”(工具)窗口中, 选择调试选项卡。 单击内存 调试器链接 以打开内存调试器。 当您第一次 使用该工具时, 它会提示您 输入密码。 在弹出窗口中 键入 f-o-r-e-s-t-l-n, 全部小写。 程序不会再次 提示您输入该密码。 单击“OK”(确定)。 要为程序中 使用的变量 加载内存映射, 依次在内存调试器中选择“File”(文件)、 “Change Map”(更改映射)。 当出现更改 映射对话框时, 选择含有您的项目的 映射和 PP 文件的 文件夹。 这与含有 Tektronix.x0 文件的文件夹 为同一文件夹, 我们在下载固件时 将导航至该文件夹。 单击“OK”(确定)。 加载相应的 映射文件将使 内存调试器能够显示 变量、寄存器以及 关联的调试字段。 对于实验练习一,我们已 使用 C 代码将称作 a_string 的 字符阵列设为“Hello World”。 选择刷新列中的 “Refresh”(刷新)按钮 更新变量。 单击名称列中的 加号可展开变量, 且您可以查看 变量阵列的元素。 “Hello World”会按顺序逐字节 以十六进制形式 显示。 48 是大写 H 的 十六进制表示法, 65 是大写 E 的 十六进制表示法,依此类推。 现在,我将简要概述 在写入编程闪存时 UCD3138 中的 引导 BOM 程序 以及校验和的放置。 这些校验和提供了 一种在允许 ARM 内核 执行编程闪存 中的代码前 让引导 ROM 检查编程闪存 完整性的方法。 这是 UCD3138 中 32 KB 编程闪存 图示。 引导程序可 置于编程闪存的 前两个 KB 中。 如果编程闪存的 前 2 KB 用于引导程序, 则该 2 KB 块的最后 4 个字节 将保留 用于 4 字节的校验和。 该校验和的 计算方式是 将前 2 KB 编程 闪存上 每字节编程 闪存的内容相加。 如果无需 引导程序, 则将保留编程闪存的 最后 4 个字节 供另一 4 个字节的校验和使用, 其计算是通过在 整个 32 KB 范围内 将编程闪存的 各字节内容相加 得出的。 在加电或复位后, 引导运行例程 将在两个位置 验证校验和, 并根据结果, 决定是 始终处于 ROM 模式,还是开始 执行编程闪存中的 代码。 这就是我们所说的闪存模式。 校验和提供了 一种在执行 编程闪存中的代码前 检查编程闪存中的 内容是否 完整的方法。 从用户角度来看, 我们在写入 编程闪存时, 纳入或排除了 这些校验和。 排除校验和会强制 器件在加电复位后 仍始终处于 ROM 模式。 纳入校验和会强制 器件在加电复位后 在闪存模式下运行,当然,前提是 编程闪存未 损坏。 我现将展示 UCD3138 上 有关引导 ROM 程序的 程序流程简图。 请注意,该 引导 ROM 例程 与 UCD 的 3138 系列产品的其他成员 略有不同。 请参阅 各种程序员 手册以了解确切详情, 但是基本上,我将讨论的原则 与整个 UCD 3138 系列均有关。 加电或复位后, 引导 ROM 程序 将初始化一些外设。 然后,它计算编程闪存 前两个 KB 的校验和, 这可用于 存储引导程序, 以及将最新 计算的校验和 与在该 2 KB 编程 闪存块的最后 4 个字节 中存储的值 进行比较。 如果校验和的值 相符,引导 ROM 例程 会强制 ARM 内核 开始执行编程闪存中的代码, 从而它从 ROM 模式 转变为闪存模式。 如果校验和的 值不相符, 则引导 ROM 程序会 计算整个 32 KB 编程 闪存的校验和。 然后,它会将此最新 计算所得的校验和 与该 32 KB 编程闪存的 最后 4 个字节中存储的值 进行比较。 如果校验和的值相符, 它会开始执行 编程闪存中的代码, 从而它从 ROM 模式转变 为闪存模式。 如果校验和的 值不相符, 它将跳至 PMBus 处理程序例程。 该例程不断 通过 PMBus 接口 拉取从诸如 UCD 器件 GUI 等主要工具 发来的有效 PMBus 命令。 这些 PMBus 命令可 用于读取、写入和擦除 程序和数据闪存。 此外,还有 命令可执行 编程闪存中的代码。 使用此命令, 我们可以在 ROM 模式下 执行编程闪存 中的代码, 而无需在对器件编程时, 写入两种校验和中的 任一种。 我们不建议编写这两种 校验和中的任一种 以及在代码开发期间 使用该命令, 因为它将确保该闪存 不会变为锁定状态。 现在,我将演示 闪存可以 如何变为锁定状态, 这表示无法再将其 擦除和对其重新编程。 这是主程序中 代码的简单图示。 这是将写入 编程闪存的代码。 此时,假设已对一个 或全部两个校验和 编程,从而引导 ROM 例程将指示 ARM 内核在加电或 复位后执行闪存中的 代码。 一般而言,我们在 主程序开头 设有初始化函数, 然后是主循环。 在主循环内部,我们 始终调用 PMBus 处理程序 例程,从而我们可以 通过 PMBus 接口 擦除闪存并对其重新编程。 一切运行正常, 每次经过主循环时, 均会调用 PMBus 处理程序例程。 但是,当程序中 有妨碍到达 主循环的错误时, 应当如何应对? 这意味着将永不调用 PMBus 处理程序例程, 从而防止 我们访问和擦除闪存 以及对闪存重新编程。 因此,编程闪存 变为已锁定 且永不能对 该部分重新编程。 所以,我们建议将后门 置于主程序的开头 以规避该问题。 clear_integrity_word 将清除 该编程闪存校验和。 您应在处于 闲置状态的 输入引脚上依情况 调用 clear_integrity_word。 将其就置于 主程序开头可最大限度 降低因错误 导致 clear_integrity_word 在需要执行时 无法执行的发生概率。 所以,如果有 错误阻碍 主循环中的 PMBus 处理程序例程 执行, 您可以 更改输入引脚的状态, 复位器件, 当编程 闪存中的代码执行时, 将即时调用 clear_integrity_word, 它将清除校验和。 然后,在复位时, 引导 ROM 代码 不会跳至编程 闪存,因为启动时 执行的校验和将失败, 但是仍将处于 ROM 模式 并执行 PMBus 处理程序例程。 从此以后,您可以擦除 并重新写入编程闪存。 函数 clear_integrity_word 会清除编程 闪存校验和, 从而它会清除编程 闪存 4 或 8 字节的内容。 擦除或写入闪存 要求该器件 处于特权模式。 为将器件置于 特权模式, 我们采用了软件的 中断机制。 软件中断不是 常规意义上的中断。 软件中断的 发起是由软件的 顺序执行 和调用 特定函数 实现的。 对软件中断 函数的调用 看上去与对任何其他 标准函数的调用别无二致。 使函数基于 软件中断 会强制 ARM 以 特权模式运行。 在特权模式下, 软件 可启用或禁用 中断,操纵程序 和数据闪存 内容及其他。 当 ARM 处于用户模式下时, 这些功能 全都不允许使用。 在 UCD3138 数字 系统程序员手册中, 您可以阅读有关 软件中断机制的更多内容。
在此演示中, 我将概述一下在开始 UCD3138 系列
电源控制器 上进行开发时
所需的 工具和硬件。
要对 UCD3138 系列上 基于闪存的存储器编程,
我们需要安装两个 TI 专属工具。
TI 可免费提供 这两款工具。
第一款工具称作 Code Composer Studio。
这是集成 开发环境,
其中 C - 源代码 - 可编辑、编译、汇编
以及链接。
第二款工具称作 UCD 器件 GUI。
此工具直接 与 UCD 器件
通信并配置 其基于闪存的
程序存储器。
它将 Code Composer Studio 的输出作为输入。
UCD 的基于 闪存的程序存储器
是通过 PMBus 接口 配置的。
PMBus 是电源管理 总线的简称。
我们在后续阶段将更为 详细地讨论该标准。
必须具有 USB 至 PMBus 硬件适配器,
以便 UCD 器件 GUI 可以与 UCD 器件通信。
请注意,UCD 31xx 系列上的 闪存还支持
通过各类 其他接口编程,
例如 SPI、I2C、 UART 以及 JTAG。
为简洁起见,我们 在这些教程中
将仅着重于 PMBus。
我现在介绍一下 Code Composer Studio
这款工具。
这是基于 Eclipse 的 集成开发
环境。
它支持所有 德州仪器 (TI) 微控制器
和嵌入式 处理器产品组合。
它包含 C 和 C++ 编译器、汇编器
以及连接器,即一款完全 集成的 CodeWright 编辑器,
以及具有多项目支持的 集成可视化工程
管理器。
我们很快将讨论 Code Composer Studio 的安装,
并且我们将向您展示 如何开始使用该工具。
有关更多信息,请导航至 www.ti.com/ccs。
我们强烈建议安装 CCS 6.1 版或更高版本,
以获得最新 支持和功能。
我们将使用的第二款 工具称作 UCD 器件 GUI。
它包含功能 更全面的
数字电源 设计器的功能子集,
并且可为工具集的 一部分使用。
它主要用于 将程序下载
至 UCD 上基于闪存的存储器, 控制程序执行,
并使用 PMBus 命令 访问和修改存储器的内容。
在此演示中, 稍后将展示
安装演示。
有关更多信息, 请导航至所示链接。
现在,简单概述从 C 源文件 到编程 UCD 器件的
代码开 发流程。
在 Code Composer Studio 中,程序会将 C 或 C++ 源文件
传入并经过 C 编译器 以进行解析和优化。
该过程的输出是 一组汇编源文件。
然后,程序会将这些 汇编源文件
传入并经过汇编器 以创建一个目标文件集。
然后,程序将该目标文件集 传入并经过连接器,
以创建可执行的 . out 文件。
然后,程序将该输出文件传入并经过 ARMHEX 工具,
以创建 UCD 器件 GUI 可读取的 .x0 文件。
该系列步骤 可能显得比较复杂,
但在 Code Composer Studio 内 构建 C 或 C++ 空间项目时,
整个流程 会自动执行。
因此,该过程 将全部对用户隐藏。
德州仪器 (TI) 提供 具有相应设置的
示例项目, 从而您能够
快速开始开发。
在通过 USB 至 PMBus 硬件 适配器
对 UCD 器件编程时, UCD 器件 GUI 会读取
CCS 构建过程的输出, 即 Tektronix .x0
文件。
要完成这些实验, 还需要某些硬件。
需要一块 开环测试板。
TI提供了三块 测试版,且它们
根据您使用的 UCD 器件和引脚计数
而不同。
从 TI 网站或 大多数分销商处
可直接订购这些板。
德州仪器 TI.com.cn 还提供 文档和示意图。
还需要一个 USB 至 GPIO 适配器
以使用 GUI 经由 PMBus 接口
与 UCD 器件通信。
有关订购信息, 请访问所示链接。
此外,还值得下载 三本主要的程序员
手册 - 监控与 通信程序员手册、
数字电源外设 程序员手册,
以及 ARM 和数字 系统程序员手册。
您可能还希望下载 有关衍生器件的
程序员手册。
现在,我将展示如何 下载和安装
Code Composer Studio。
TI 免费提供这款称作 Code Composer Studio
工具,您将用其 编写 C 源代码 -
这些代码将被编译、 汇编并最终下载至
您的目标 UCD 器件。
要获得该工具, 请在 Internet 浏览器中导航至
www.ti.com/ccs。
向下滚动并单击 下载按钮
以下载最新版 Windows 或 Linux。
如果您还未建立 myTI 帐户, 请建立帐户。
如果您有 myTI 帐户,请使用您的 登录信息登录。
按照安装 说明操作。
您将收到含有 CCS 软件下载
链接的电子邮件。
继续按照安装 说明操作。
当程序提示您选择产品系列时, 确保选择“UCD Digital Power Controllers”
(UCS 数字电源控制器)。
选择要安装的 调试探针,
例如 JTAG 调试探针 和开发板的驱动程序,
然后单击“Finish”(完成)。
现在,我将展示如何 下载和安装
UCD 器件 GUI。
在 Internet 浏览器中,访问 www.ti.com/tool/fusion digital power designer。
选择下载最新版本, 然后按照
安装说明操作。
当程序提示您安装其他 工具时,确保安装
UCD 3xxx UCD 9xxx 器件 GUI。
单击“Finish”(完成)。
我现将展示如何 开始使用 Code Composer
Studio。
此处是编辑视图下的 Code Composer Studio。
该视图分为四个主要部分 - Project
“Project Explorer”(项目浏览器) 区域 - 用于管理构成工作区的每个项目
-- “Source Editor” (源编辑器)-- 提供
编辑器空间
并可按您的 喜好配置--
“Console Window”(控制台窗口)-- 针对自构建过程输出的原始消息
-- 以及“Problems Window” (问题窗口)-- 提供
构建过程发出的 所有错误、警告以及其他提示的
结构化展示。
现在,对于构建过程,
我们将首先将 实验练习一导入 CCS。
选择“Project”(项目)。
导入 CCS 项目。
浏览至含有 实验练习一
源代码的目录。
单击“Finish”(完成)。
您现在应在“Project Explorer” (项目浏览器)窗格中查看实验练习一
项目。
展开项目以 查看源文件。
下一步是 构建项目。
构建项目可 通过许多方式完成。
构建前, 让我们看一下
项目配置, 项目配置是
有关构建的设置。
右键单击项目 并选择“Properties”(属性)。
创建源代码 一直是为了处理
UCD 器件的 任何版本。
要选择将构建的 目标 UCD 器件,
单击“Manage Configurations”(管理配置)。
要使特定 器件活跃,
在状态列中 选择“Set Active”(设为有效)。
例如,如果您要 使 UCD3138128 游戏,
左键单击,然后单击 “Set Active”(设为有效)。
在本演示中,我们要 构建将会
下载至 UCD3138 的项目,所以将 UCD3138 设为
有效配置。
单击“OK”(确定)退出 “Properties”(属性)窗口。
要构建项目,右键单击“Project Explorer” (项目浏览器)区域中的项目,
然后选择 “Build Project”(构建项目)。
此操作将为 UCD3138 构建项目,
因为我们已将其 设为活动配置。
或者, 选择工具栏中
锤形图标旁的 向下箭头,
以构建四个 UCD 器件 中的任一个器件。
此处是展示原始 构建输出的控制台窗口。
这主要是 与项目中每个
文件的编译有关的 编译器消息。
在控制台底部, 注意
连接器消息, 以及 ARMHEX 消息,
指示 COFF 输出 文件转化为
Tektronix HEX 输出文件已完成。
如果存在构建 错误或警告,
这些也可以 通过单击控制台
窗口上方的 向上箭头键和
向下箭头键快速导航。
在 CCS 中构建 项目有意义的
唯一前提是 构建过程的输出
可在 UCD3138xxx 器件 自身中使用。
要查找将载入 器件 GUI 的输出文件,
浏览至含有 C 源文件的目录。
当为某个项目 设置配置后,
CCS 会创建与 配置名称同名的
文件夹。
例如,我们为 UCD3138 配置构建。
执行此操作会在 含有 C 源文件的
文件夹中创建 称作 UCD3138 的文件夹。
降序向下访问该目录 以查看输出文件。
由 UCD 器件 GUI 用于 UCD 器件编程的文件
带有扩展名 .x0。
在我们的案例中, 它称作 Lab_1_UCD3138.x0。
我现将简要介绍 实验练习一中
源代码内的 UCD 项目结构。
这是一个典型的 项目文件夹结构。
其设置使您可以 通过 Code Composer Studio 中的
单一项目 访问每个 UCD 版本的
标题和连接器 命令文件。
源文件位于 其自身的文件夹中。
该文件夹也 包含项目的一些
头文件。
我们一会将简要 查看主要源文件。
当项目在 含有源文件的
文件夹中 构建和放置时,
将生成输出文件。
每个 UCD 版本 有一个单独的
输出文件夹。
PMBus_common 包含 PMBus 处理程序例程
所需的文件,这对于 所有 UCD 版本都是相同的。
每个 UCD 器件 版本的头文件和
连接器命令 文件也放置
在该级别上。
当您在 CCS 中 选择特定的配置时,
CCS 创建过程 将配置为
给所选的 UCD 器件 选择正确的头文件
和连接器命令文件。
这些头文件和连接器 命令文件夹的
大部分内容 都不必更改,
因此,目前只需知道 它们的存在即可。
每个 UCD 器件的样片 标题和连接器命令文件
都由 TI 提供。
现在简要介绍一下 主要源文件。
在 CCS 中打开实验练习一项目。
main.c 包含 主程序函数。
一般而言,在 main.c 中会 调用一些初始化函数。
例如,在此例中, 代码调用 init_PMBus
以初始化 UCD 器件中的 PMBus 外设,
然后为 PMBus 处理 程序例程设置变量。
clear_integrity_word 这个函数
将清除编程 闪存校验和,
是决定器件是在 ROM 模式 还是在闪存模式下引导的关键。
我稍后将更详细地 解释这个函数,
以及 ROM 模式与 闪存模式的差异。
这是主循环。
您可以看到, 它是一个无限循环。
在主循环中,我们通常 放置常规处理例程。
即,时间对其 并非特别关键或
特别敏感的例程。
例如,PMBus 处理程序例程
总是置于此处。
一般使用静态 或全局变量
将这些例程 实施为状态机,
从而可以通过快速而标准的 中断服务例程将这些例程中断,
并可在中断 服务例程
执行完毕时, 即时无缝地
继续执行这些例程。
interrupts.c 包含快速 和标准中断服务
例程。
中断服务例程 现在是空的。
随着我们逐渐 完成实验练习,
我们将向它们添加代码。
外设的全局 变量定义
位于 cyclone_global_variable_defs.c 中。
例如,ADC 寄存器就在此处定义。
现在,我们将浏览 部分 include 文件和连接器
命令文件。
首先,简要看一下 连接器命令文件。
我们将看一下适用于 UCD3138 的 连接器命令文件。
UCD3138 系列 中的每个器件
都具有其自身的 连接器命令文件集。
目前只需知道 这些文件的存在即可。
您无需 修改它们。
Cyclone_headers.cmd 是 将 UCD 器件的外设结构
映射至内存的 连接器命令文件。
例如,LOOP_MUX、 UART 外设以及 ADC。
UCD 器件的 总体内存映射
都在 cyclone.cmd 中定义。
例如,我们将 D-闪存或者说数据闪存的
起始地址定义为 十六进制 18800,并且长度是
以十六进制表示的 800 字节。
Load_UCD3138.asm 含有 适用于 UCD3138 器件的
自定义系统 和变量初始化。
UCD3138 系列 中的每个器件
都有其自身的 load.asm 文件。
Load.asm 还包含 中断和复位矢量。
相应 load.asm 文件的纳入
取决于您在 Code Composer Studio 中 构建的代码是针对哪种 UCD
器件。
例如,如果您针对 UCD 3138064 器件构建代码,
则项目中将包括 load_UCD3138064.asm。
该代码的开销 必须低,
因此以汇编语言 编写该代码。
您无需 修改此代码,
因此现在无需 更为详尽地学习该代码。
现在,简要看一下 头文件。
我们将看一下适用于 UCD3138 的头文件。
UCD3138 系列 中的每个器件
都具有其自身的头文件集。
目前只需知道 这些文件的存在即可。
您无需 修改它们。
UCD3138a64_headerfiles 文件夹中的这些文件
包含 UCD3138a64 器件的头文件。
这些特殊的文件包含 外设的结构
文件。
Cyclone_device.h 是一个 含有所有其他
外设头文件的 头文件。
我们稍后将更为详细地 展示这些结构体的
用法。
简而言之,它们使我们能够 使用一次读取-修改-写入操作
设置或清除 寄存器中的单个位。
与使用单个常量编写的 单个寄存器相比,
它们在时间和代码 空间方面相对低效。
最佳方法是在开发中 使用这些结构体,
然后在稍后需要优化代码时, 切换至常量。
现在,简要看一下 实验练习一的代码。
它非常简单。
它只不过将一个字符串 变量设为“Hello World”。
在实验练习一,我们创建了一个称作 a_string 的 字符串变量,
该变量在 variables.h 中定义。
如果我们回到 main.c,我们会将
a_string 的值设为“Hello World”。
当我们 使用 UCD GUI
将该程序下载 至 UCD 编程闪存后,
我们将能够使用 UCD GUI 读取 a_string 的内容,
并验证其内容 是否真的是“Hello World”。
现在,我将展示如何 使用 UCD 器件 GUI
在 UCD 器件中 下载固件和访问内存变量。
在打开 GUI 之前, 将 USB 适配器线缆上的
USB 端插入计算机上的 USB 端口, 将其他 GPIO 端插入
开环评估板上的 PMBus 接头。
您应看到在 板左下角
LED 灯闪烁。
这指示 电路板已关闭
USB 至 PMBus 适配器的供电。
如果 LED 未亮起,
则您将需要在 PMBus 接头 附近的电路板右上方
插入跳线。
请参阅有关 评估板的文档,
以了解需要 插入的跳线。
默认情况下, 当您收到板时,
这些跳线应已插入。
作为 GUI 安装的 一部分,
在桌面上可能有 多达三个图标。
双击 UCD3xxx 和 UCD9xxx 器件
图标以启动 GUI。
在主要器件 GUI 窗口中,您将
看到三个窗格 - “Status”(状态)窗格,
显示与 USB 至 PMBus 适配器相连的器件的
状态;“Tools”(工具)窗格, 包含我们将
用于器件编程和 器件调试的工具;
以及“Log”(日志) 窗格,
在 UCD 器件收发PMBus 命令 过程中记录这些命令。
现在,我们来看一下与 PMBus 适配器相连的器件。
单击“Scan for Device in ROM Mode” (ROM 模式下扫描器件)。
这将通过 PMBus 接口 发送命令。
如果存在与 PMBus 相连的有效器件,
且器件处于 ROM 模式, 则 UCD 器件
将响应 PMBus 命令,
且 GUI 将检测 和解析响应,
以告诉用户 所连接的 UCD 器件
类型。
例如,UCD3138 或 UCD3138064。
稍后,我将更为详细地 讨论 ROM 和闪存模式。
如果尚未 对该器件编程,
它应处于 ROM 模式,且您 将在 GUI 的状态窗格中
看到以下消息。
您将看到目标 器件、ROM 信息
以及封装 ID。
在“Log”(日志)窗格中,您将 看到 PMBus 命令
并且应看到 以绿色突显的命令,
指示已在 ROM 模式 下找到 UCD 器件。
要对将载入器件的 固件编程,
在“Tools”(工具)窗口中 选择“Flash”(闪存)选项卡,
然后单击 固件下载链接。
固件下载 窗口将打开。
要选择将下载至 UCD 器件的固件,
单击“Select File”(选择文件) 按钮并
浏览至含有实验练习一的 .x0 文件的目录。
在我们的案例中, 它称作 Lab_1_UCD_3138.x0。
单击“Open”(打开)。
此时, 非常重要的是
选择“Radio”(无线电)按钮。
请勿写入程序校验和。
始终处于 ROM。
我稍后将更详细地 解释为何这很重要,
但是目前只需知道, 选定该选项后
对 UCD 器件编程 会使这些实验的
持续调试 更简单。
单击“Download”(下载)。
此时将出现弹出消息。
选择“Don't show this message again” (不再显示该消息)和“Yes”(是)。
此时将开始下载。
监控进度条 并查看 PMBus 日志窗口,
以了解更多 下载详细信息。
在“Log”(日志)窗格中,您应看到 消息 - “Download completed
without errors”(下载完成,没有错误)- 以绿色突显,
指示下载成功。
您现在可以关闭 固件下载窗口。
我们现将使用 内存调试器来访问
和修改在我们刚才 对其编程的 UCD 器件上的内存,
例如 RAM 变量。
在调用内存 调试器之前,
检查“Command ROM to execute program” (命令 ROM 执行程序)是否呈灰显。
如未呈灰显,则单击该链接。
该链接将发送 PMBus 命令至 UCD 器件,
UCD 器件中的 ROM 代码将解析这些命令,
以指示处理器 开始执行您刚才
为对程序存储器 编程而下载的代码。
如果这已灰显,我们刚才下载至 编程闪存的代码已执行,
下载至编程闪存的 代码已在执行,
这正是我们 所期待的。
如未呈灰显, 单击该链接。
以开始执行 代码和编程闪存。
此外,检查器件 ID 链接。
如呈灰显, 则需要单击该链接。
这将通过 PMBus 接口 发送至运行中的固件,
并检查 UCD 器件的 相应响应。
它使 GUI 了解 已下载至编程闪存的
固件是否正在 执行 PMBus 处理程序
例程,我们在后面 将更为详细地讨论例程。
当正在执行编程闪存 中的代码时,
GUI 需要 这些例程
才能继续与 器件通信。
在“Tools”(工具)窗口中, 选择调试选项卡。
单击内存 调试器链接
以打开内存调试器。
当您第一次 使用该工具时,
它会提示您 输入密码。
在弹出窗口中 键入 f-o-r-e-s-t-l-n,
全部小写。
程序不会再次 提示您输入该密码。
单击“OK”(确定)。
要为程序中 使用的变量
加载内存映射, 依次在内存调试器中选择“File”(文件)、
“Change Map”(更改映射)。
当出现更改 映射对话框时,
选择含有您的项目的 映射和 PP 文件的
文件夹。
这与含有 Tektronix.x0 文件的文件夹
为同一文件夹, 我们在下载固件时
将导航至该文件夹。
单击“OK”(确定)。
加载相应的 映射文件将使
内存调试器能够显示 变量、寄存器以及
关联的调试字段。
对于实验练习一,我们已 使用 C 代码将称作 a_string 的
字符阵列设为“Hello World”。
选择刷新列中的 “Refresh”(刷新)按钮
更新变量。
单击名称列中的 加号可展开变量,
且您可以查看 变量阵列的元素。
“Hello World”会按顺序逐字节 以十六进制形式
显示。
48 是大写 H 的 十六进制表示法,
65 是大写 E 的 十六进制表示法,依此类推。
现在,我将简要概述 在写入编程闪存时
UCD3138 中的 引导 BOM 程序
以及校验和的放置。
这些校验和提供了 一种在允许 ARM 内核
执行编程闪存 中的代码前
让引导 ROM 检查编程闪存
完整性的方法。
这是 UCD3138 中 32 KB 编程闪存
图示。
引导程序可 置于编程闪存的
前两个 KB 中。
如果编程闪存的 前 2 KB
用于引导程序, 则该 2 KB 块的最后 4 个字节
将保留 用于
4 字节的校验和。
该校验和的 计算方式是
将前 2 KB 编程 闪存上
每字节编程 闪存的内容相加。
如果无需 引导程序,
则将保留编程闪存的 最后 4 个字节
供另一 4 个字节的校验和使用,
其计算是通过在 整个 32 KB 范围内
将编程闪存的 各字节内容相加
得出的。
在加电或复位后, 引导运行例程
将在两个位置 验证校验和,
并根据结果, 决定是
始终处于 ROM 模式,还是开始 执行编程闪存中的
代码。
这就是我们所说的闪存模式。
校验和提供了 一种在执行
编程闪存中的代码前 检查编程闪存中的
内容是否 完整的方法。
从用户角度来看, 我们在写入
编程闪存时, 纳入或排除了
这些校验和。
排除校验和会强制 器件在加电复位后
仍始终处于 ROM 模式。
纳入校验和会强制 器件在加电复位后
在闪存模式下运行,当然,前提是 编程闪存未
损坏。
我现将展示 UCD3138 上 有关引导 ROM 程序的
程序流程简图。
请注意,该 引导 ROM 例程
与 UCD 的 3138 系列产品的其他成员
略有不同。
请参阅 各种程序员
手册以了解确切详情, 但是基本上,我将讨论的原则
与整个 UCD 3138 系列均有关。
加电或复位后, 引导 ROM 程序
将初始化一些外设。
然后,它计算编程闪存 前两个 KB 的校验和,
这可用于 存储引导程序,
以及将最新 计算的校验和
与在该 2 KB 编程 闪存块的最后 4 个字节
中存储的值 进行比较。
如果校验和的值 相符,引导 ROM 例程
会强制 ARM 内核 开始执行编程闪存中的代码,
从而它从 ROM 模式 转变为闪存模式。
如果校验和的 值不相符,
则引导 ROM 程序会 计算整个 32 KB 编程
闪存的校验和。
然后,它会将此最新 计算所得的校验和
与该 32 KB 编程闪存的 最后 4 个字节中存储的值
进行比较。
如果校验和的值相符, 它会开始执行
编程闪存中的代码, 从而它从 ROM 模式转变
为闪存模式。
如果校验和的 值不相符,
它将跳至 PMBus 处理程序例程。
该例程不断 通过 PMBus 接口
拉取从诸如 UCD 器件 GUI 等主要工具
发来的有效 PMBus 命令。
这些 PMBus 命令可 用于读取、写入和擦除
程序和数据闪存。
此外,还有 命令可执行
编程闪存中的代码。
使用此命令, 我们可以在 ROM 模式下
执行编程闪存 中的代码,
而无需在对器件编程时, 写入两种校验和中的
任一种。
我们不建议编写这两种 校验和中的任一种
以及在代码开发期间 使用该命令,
因为它将确保该闪存 不会变为锁定状态。
现在,我将演示 闪存可以
如何变为锁定状态, 这表示无法再将其
擦除和对其重新编程。
这是主程序中 代码的简单图示。
这是将写入 编程闪存的代码。
此时,假设已对一个 或全部两个校验和
编程,从而引导 ROM 例程将指示
ARM 内核在加电或 复位后执行闪存中的
代码。
一般而言,我们在 主程序开头
设有初始化函数, 然后是主循环。
在主循环内部,我们 始终调用 PMBus 处理程序
例程,从而我们可以 通过 PMBus 接口
擦除闪存并对其重新编程。
一切运行正常, 每次经过主循环时,
均会调用 PMBus 处理程序例程。
但是,当程序中 有妨碍到达
主循环的错误时, 应当如何应对?
这意味着将永不调用 PMBus 处理程序例程,
从而防止 我们访问和擦除闪存
以及对闪存重新编程。
因此,编程闪存 变为已锁定
且永不能对 该部分重新编程。
所以,我们建议将后门 置于主程序的开头
以规避该问题。
clear_integrity_word 将清除 该编程闪存校验和。
您应在处于 闲置状态的
输入引脚上依情况 调用 clear_integrity_word。
将其就置于 主程序开头可最大限度
降低因错误 导致 clear_integrity_word
在需要执行时 无法执行的发生概率。
所以,如果有 错误阻碍
主循环中的 PMBus 处理程序例程
执行, 您可以
更改输入引脚的状态, 复位器件,
当编程 闪存中的代码执行时,
将即时调用 clear_integrity_word,
它将清除校验和。
然后,在复位时, 引导 ROM 代码
不会跳至编程 闪存,因为启动时
执行的校验和将失败, 但是仍将处于 ROM 模式
并执行 PMBus 处理程序例程。
从此以后,您可以擦除 并重新写入编程闪存。
函数 clear_integrity_word
会清除编程 闪存校验和,
从而它会清除编程 闪存 4 或 8 字节的内容。
擦除或写入闪存 要求该器件
处于特权模式。
为将器件置于 特权模式,
我们采用了软件的 中断机制。
软件中断不是 常规意义上的中断。
软件中断的 发起是由软件的
顺序执行 和调用
特定函数 实现的。
对软件中断 函数的调用
看上去与对任何其他 标准函数的调用别无二致。
使函数基于 软件中断
会强制 ARM 以 特权模式运行。
在特权模式下, 软件
可启用或禁用 中断,操纵程序
和数据闪存 内容及其他。
当 ARM 处于用户模式下时, 这些功能
全都不允许使用。
在 UCD3138 数字 系统程序员手册中,
您可以阅读有关 软件中断机制的更多内容。
在此演示中, 我将概述一下在开始 UCD3138 系列 电源控制器 上进行开发时 所需的 工具和硬件。 要对 UCD3138 系列上 基于闪存的存储器编程, 我们需要安装两个 TI 专属工具。 TI 可免费提供 这两款工具。 第一款工具称作 Code Composer Studio。 这是集成 开发环境, 其中 C - 源代码 - 可编辑、编译、汇编 以及链接。 第二款工具称作 UCD 器件 GUI。 此工具直接 与 UCD 器件 通信并配置 其基于闪存的 程序存储器。 它将 Code Composer Studio 的输出作为输入。 UCD 的基于 闪存的程序存储器 是通过 PMBus 接口 配置的。 PMBus 是电源管理 总线的简称。 我们在后续阶段将更为 详细地讨论该标准。 必须具有 USB 至 PMBus 硬件适配器, 以便 UCD 器件 GUI 可以与 UCD 器件通信。 请注意,UCD 31xx 系列上的 闪存还支持 通过各类 其他接口编程, 例如 SPI、I2C、 UART 以及 JTAG。 为简洁起见,我们 在这些教程中 将仅着重于 PMBus。 我现在介绍一下 Code Composer Studio 这款工具。 这是基于 Eclipse 的 集成开发 环境。 它支持所有 德州仪器 (TI) 微控制器 和嵌入式 处理器产品组合。 它包含 C 和 C++ 编译器、汇编器 以及连接器,即一款完全 集成的 CodeWright 编辑器, 以及具有多项目支持的 集成可视化工程 管理器。 我们很快将讨论 Code Composer Studio 的安装, 并且我们将向您展示 如何开始使用该工具。 有关更多信息,请导航至 www.ti.com/ccs。 我们强烈建议安装 CCS 6.1 版或更高版本, 以获得最新 支持和功能。 我们将使用的第二款 工具称作 UCD 器件 GUI。 它包含功能 更全面的 数字电源 设计器的功能子集, 并且可为工具集的 一部分使用。 它主要用于 将程序下载 至 UCD 上基于闪存的存储器, 控制程序执行, 并使用 PMBus 命令 访问和修改存储器的内容。 在此演示中, 稍后将展示 安装演示。 有关更多信息, 请导航至所示链接。 现在,简单概述从 C 源文件 到编程 UCD 器件的 代码开 发流程。 在 Code Composer Studio 中,程序会将 C 或 C++ 源文件 传入并经过 C 编译器 以进行解析和优化。 该过程的输出是 一组汇编源文件。 然后,程序会将这些 汇编源文件 传入并经过汇编器 以创建一个目标文件集。 然后,程序将该目标文件集 传入并经过连接器, 以创建可执行的 . out 文件。 然后,程序将该输出文件传入并经过 ARMHEX 工具, 以创建 UCD 器件 GUI 可读取的 .x0 文件。 该系列步骤 可能显得比较复杂, 但在 Code Composer Studio 内 构建 C 或 C++ 空间项目时, 整个流程 会自动执行。 因此,该过程 将全部对用户隐藏。 德州仪器 (TI) 提供 具有相应设置的 示例项目, 从而您能够 快速开始开发。 在通过 USB 至 PMBus 硬件 适配器 对 UCD 器件编程时, UCD 器件 GUI 会读取 CCS 构建过程的输出, 即 Tektronix .x0 文件。 要完成这些实验, 还需要某些硬件。 需要一块 开环测试板。 TI提供了三块 测试版,且它们 根据您使用的 UCD 器件和引脚计数 而不同。 从 TI 网站或 大多数分销商处 可直接订购这些板。 德州仪器 TI.com.cn 还提供 文档和示意图。 还需要一个 USB 至 GPIO 适配器 以使用 GUI 经由 PMBus 接口 与 UCD 器件通信。 有关订购信息, 请访问所示链接。 此外,还值得下载 三本主要的程序员 手册 - 监控与 通信程序员手册、 数字电源外设 程序员手册, 以及 ARM 和数字 系统程序员手册。 您可能还希望下载 有关衍生器件的 程序员手册。 现在,我将展示如何 下载和安装 Code Composer Studio。 TI 免费提供这款称作 Code Composer Studio 工具,您将用其 编写 C 源代码 - 这些代码将被编译、 汇编并最终下载至 您的目标 UCD 器件。 要获得该工具, 请在 Internet 浏览器中导航至 www.ti.com/ccs。 向下滚动并单击 下载按钮 以下载最新版 Windows 或 Linux。 如果您还未建立 myTI 帐户, 请建立帐户。 如果您有 myTI 帐户,请使用您的 登录信息登录。 按照安装 说明操作。 您将收到含有 CCS 软件下载 链接的电子邮件。 继续按照安装 说明操作。 当程序提示您选择产品系列时, 确保选择“UCD Digital Power Controllers” (UCS 数字电源控制器)。 选择要安装的 调试探针, 例如 JTAG 调试探针 和开发板的驱动程序, 然后单击“Finish”(完成)。 现在,我将展示如何 下载和安装 UCD 器件 GUI。 在 Internet 浏览器中,访问 www.ti.com/tool/fusion digital power designer。 选择下载最新版本, 然后按照 安装说明操作。 当程序提示您安装其他 工具时,确保安装 UCD 3xxx UCD 9xxx 器件 GUI。 单击“Finish”(完成)。 我现将展示如何 开始使用 Code Composer Studio。 此处是编辑视图下的 Code Composer Studio。 该视图分为四个主要部分 - Project “Project Explorer”(项目浏览器) 区域 - 用于管理构成工作区的每个项目 -- “Source Editor” (源编辑器)-- 提供 编辑器空间 并可按您的 喜好配置-- “Console Window”(控制台窗口)-- 针对自构建过程输出的原始消息 -- 以及“Problems Window” (问题窗口)-- 提供 构建过程发出的 所有错误、警告以及其他提示的 结构化展示。 现在,对于构建过程, 我们将首先将 实验练习一导入 CCS。 选择“Project”(项目)。 导入 CCS 项目。 浏览至含有 实验练习一 源代码的目录。 单击“Finish”(完成)。 您现在应在“Project Explorer” (项目浏览器)窗格中查看实验练习一 项目。 展开项目以 查看源文件。 下一步是 构建项目。 构建项目可 通过许多方式完成。 构建前, 让我们看一下 项目配置, 项目配置是 有关构建的设置。 右键单击项目 并选择“Properties”(属性)。 创建源代码 一直是为了处理 UCD 器件的 任何版本。 要选择将构建的 目标 UCD 器件, 单击“Manage Configurations”(管理配置)。 要使特定 器件活跃, 在状态列中 选择“Set Active”(设为有效)。 例如,如果您要 使 UCD3138128 游戏, 左键单击,然后单击 “Set Active”(设为有效)。 在本演示中,我们要 构建将会 下载至 UCD3138 的项目,所以将 UCD3138 设为 有效配置。 单击“OK”(确定)退出 “Properties”(属性)窗口。 要构建项目,右键单击“Project Explorer” (项目浏览器)区域中的项目, 然后选择 “Build Project”(构建项目)。 此操作将为 UCD3138 构建项目, 因为我们已将其 设为活动配置。 或者, 选择工具栏中 锤形图标旁的 向下箭头, 以构建四个 UCD 器件 中的任一个器件。 此处是展示原始 构建输出的控制台窗口。 这主要是 与项目中每个 文件的编译有关的 编译器消息。 在控制台底部, 注意 连接器消息, 以及 ARMHEX 消息, 指示 COFF 输出 文件转化为 Tektronix HEX 输出文件已完成。 如果存在构建 错误或警告, 这些也可以 通过单击控制台 窗口上方的 向上箭头键和 向下箭头键快速导航。 在 CCS 中构建 项目有意义的 唯一前提是 构建过程的输出 可在 UCD3138xxx 器件 自身中使用。 要查找将载入 器件 GUI 的输出文件, 浏览至含有 C 源文件的目录。 当为某个项目 设置配置后, CCS 会创建与 配置名称同名的 文件夹。 例如,我们为 UCD3138 配置构建。 执行此操作会在 含有 C 源文件的 文件夹中创建 称作 UCD3138 的文件夹。 降序向下访问该目录 以查看输出文件。 由 UCD 器件 GUI 用于 UCD 器件编程的文件 带有扩展名 .x0。 在我们的案例中, 它称作 Lab_1_UCD3138.x0。 我现将简要介绍 实验练习一中 源代码内的 UCD 项目结构。 这是一个典型的 项目文件夹结构。 其设置使您可以 通过 Code Composer Studio 中的 单一项目 访问每个 UCD 版本的 标题和连接器 命令文件。 源文件位于 其自身的文件夹中。 该文件夹也 包含项目的一些 头文件。 我们一会将简要 查看主要源文件。 当项目在 含有源文件的 文件夹中 构建和放置时, 将生成输出文件。 每个 UCD 版本 有一个单独的 输出文件夹。 PMBus_common 包含 PMBus 处理程序例程 所需的文件,这对于 所有 UCD 版本都是相同的。 每个 UCD 器件 版本的头文件和 连接器命令 文件也放置 在该级别上。 当您在 CCS 中 选择特定的配置时, CCS 创建过程 将配置为 给所选的 UCD 器件 选择正确的头文件 和连接器命令文件。 这些头文件和连接器 命令文件夹的 大部分内容 都不必更改, 因此,目前只需知道 它们的存在即可。 每个 UCD 器件的样片 标题和连接器命令文件 都由 TI 提供。 现在简要介绍一下 主要源文件。 在 CCS 中打开实验练习一项目。 main.c 包含 主程序函数。 一般而言,在 main.c 中会 调用一些初始化函数。 例如,在此例中, 代码调用 init_PMBus 以初始化 UCD 器件中的 PMBus 外设, 然后为 PMBus 处理 程序例程设置变量。 clear_integrity_word 这个函数 将清除编程 闪存校验和, 是决定器件是在 ROM 模式 还是在闪存模式下引导的关键。 我稍后将更详细地 解释这个函数, 以及 ROM 模式与 闪存模式的差异。 这是主循环。 您可以看到, 它是一个无限循环。 在主循环中,我们通常 放置常规处理例程。 即,时间对其 并非特别关键或 特别敏感的例程。 例如,PMBus 处理程序例程 总是置于此处。 一般使用静态 或全局变量 将这些例程 实施为状态机, 从而可以通过快速而标准的 中断服务例程将这些例程中断, 并可在中断 服务例程 执行完毕时, 即时无缝地 继续执行这些例程。 interrupts.c 包含快速 和标准中断服务 例程。 中断服务例程 现在是空的。 随着我们逐渐 完成实验练习, 我们将向它们添加代码。 外设的全局 变量定义 位于 cyclone_global_variable_defs.c 中。 例如,ADC 寄存器就在此处定义。 现在,我们将浏览 部分 include 文件和连接器 命令文件。 首先,简要看一下 连接器命令文件。 我们将看一下适用于 UCD3138 的 连接器命令文件。 UCD3138 系列 中的每个器件 都具有其自身的 连接器命令文件集。 目前只需知道 这些文件的存在即可。 您无需 修改它们。 Cyclone_headers.cmd 是 将 UCD 器件的外设结构 映射至内存的 连接器命令文件。 例如,LOOP_MUX、 UART 外设以及 ADC。 UCD 器件的 总体内存映射 都在 cyclone.cmd 中定义。 例如,我们将 D-闪存或者说数据闪存的 起始地址定义为 十六进制 18800,并且长度是 以十六进制表示的 800 字节。 Load_UCD3138.asm 含有 适用于 UCD3138 器件的 自定义系统 和变量初始化。 UCD3138 系列 中的每个器件 都有其自身的 load.asm 文件。 Load.asm 还包含 中断和复位矢量。 相应 load.asm 文件的纳入 取决于您在 Code Composer Studio 中 构建的代码是针对哪种 UCD 器件。 例如,如果您针对 UCD 3138064 器件构建代码, 则项目中将包括 load_UCD3138064.asm。 该代码的开销 必须低, 因此以汇编语言 编写该代码。 您无需 修改此代码, 因此现在无需 更为详尽地学习该代码。 现在,简要看一下 头文件。 我们将看一下适用于 UCD3138 的头文件。 UCD3138 系列 中的每个器件 都具有其自身的头文件集。 目前只需知道 这些文件的存在即可。 您无需 修改它们。 UCD3138a64_headerfiles 文件夹中的这些文件 包含 UCD3138a64 器件的头文件。 这些特殊的文件包含 外设的结构 文件。 Cyclone_device.h 是一个 含有所有其他 外设头文件的 头文件。 我们稍后将更为详细地 展示这些结构体的 用法。 简而言之,它们使我们能够 使用一次读取-修改-写入操作 设置或清除 寄存器中的单个位。 与使用单个常量编写的 单个寄存器相比, 它们在时间和代码 空间方面相对低效。 最佳方法是在开发中 使用这些结构体, 然后在稍后需要优化代码时, 切换至常量。 现在,简要看一下 实验练习一的代码。 它非常简单。 它只不过将一个字符串 变量设为“Hello World”。 在实验练习一,我们创建了一个称作 a_string 的 字符串变量, 该变量在 variables.h 中定义。 如果我们回到 main.c,我们会将 a_string 的值设为“Hello World”。 当我们 使用 UCD GUI 将该程序下载 至 UCD 编程闪存后, 我们将能够使用 UCD GUI 读取 a_string 的内容, 并验证其内容 是否真的是“Hello World”。 现在,我将展示如何 使用 UCD 器件 GUI 在 UCD 器件中 下载固件和访问内存变量。 在打开 GUI 之前, 将 USB 适配器线缆上的 USB 端插入计算机上的 USB 端口, 将其他 GPIO 端插入 开环评估板上的 PMBus 接头。 您应看到在 板左下角 LED 灯闪烁。 这指示 电路板已关闭 USB 至 PMBus 适配器的供电。 如果 LED 未亮起, 则您将需要在 PMBus 接头 附近的电路板右上方 插入跳线。 请参阅有关 评估板的文档, 以了解需要 插入的跳线。 默认情况下, 当您收到板时, 这些跳线应已插入。 作为 GUI 安装的 一部分, 在桌面上可能有 多达三个图标。 双击 UCD3xxx 和 UCD9xxx 器件 图标以启动 GUI。 在主要器件 GUI 窗口中,您将 看到三个窗格 - “Status”(状态)窗格, 显示与 USB 至 PMBus 适配器相连的器件的 状态;“Tools”(工具)窗格, 包含我们将 用于器件编程和 器件调试的工具; 以及“Log”(日志) 窗格, 在 UCD 器件收发PMBus 命令 过程中记录这些命令。 现在,我们来看一下与 PMBus 适配器相连的器件。 单击“Scan for Device in ROM Mode” (ROM 模式下扫描器件)。 这将通过 PMBus 接口 发送命令。 如果存在与 PMBus 相连的有效器件, 且器件处于 ROM 模式, 则 UCD 器件 将响应 PMBus 命令, 且 GUI 将检测 和解析响应, 以告诉用户 所连接的 UCD 器件 类型。 例如,UCD3138 或 UCD3138064。 稍后,我将更为详细地 讨论 ROM 和闪存模式。 如果尚未 对该器件编程, 它应处于 ROM 模式,且您 将在 GUI 的状态窗格中 看到以下消息。 您将看到目标 器件、ROM 信息 以及封装 ID。 在“Log”(日志)窗格中,您将 看到 PMBus 命令 并且应看到 以绿色突显的命令, 指示已在 ROM 模式 下找到 UCD 器件。 要对将载入器件的 固件编程, 在“Tools”(工具)窗口中 选择“Flash”(闪存)选项卡, 然后单击 固件下载链接。 固件下载 窗口将打开。 要选择将下载至 UCD 器件的固件, 单击“Select File”(选择文件) 按钮并 浏览至含有实验练习一的 .x0 文件的目录。 在我们的案例中, 它称作 Lab_1_UCD_3138.x0。 单击“Open”(打开)。 此时, 非常重要的是 选择“Radio”(无线电)按钮。 请勿写入程序校验和。 始终处于 ROM。 我稍后将更详细地 解释为何这很重要, 但是目前只需知道, 选定该选项后 对 UCD 器件编程 会使这些实验的 持续调试 更简单。 单击“Download”(下载)。 此时将出现弹出消息。 选择“Don't show this message again” (不再显示该消息)和“Yes”(是)。 此时将开始下载。 监控进度条 并查看 PMBus 日志窗口, 以了解更多 下载详细信息。 在“Log”(日志)窗格中,您应看到 消息 - “Download completed without errors”(下载完成,没有错误)- 以绿色突显, 指示下载成功。 您现在可以关闭 固件下载窗口。 我们现将使用 内存调试器来访问 和修改在我们刚才 对其编程的 UCD 器件上的内存, 例如 RAM 变量。 在调用内存 调试器之前, 检查“Command ROM to execute program” (命令 ROM 执行程序)是否呈灰显。 如未呈灰显,则单击该链接。 该链接将发送 PMBus 命令至 UCD 器件, UCD 器件中的 ROM 代码将解析这些命令, 以指示处理器 开始执行您刚才 为对程序存储器 编程而下载的代码。 如果这已灰显,我们刚才下载至 编程闪存的代码已执行, 下载至编程闪存的 代码已在执行, 这正是我们 所期待的。 如未呈灰显, 单击该链接。 以开始执行 代码和编程闪存。 此外,检查器件 ID 链接。 如呈灰显, 则需要单击该链接。 这将通过 PMBus 接口 发送至运行中的固件, 并检查 UCD 器件的 相应响应。 它使 GUI 了解 已下载至编程闪存的 固件是否正在 执行 PMBus 处理程序 例程,我们在后面 将更为详细地讨论例程。 当正在执行编程闪存 中的代码时, GUI 需要 这些例程 才能继续与 器件通信。 在“Tools”(工具)窗口中, 选择调试选项卡。 单击内存 调试器链接 以打开内存调试器。 当您第一次 使用该工具时, 它会提示您 输入密码。 在弹出窗口中 键入 f-o-r-e-s-t-l-n, 全部小写。 程序不会再次 提示您输入该密码。 单击“OK”(确定)。 要为程序中 使用的变量 加载内存映射, 依次在内存调试器中选择“File”(文件)、 “Change Map”(更改映射)。 当出现更改 映射对话框时, 选择含有您的项目的 映射和 PP 文件的 文件夹。 这与含有 Tektronix.x0 文件的文件夹 为同一文件夹, 我们在下载固件时 将导航至该文件夹。 单击“OK”(确定)。 加载相应的 映射文件将使 内存调试器能够显示 变量、寄存器以及 关联的调试字段。 对于实验练习一,我们已 使用 C 代码将称作 a_string 的 字符阵列设为“Hello World”。 选择刷新列中的 “Refresh”(刷新)按钮 更新变量。 单击名称列中的 加号可展开变量, 且您可以查看 变量阵列的元素。 “Hello World”会按顺序逐字节 以十六进制形式 显示。 48 是大写 H 的 十六进制表示法, 65 是大写 E 的 十六进制表示法,依此类推。 现在,我将简要概述 在写入编程闪存时 UCD3138 中的 引导 BOM 程序 以及校验和的放置。 这些校验和提供了 一种在允许 ARM 内核 执行编程闪存 中的代码前 让引导 ROM 检查编程闪存 完整性的方法。 这是 UCD3138 中 32 KB 编程闪存 图示。 引导程序可 置于编程闪存的 前两个 KB 中。 如果编程闪存的 前 2 KB 用于引导程序, 则该 2 KB 块的最后 4 个字节 将保留 用于 4 字节的校验和。 该校验和的 计算方式是 将前 2 KB 编程 闪存上 每字节编程 闪存的内容相加。 如果无需 引导程序, 则将保留编程闪存的 最后 4 个字节 供另一 4 个字节的校验和使用, 其计算是通过在 整个 32 KB 范围内 将编程闪存的 各字节内容相加 得出的。 在加电或复位后, 引导运行例程 将在两个位置 验证校验和, 并根据结果, 决定是 始终处于 ROM 模式,还是开始 执行编程闪存中的 代码。 这就是我们所说的闪存模式。 校验和提供了 一种在执行 编程闪存中的代码前 检查编程闪存中的 内容是否 完整的方法。 从用户角度来看, 我们在写入 编程闪存时, 纳入或排除了 这些校验和。 排除校验和会强制 器件在加电复位后 仍始终处于 ROM 模式。 纳入校验和会强制 器件在加电复位后 在闪存模式下运行,当然,前提是 编程闪存未 损坏。 我现将展示 UCD3138 上 有关引导 ROM 程序的 程序流程简图。 请注意,该 引导 ROM 例程 与 UCD 的 3138 系列产品的其他成员 略有不同。 请参阅 各种程序员 手册以了解确切详情, 但是基本上,我将讨论的原则 与整个 UCD 3138 系列均有关。 加电或复位后, 引导 ROM 程序 将初始化一些外设。 然后,它计算编程闪存 前两个 KB 的校验和, 这可用于 存储引导程序, 以及将最新 计算的校验和 与在该 2 KB 编程 闪存块的最后 4 个字节 中存储的值 进行比较。 如果校验和的值 相符,引导 ROM 例程 会强制 ARM 内核 开始执行编程闪存中的代码, 从而它从 ROM 模式 转变为闪存模式。 如果校验和的 值不相符, 则引导 ROM 程序会 计算整个 32 KB 编程 闪存的校验和。 然后,它会将此最新 计算所得的校验和 与该 32 KB 编程闪存的 最后 4 个字节中存储的值 进行比较。 如果校验和的值相符, 它会开始执行 编程闪存中的代码, 从而它从 ROM 模式转变 为闪存模式。 如果校验和的 值不相符, 它将跳至 PMBus 处理程序例程。 该例程不断 通过 PMBus 接口 拉取从诸如 UCD 器件 GUI 等主要工具 发来的有效 PMBus 命令。 这些 PMBus 命令可 用于读取、写入和擦除 程序和数据闪存。 此外,还有 命令可执行 编程闪存中的代码。 使用此命令, 我们可以在 ROM 模式下 执行编程闪存 中的代码, 而无需在对器件编程时, 写入两种校验和中的 任一种。 我们不建议编写这两种 校验和中的任一种 以及在代码开发期间 使用该命令, 因为它将确保该闪存 不会变为锁定状态。 现在,我将演示 闪存可以 如何变为锁定状态, 这表示无法再将其 擦除和对其重新编程。 这是主程序中 代码的简单图示。 这是将写入 编程闪存的代码。 此时,假设已对一个 或全部两个校验和 编程,从而引导 ROM 例程将指示 ARM 内核在加电或 复位后执行闪存中的 代码。 一般而言,我们在 主程序开头 设有初始化函数, 然后是主循环。 在主循环内部,我们 始终调用 PMBus 处理程序 例程,从而我们可以 通过 PMBus 接口 擦除闪存并对其重新编程。 一切运行正常, 每次经过主循环时, 均会调用 PMBus 处理程序例程。 但是,当程序中 有妨碍到达 主循环的错误时, 应当如何应对? 这意味着将永不调用 PMBus 处理程序例程, 从而防止 我们访问和擦除闪存 以及对闪存重新编程。 因此,编程闪存 变为已锁定 且永不能对 该部分重新编程。 所以,我们建议将后门 置于主程序的开头 以规避该问题。 clear_integrity_word 将清除 该编程闪存校验和。 您应在处于 闲置状态的 输入引脚上依情况 调用 clear_integrity_word。 将其就置于 主程序开头可最大限度 降低因错误 导致 clear_integrity_word 在需要执行时 无法执行的发生概率。 所以,如果有 错误阻碍 主循环中的 PMBus 处理程序例程 执行, 您可以 更改输入引脚的状态, 复位器件, 当编程 闪存中的代码执行时, 将即时调用 clear_integrity_word, 它将清除校验和。 然后,在复位时, 引导 ROM 代码 不会跳至编程 闪存,因为启动时 执行的校验和将失败, 但是仍将处于 ROM 模式 并执行 PMBus 处理程序例程。 从此以后,您可以擦除 并重新写入编程闪存。 函数 clear_integrity_word 会清除编程 闪存校验和, 从而它会清除编程 闪存 4 或 8 字节的内容。 擦除或写入闪存 要求该器件 处于特权模式。 为将器件置于 特权模式, 我们采用了软件的 中断机制。 软件中断不是 常规意义上的中断。 软件中断的 发起是由软件的 顺序执行 和调用 特定函数 实现的。 对软件中断 函数的调用 看上去与对任何其他 标准函数的调用别无二致。 使函数基于 软件中断 会强制 ARM 以 特权模式运行。 在特权模式下, 软件 可启用或禁用 中断,操纵程序 和数据闪存 内容及其他。 当 ARM 处于用户模式下时, 这些功能 全都不允许使用。 在 UCD3138 数字 系统程序员手册中, 您可以阅读有关 软件中断机制的更多内容。
在此演示中, 我将概述一下在开始 UCD3138 系列
电源控制器 上进行开发时
所需的 工具和硬件。
要对 UCD3138 系列上 基于闪存的存储器编程,
我们需要安装两个 TI 专属工具。
TI 可免费提供 这两款工具。
第一款工具称作 Code Composer Studio。
这是集成 开发环境,
其中 C - 源代码 - 可编辑、编译、汇编
以及链接。
第二款工具称作 UCD 器件 GUI。
此工具直接 与 UCD 器件
通信并配置 其基于闪存的
程序存储器。
它将 Code Composer Studio 的输出作为输入。
UCD 的基于 闪存的程序存储器
是通过 PMBus 接口 配置的。
PMBus 是电源管理 总线的简称。
我们在后续阶段将更为 详细地讨论该标准。
必须具有 USB 至 PMBus 硬件适配器,
以便 UCD 器件 GUI 可以与 UCD 器件通信。
请注意,UCD 31xx 系列上的 闪存还支持
通过各类 其他接口编程,
例如 SPI、I2C、 UART 以及 JTAG。
为简洁起见,我们 在这些教程中
将仅着重于 PMBus。
我现在介绍一下 Code Composer Studio
这款工具。
这是基于 Eclipse 的 集成开发
环境。
它支持所有 德州仪器 (TI) 微控制器
和嵌入式 处理器产品组合。
它包含 C 和 C++ 编译器、汇编器
以及连接器,即一款完全 集成的 CodeWright 编辑器,
以及具有多项目支持的 集成可视化工程
管理器。
我们很快将讨论 Code Composer Studio 的安装,
并且我们将向您展示 如何开始使用该工具。
有关更多信息,请导航至 www.ti.com/ccs。
我们强烈建议安装 CCS 6.1 版或更高版本,
以获得最新 支持和功能。
我们将使用的第二款 工具称作 UCD 器件 GUI。
它包含功能 更全面的
数字电源 设计器的功能子集,
并且可为工具集的 一部分使用。
它主要用于 将程序下载
至 UCD 上基于闪存的存储器, 控制程序执行,
并使用 PMBus 命令 访问和修改存储器的内容。
在此演示中, 稍后将展示
安装演示。
有关更多信息, 请导航至所示链接。
现在,简单概述从 C 源文件 到编程 UCD 器件的
代码开 发流程。
在 Code Composer Studio 中,程序会将 C 或 C++ 源文件
传入并经过 C 编译器 以进行解析和优化。
该过程的输出是 一组汇编源文件。
然后,程序会将这些 汇编源文件
传入并经过汇编器 以创建一个目标文件集。
然后,程序将该目标文件集 传入并经过连接器,
以创建可执行的 . out 文件。
然后,程序将该输出文件传入并经过 ARMHEX 工具,
以创建 UCD 器件 GUI 可读取的 .x0 文件。
该系列步骤 可能显得比较复杂,
但在 Code Composer Studio 内 构建 C 或 C++ 空间项目时,
整个流程 会自动执行。
因此,该过程 将全部对用户隐藏。
德州仪器 (TI) 提供 具有相应设置的
示例项目, 从而您能够
快速开始开发。
在通过 USB 至 PMBus 硬件 适配器
对 UCD 器件编程时, UCD 器件 GUI 会读取
CCS 构建过程的输出, 即 Tektronix .x0
文件。
要完成这些实验, 还需要某些硬件。
需要一块 开环测试板。
TI提供了三块 测试版,且它们
根据您使用的 UCD 器件和引脚计数
而不同。
从 TI 网站或 大多数分销商处
可直接订购这些板。
德州仪器 TI.com.cn 还提供 文档和示意图。
还需要一个 USB 至 GPIO 适配器
以使用 GUI 经由 PMBus 接口
与 UCD 器件通信。
有关订购信息, 请访问所示链接。
此外,还值得下载 三本主要的程序员
手册 - 监控与 通信程序员手册、
数字电源外设 程序员手册,
以及 ARM 和数字 系统程序员手册。
您可能还希望下载 有关衍生器件的
程序员手册。
现在,我将展示如何 下载和安装
Code Composer Studio。
TI 免费提供这款称作 Code Composer Studio
工具,您将用其 编写 C 源代码 -
这些代码将被编译、 汇编并最终下载至
您的目标 UCD 器件。
要获得该工具, 请在 Internet 浏览器中导航至
www.ti.com/ccs。
向下滚动并单击 下载按钮
以下载最新版 Windows 或 Linux。
如果您还未建立 myTI 帐户, 请建立帐户。
如果您有 myTI 帐户,请使用您的 登录信息登录。
按照安装 说明操作。
您将收到含有 CCS 软件下载
链接的电子邮件。
继续按照安装 说明操作。
当程序提示您选择产品系列时, 确保选择“UCD Digital Power Controllers”
(UCS 数字电源控制器)。
选择要安装的 调试探针,
例如 JTAG 调试探针 和开发板的驱动程序,
然后单击“Finish”(完成)。
现在,我将展示如何 下载和安装
UCD 器件 GUI。
在 Internet 浏览器中,访问 www.ti.com/tool/fusion digital power designer。
选择下载最新版本, 然后按照
安装说明操作。
当程序提示您安装其他 工具时,确保安装
UCD 3xxx UCD 9xxx 器件 GUI。
单击“Finish”(完成)。
我现将展示如何 开始使用 Code Composer
Studio。
此处是编辑视图下的 Code Composer Studio。
该视图分为四个主要部分 - Project
“Project Explorer”(项目浏览器) 区域 - 用于管理构成工作区的每个项目
-- “Source Editor” (源编辑器)-- 提供
编辑器空间
并可按您的 喜好配置--
“Console Window”(控制台窗口)-- 针对自构建过程输出的原始消息
-- 以及“Problems Window” (问题窗口)-- 提供
构建过程发出的 所有错误、警告以及其他提示的
结构化展示。
现在,对于构建过程,
我们将首先将 实验练习一导入 CCS。
选择“Project”(项目)。
导入 CCS 项目。
浏览至含有 实验练习一
源代码的目录。
单击“Finish”(完成)。
您现在应在“Project Explorer” (项目浏览器)窗格中查看实验练习一
项目。
展开项目以 查看源文件。
下一步是 构建项目。
构建项目可 通过许多方式完成。
构建前, 让我们看一下
项目配置, 项目配置是
有关构建的设置。
右键单击项目 并选择“Properties”(属性)。
创建源代码 一直是为了处理
UCD 器件的 任何版本。
要选择将构建的 目标 UCD 器件,
单击“Manage Configurations”(管理配置)。
要使特定 器件活跃,
在状态列中 选择“Set Active”(设为有效)。
例如,如果您要 使 UCD3138128 游戏,
左键单击,然后单击 “Set Active”(设为有效)。
在本演示中,我们要 构建将会
下载至 UCD3138 的项目,所以将 UCD3138 设为
有效配置。
单击“OK”(确定)退出 “Properties”(属性)窗口。
要构建项目,右键单击“Project Explorer” (项目浏览器)区域中的项目,
然后选择 “Build Project”(构建项目)。
此操作将为 UCD3138 构建项目,
因为我们已将其 设为活动配置。
或者, 选择工具栏中
锤形图标旁的 向下箭头,
以构建四个 UCD 器件 中的任一个器件。
此处是展示原始 构建输出的控制台窗口。
这主要是 与项目中每个
文件的编译有关的 编译器消息。
在控制台底部, 注意
连接器消息, 以及 ARMHEX 消息,
指示 COFF 输出 文件转化为
Tektronix HEX 输出文件已完成。
如果存在构建 错误或警告,
这些也可以 通过单击控制台
窗口上方的 向上箭头键和
向下箭头键快速导航。
在 CCS 中构建 项目有意义的
唯一前提是 构建过程的输出
可在 UCD3138xxx 器件 自身中使用。
要查找将载入 器件 GUI 的输出文件,
浏览至含有 C 源文件的目录。
当为某个项目 设置配置后,
CCS 会创建与 配置名称同名的
文件夹。
例如,我们为 UCD3138 配置构建。
执行此操作会在 含有 C 源文件的
文件夹中创建 称作 UCD3138 的文件夹。
降序向下访问该目录 以查看输出文件。
由 UCD 器件 GUI 用于 UCD 器件编程的文件
带有扩展名 .x0。
在我们的案例中, 它称作 Lab_1_UCD3138.x0。
我现将简要介绍 实验练习一中
源代码内的 UCD 项目结构。
这是一个典型的 项目文件夹结构。
其设置使您可以 通过 Code Composer Studio 中的
单一项目 访问每个 UCD 版本的
标题和连接器 命令文件。
源文件位于 其自身的文件夹中。
该文件夹也 包含项目的一些
头文件。
我们一会将简要 查看主要源文件。
当项目在 含有源文件的
文件夹中 构建和放置时,
将生成输出文件。
每个 UCD 版本 有一个单独的
输出文件夹。
PMBus_common 包含 PMBus 处理程序例程
所需的文件,这对于 所有 UCD 版本都是相同的。
每个 UCD 器件 版本的头文件和
连接器命令 文件也放置
在该级别上。
当您在 CCS 中 选择特定的配置时,
CCS 创建过程 将配置为
给所选的 UCD 器件 选择正确的头文件
和连接器命令文件。
这些头文件和连接器 命令文件夹的
大部分内容 都不必更改,
因此,目前只需知道 它们的存在即可。
每个 UCD 器件的样片 标题和连接器命令文件
都由 TI 提供。
现在简要介绍一下 主要源文件。
在 CCS 中打开实验练习一项目。
main.c 包含 主程序函数。
一般而言,在 main.c 中会 调用一些初始化函数。
例如,在此例中, 代码调用 init_PMBus
以初始化 UCD 器件中的 PMBus 外设,
然后为 PMBus 处理 程序例程设置变量。
clear_integrity_word 这个函数
将清除编程 闪存校验和,
是决定器件是在 ROM 模式 还是在闪存模式下引导的关键。
我稍后将更详细地 解释这个函数,
以及 ROM 模式与 闪存模式的差异。
这是主循环。
您可以看到, 它是一个无限循环。
在主循环中,我们通常 放置常规处理例程。
即,时间对其 并非特别关键或
特别敏感的例程。
例如,PMBus 处理程序例程
总是置于此处。
一般使用静态 或全局变量
将这些例程 实施为状态机,
从而可以通过快速而标准的 中断服务例程将这些例程中断,
并可在中断 服务例程
执行完毕时, 即时无缝地
继续执行这些例程。
interrupts.c 包含快速 和标准中断服务
例程。
中断服务例程 现在是空的。
随着我们逐渐 完成实验练习,
我们将向它们添加代码。
外设的全局 变量定义
位于 cyclone_global_variable_defs.c 中。
例如,ADC 寄存器就在此处定义。
现在,我们将浏览 部分 include 文件和连接器
命令文件。
首先,简要看一下 连接器命令文件。
我们将看一下适用于 UCD3138 的 连接器命令文件。
UCD3138 系列 中的每个器件
都具有其自身的 连接器命令文件集。
目前只需知道 这些文件的存在即可。
您无需 修改它们。
Cyclone_headers.cmd 是 将 UCD 器件的外设结构
映射至内存的 连接器命令文件。
例如,LOOP_MUX、 UART 外设以及 ADC。
UCD 器件的 总体内存映射
都在 cyclone.cmd 中定义。
例如,我们将 D-闪存或者说数据闪存的
起始地址定义为 十六进制 18800,并且长度是
以十六进制表示的 800 字节。
Load_UCD3138.asm 含有 适用于 UCD3138 器件的
自定义系统 和变量初始化。
UCD3138 系列 中的每个器件
都有其自身的 load.asm 文件。
Load.asm 还包含 中断和复位矢量。
相应 load.asm 文件的纳入
取决于您在 Code Composer Studio 中 构建的代码是针对哪种 UCD
器件。
例如,如果您针对 UCD 3138064 器件构建代码,
则项目中将包括 load_UCD3138064.asm。
该代码的开销 必须低,
因此以汇编语言 编写该代码。
您无需 修改此代码,
因此现在无需 更为详尽地学习该代码。
现在,简要看一下 头文件。
我们将看一下适用于 UCD3138 的头文件。
UCD3138 系列 中的每个器件
都具有其自身的头文件集。
目前只需知道 这些文件的存在即可。
您无需 修改它们。
UCD3138a64_headerfiles 文件夹中的这些文件
包含 UCD3138a64 器件的头文件。
这些特殊的文件包含 外设的结构
文件。
Cyclone_device.h 是一个 含有所有其他
外设头文件的 头文件。
我们稍后将更为详细地 展示这些结构体的
用法。
简而言之,它们使我们能够 使用一次读取-修改-写入操作
设置或清除 寄存器中的单个位。
与使用单个常量编写的 单个寄存器相比,
它们在时间和代码 空间方面相对低效。
最佳方法是在开发中 使用这些结构体,
然后在稍后需要优化代码时, 切换至常量。
现在,简要看一下 实验练习一的代码。
它非常简单。
它只不过将一个字符串 变量设为“Hello World”。
在实验练习一,我们创建了一个称作 a_string 的 字符串变量,
该变量在 variables.h 中定义。
如果我们回到 main.c,我们会将
a_string 的值设为“Hello World”。
当我们 使用 UCD GUI
将该程序下载 至 UCD 编程闪存后,
我们将能够使用 UCD GUI 读取 a_string 的内容,
并验证其内容 是否真的是“Hello World”。
现在,我将展示如何 使用 UCD 器件 GUI
在 UCD 器件中 下载固件和访问内存变量。
在打开 GUI 之前, 将 USB 适配器线缆上的
USB 端插入计算机上的 USB 端口, 将其他 GPIO 端插入
开环评估板上的 PMBus 接头。
您应看到在 板左下角
LED 灯闪烁。
这指示 电路板已关闭
USB 至 PMBus 适配器的供电。
如果 LED 未亮起,
则您将需要在 PMBus 接头 附近的电路板右上方
插入跳线。
请参阅有关 评估板的文档,
以了解需要 插入的跳线。
默认情况下, 当您收到板时,
这些跳线应已插入。
作为 GUI 安装的 一部分,
在桌面上可能有 多达三个图标。
双击 UCD3xxx 和 UCD9xxx 器件
图标以启动 GUI。
在主要器件 GUI 窗口中,您将
看到三个窗格 - “Status”(状态)窗格,
显示与 USB 至 PMBus 适配器相连的器件的
状态;“Tools”(工具)窗格, 包含我们将
用于器件编程和 器件调试的工具;
以及“Log”(日志) 窗格,
在 UCD 器件收发PMBus 命令 过程中记录这些命令。
现在,我们来看一下与 PMBus 适配器相连的器件。
单击“Scan for Device in ROM Mode” (ROM 模式下扫描器件)。
这将通过 PMBus 接口 发送命令。
如果存在与 PMBus 相连的有效器件,
且器件处于 ROM 模式, 则 UCD 器件
将响应 PMBus 命令,
且 GUI 将检测 和解析响应,
以告诉用户 所连接的 UCD 器件
类型。
例如,UCD3138 或 UCD3138064。
稍后,我将更为详细地 讨论 ROM 和闪存模式。
如果尚未 对该器件编程,
它应处于 ROM 模式,且您 将在 GUI 的状态窗格中
看到以下消息。
您将看到目标 器件、ROM 信息
以及封装 ID。
在“Log”(日志)窗格中,您将 看到 PMBus 命令
并且应看到 以绿色突显的命令,
指示已在 ROM 模式 下找到 UCD 器件。
要对将载入器件的 固件编程,
在“Tools”(工具)窗口中 选择“Flash”(闪存)选项卡,
然后单击 固件下载链接。
固件下载 窗口将打开。
要选择将下载至 UCD 器件的固件,
单击“Select File”(选择文件) 按钮并
浏览至含有实验练习一的 .x0 文件的目录。
在我们的案例中, 它称作 Lab_1_UCD_3138.x0。
单击“Open”(打开)。
此时, 非常重要的是
选择“Radio”(无线电)按钮。
请勿写入程序校验和。
始终处于 ROM。
我稍后将更详细地 解释为何这很重要,
但是目前只需知道, 选定该选项后
对 UCD 器件编程 会使这些实验的
持续调试 更简单。
单击“Download”(下载)。
此时将出现弹出消息。
选择“Don't show this message again” (不再显示该消息)和“Yes”(是)。
此时将开始下载。
监控进度条 并查看 PMBus 日志窗口,
以了解更多 下载详细信息。
在“Log”(日志)窗格中,您应看到 消息 - “Download completed
without errors”(下载完成,没有错误)- 以绿色突显,
指示下载成功。
您现在可以关闭 固件下载窗口。
我们现将使用 内存调试器来访问
和修改在我们刚才 对其编程的 UCD 器件上的内存,
例如 RAM 变量。
在调用内存 调试器之前,
检查“Command ROM to execute program” (命令 ROM 执行程序)是否呈灰显。
如未呈灰显,则单击该链接。
该链接将发送 PMBus 命令至 UCD 器件,
UCD 器件中的 ROM 代码将解析这些命令,
以指示处理器 开始执行您刚才
为对程序存储器 编程而下载的代码。
如果这已灰显,我们刚才下载至 编程闪存的代码已执行,
下载至编程闪存的 代码已在执行,
这正是我们 所期待的。
如未呈灰显, 单击该链接。
以开始执行 代码和编程闪存。
此外,检查器件 ID 链接。
如呈灰显, 则需要单击该链接。
这将通过 PMBus 接口 发送至运行中的固件,
并检查 UCD 器件的 相应响应。
它使 GUI 了解 已下载至编程闪存的
固件是否正在 执行 PMBus 处理程序
例程,我们在后面 将更为详细地讨论例程。
当正在执行编程闪存 中的代码时,
GUI 需要 这些例程
才能继续与 器件通信。
在“Tools”(工具)窗口中, 选择调试选项卡。
单击内存 调试器链接
以打开内存调试器。
当您第一次 使用该工具时,
它会提示您 输入密码。
在弹出窗口中 键入 f-o-r-e-s-t-l-n,
全部小写。
程序不会再次 提示您输入该密码。
单击“OK”(确定)。
要为程序中 使用的变量
加载内存映射, 依次在内存调试器中选择“File”(文件)、
“Change Map”(更改映射)。
当出现更改 映射对话框时,
选择含有您的项目的 映射和 PP 文件的
文件夹。
这与含有 Tektronix.x0 文件的文件夹
为同一文件夹, 我们在下载固件时
将导航至该文件夹。
单击“OK”(确定)。
加载相应的 映射文件将使
内存调试器能够显示 变量、寄存器以及
关联的调试字段。
对于实验练习一,我们已 使用 C 代码将称作 a_string 的
字符阵列设为“Hello World”。
选择刷新列中的 “Refresh”(刷新)按钮
更新变量。
单击名称列中的 加号可展开变量,
且您可以查看 变量阵列的元素。
“Hello World”会按顺序逐字节 以十六进制形式
显示。
48 是大写 H 的 十六进制表示法,
65 是大写 E 的 十六进制表示法,依此类推。
现在,我将简要概述 在写入编程闪存时
UCD3138 中的 引导 BOM 程序
以及校验和的放置。
这些校验和提供了 一种在允许 ARM 内核
执行编程闪存 中的代码前
让引导 ROM 检查编程闪存
完整性的方法。
这是 UCD3138 中 32 KB 编程闪存
图示。
引导程序可 置于编程闪存的
前两个 KB 中。
如果编程闪存的 前 2 KB
用于引导程序, 则该 2 KB 块的最后 4 个字节
将保留 用于
4 字节的校验和。
该校验和的 计算方式是
将前 2 KB 编程 闪存上
每字节编程 闪存的内容相加。
如果无需 引导程序,
则将保留编程闪存的 最后 4 个字节
供另一 4 个字节的校验和使用,
其计算是通过在 整个 32 KB 范围内
将编程闪存的 各字节内容相加
得出的。
在加电或复位后, 引导运行例程
将在两个位置 验证校验和,
并根据结果, 决定是
始终处于 ROM 模式,还是开始 执行编程闪存中的
代码。
这就是我们所说的闪存模式。
校验和提供了 一种在执行
编程闪存中的代码前 检查编程闪存中的
内容是否 完整的方法。
从用户角度来看, 我们在写入
编程闪存时, 纳入或排除了
这些校验和。
排除校验和会强制 器件在加电复位后
仍始终处于 ROM 模式。
纳入校验和会强制 器件在加电复位后
在闪存模式下运行,当然,前提是 编程闪存未
损坏。
我现将展示 UCD3138 上 有关引导 ROM 程序的
程序流程简图。
请注意,该 引导 ROM 例程
与 UCD 的 3138 系列产品的其他成员
略有不同。
请参阅 各种程序员
手册以了解确切详情, 但是基本上,我将讨论的原则
与整个 UCD 3138 系列均有关。
加电或复位后, 引导 ROM 程序
将初始化一些外设。
然后,它计算编程闪存 前两个 KB 的校验和,
这可用于 存储引导程序,
以及将最新 计算的校验和
与在该 2 KB 编程 闪存块的最后 4 个字节
中存储的值 进行比较。
如果校验和的值 相符,引导 ROM 例程
会强制 ARM 内核 开始执行编程闪存中的代码,
从而它从 ROM 模式 转变为闪存模式。
如果校验和的 值不相符,
则引导 ROM 程序会 计算整个 32 KB 编程
闪存的校验和。
然后,它会将此最新 计算所得的校验和
与该 32 KB 编程闪存的 最后 4 个字节中存储的值
进行比较。
如果校验和的值相符, 它会开始执行
编程闪存中的代码, 从而它从 ROM 模式转变
为闪存模式。
如果校验和的 值不相符,
它将跳至 PMBus 处理程序例程。
该例程不断 通过 PMBus 接口
拉取从诸如 UCD 器件 GUI 等主要工具
发来的有效 PMBus 命令。
这些 PMBus 命令可 用于读取、写入和擦除
程序和数据闪存。
此外,还有 命令可执行
编程闪存中的代码。
使用此命令, 我们可以在 ROM 模式下
执行编程闪存 中的代码,
而无需在对器件编程时, 写入两种校验和中的
任一种。
我们不建议编写这两种 校验和中的任一种
以及在代码开发期间 使用该命令,
因为它将确保该闪存 不会变为锁定状态。
现在,我将演示 闪存可以
如何变为锁定状态, 这表示无法再将其
擦除和对其重新编程。
这是主程序中 代码的简单图示。
这是将写入 编程闪存的代码。
此时,假设已对一个 或全部两个校验和
编程,从而引导 ROM 例程将指示
ARM 内核在加电或 复位后执行闪存中的
代码。
一般而言,我们在 主程序开头
设有初始化函数, 然后是主循环。
在主循环内部,我们 始终调用 PMBus 处理程序
例程,从而我们可以 通过 PMBus 接口
擦除闪存并对其重新编程。
一切运行正常, 每次经过主循环时,
均会调用 PMBus 处理程序例程。
但是,当程序中 有妨碍到达
主循环的错误时, 应当如何应对?
这意味着将永不调用 PMBus 处理程序例程,
从而防止 我们访问和擦除闪存
以及对闪存重新编程。
因此,编程闪存 变为已锁定
且永不能对 该部分重新编程。
所以,我们建议将后门 置于主程序的开头
以规避该问题。
clear_integrity_word 将清除 该编程闪存校验和。
您应在处于 闲置状态的
输入引脚上依情况 调用 clear_integrity_word。
将其就置于 主程序开头可最大限度
降低因错误 导致 clear_integrity_word
在需要执行时 无法执行的发生概率。
所以,如果有 错误阻碍
主循环中的 PMBus 处理程序例程
执行, 您可以
更改输入引脚的状态, 复位器件,
当编程 闪存中的代码执行时,
将即时调用 clear_integrity_word,
它将清除校验和。
然后,在复位时, 引导 ROM 代码
不会跳至编程 闪存,因为启动时
执行的校验和将失败, 但是仍将处于 ROM 模式
并执行 PMBus 处理程序例程。
从此以后,您可以擦除 并重新写入编程闪存。
函数 clear_integrity_word
会清除编程 闪存校验和,
从而它会清除编程 闪存 4 或 8 字节的内容。
擦除或写入闪存 要求该器件
处于特权模式。
为将器件置于 特权模式,
我们采用了软件的 中断机制。
软件中断不是 常规意义上的中断。
软件中断的 发起是由软件的
顺序执行 和调用
特定函数 实现的。
对软件中断 函数的调用
看上去与对任何其他 标准函数的调用别无二致。
使函数基于 软件中断
会强制 ARM 以 特权模式运行。
在特权模式下, 软件
可启用或禁用 中断,操纵程序
和数据闪存 内容及其他。
当 ARM 处于用户模式下时, 这些功能
全都不允许使用。
在 UCD3138 数字 系统程序员手册中,
您可以阅读有关 软件中断机制的更多内容。
视频报错
手机看
扫码用手机观看
收藏本课程
-
未学习 开始使用UCD3138数字电源控制器工具
00:38:27
播放中
视频简介
开始使用UCD3138数字电源控制器工具
所属课程:开始使用UCD3138数字电源控制器工具
发布时间:2019.03.11
视频集数:1
本节视频时长:00:38:27
“了解数字电动工具的基础知识,固件开发和项目结构,以帮助您更快地使用UCD3138系列。练习使用我们的工具! 立即下载Fusion Digital Power™软件套件和Code composer Studio™。“
//=$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'])?>