MSPM0LXX 系列微控制器 (MCU) 产品系列是 MSPM0 的子系列,提供多种具有超低功耗以及集成式模拟和数字外设的 32 位 MCU,适用于检测、测量和控制应用。在执行复杂的实时应用的同时降低功耗是近期嵌入式应用面临的一项主要挑战。本文旨在构建一个简单的框架,以帮助开发人员快速设置 MSPM0L1306 和 BQ769x2 之间的通信。
Other TMs
BQ769x2 是一款高度集成且精确的电池监控器件,适用于 3 节至 16 节电池包。MSPM0L1306 是 MSPM0 系列的高度集成、超低功耗 32 位 MCU。实际上,BQ769x2 监控器可以测量电池电压、温度和电流,并通过 I2C 接口将这些信息报告给 MCU (MSPM0)。然后,MCU 可以根据监控器提供的信息做出决策。该器件可以启用和禁用 FET,控制电池平衡特性,并根据特定用户需求做出各种响应。本应用手册提供了适用于 MSPM0L1306 和 BQ769x2 的 I2C 通信示例代码。
本应用报告中实施的 I2C 通信示例代码基于 BQ76952EVM 和 MSPM0L1306 LaunchPad。MSPM0L1306 用作 I2C 主器件,而 BQ76952 用作从器件。图 2-1 显示了简单的系统方框图。
对于 BQ76952EVM,需要通过将 BQ76952 芯片与板载 MCU (EV2400) 结合使用来检查该芯片。下载最新版本的 BQStudio(BQSTUDIO-TEST 版本),并按照“EVM 用户指南”的“快速入门”部分中的步骤进行操作。
确认 BQ76952EVM 板成功运行后,我们可以开始在 MSPM0 和 BQ769x2 之间设置 I2C 桥接器。如果 BQ769x2 EVM 上的 USB 未通电,请记住移除 uC_SCL(J19) 和 uC_SDA(J16) 上的连接器。
对于 MSPM0L1306 Launchpad,PA1 配置为 SCL 引脚,PA0 配置为 SDA 引脚。并且 MSPM0L1306 使用主机上的 USB 端口供电。表 2-1 显示了两个 EVM 之间的信号和电源连接。
连接类型 | 接头名称 | LP-MSPM0L1306 引脚编号:引脚名称 |
BQ76952EVM 引脚编号:引脚名称 |
---|---|---|---|
I2C 接口 | I2C:SCL | PA.1:I2C0_SCL | J17-2:P26 |
I2C:SDA | PA.0:I2C0_SDA | J17-3:P27 | |
电源连接 | 电源:3.3V | J1-1 | J2-3:REG1 |
电源:接地 | J1-22 | J5-1:VSS |
对于 I2C 接口,除了连接 SCL 和 SDA 外,两块电路板上还要实施上拉解决方案。您可以根据实际情况选择一个 EVM 来上拉 SDA 和 SCL。
对于 BQ76952EVM,短接 J15 和 J18 可以上拉 SDA 和 SCL。上拉电阻的默认值为 10kΩ。应根据 I2C 总线速度对其进行调整。图 2-3 显示了 BQ76952EVM 上的上拉跳线图。
对于 Launchpad,短接 J9-2-3 和 J10-2-3 可以上拉 SDA 和 SCL。上拉电阻的默认值为 2.2kΩ。还可以根据 I2C 总线速度调整该值。图 2-4 显示了 MSPM0L1306 Launchpad 上的上拉跳线图。
有关未提及的其他器件的说明,请参阅“BQ76952EVM 用户指南”和“LP-MAPM0L1306 Launchpad 用户指南”。
软件工程如图 3-1 所示,在 CCS 中开发。这是软件工程链接。软件工程主要由三个部分组成。对于其他文件,这些文件是 MSPM0 工程的默认文件。
BQ769x2_protocol 声明了 BQ769x2 TRM 中的所有内存寄存器、直接命令、子命令和仅包含命令的子命令的定义。BQ769x2_protocol 还具有获取相关状态、故障和测量结果的函数。
I2C_Communication 主要包括 M0 的基于 I2C 协议的读写寄存器函数。
Main 包含最高的系统函数代码。按下按钮 (PA14) 后,MSPM0 将开始与 BQ769x2 通信。有关软件的更多详细信息,请参阅以下部分。
本应用手册中创建的所示示例代码旨在使用 MSPM0 I2C 接口控制 BQ76952 并实现必要的命令。最终代码由三种类型的函数组成:MSPM0 初始化函数、I2C 通信函数和 BQ76952 函数。该代码演示了如何通过 I2C 接口使 MSPM0 与 BQ756952 进行通信并实施特定的命令。
MSPM0 初始化用于 MCU 电源、系统控制器、系统时钟和 I2C 外设的系统初始化,如图 3-2 和图 3-3 所示。所有配置都通过 Sysconfig(图形代码生成工具)完成。MSPM0 中的 I2C 外设配置为控制器器件以与 BQ769x2 通信。
I2C 模块由 SYSCFG_DL_I2C_0_init() 函数初始化。I2C 模块的时钟源是 BUSCLK,它取决于 MSPM0L 的电源域。I2C 标准总线速度可配置为三种模式:标准模式 (100k)、快速模式 (400k) 和超快速模式 (1M)。此代码设置为 100kHz。有关这些设置的所有详细信息,请参阅 CCS Sysconfig 页面。
此示例基于 M0 的内部集成电路 (I2C) 驱动程序库 (dl_i2c.h) 提供基本 BQ769x2 寄存器控制函数,如图 3-5 所示。
这些函数用于以字节为单位写入和读取从器件寄存器。参考“BQ769x2 技术参考手册”和数据表,可以在寄存器控制函数的基础之上实现直接命令、子命令以及对 RAM 寄存器的读写。图 3-6 中列出了函数的原型。
直接命令、子命令和仅包含命令的子命令是可供用户使用的预定义函数,用于简化与电池监控器的通信。
对于直接命令函数,输入参数是命令、数据和类型。类型分为两种:读取和写入。对于读取类型,用户可以读取命令地址中的数据,以及存储在要读取的全局变量的 Rx 状态中的数据。对于写入类型,用户可以将数据写入命令地址。
对于命令子命令函数,输入参数是子命令,例如关断和复位。此函数所做的只是格式化传输数组,然后将数组写入十六进制 3E,其中,监控器随后将根据命令运行。
子命令函数与仅包含命令的子命令不同,因为每个命令都有关联的数据,无论是读取数据还是写入数据。输入参数与 BQ769x2 SetRegister 函数类似,但最后一个输入是类型。此输入可以是定义的宏 R(用于读取)、W(用于写入)或 W2(用于写入两个字节)。
对于 BQ769x2 SetRegister 函数,输入参数是数据存储器寄存器地址、打算写入的数据存储器以及以字节为单位的数据长度。首先,针对子命令的初始写入在直接存储器中写入十六进制 3E,然后,对于校验和(用于验证所输入的传输数据是正确的)向寄存器写入十六进制 60。最后,对于三种不同的数据长度有不同的情况。
命令的完整列表可在 BQ76952 技术参考手册中找到。