This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] BQ76952EVM:通过 SPI 与 BQ76952EVM 76995_0_36通信

Guru**** 2564410 points
Other Parts Discussed in Thread: BQ76952EVM, BQ76952, BQSTUDIO

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/995694/bq76952evm-communicating-with-bq76952evm-7695_0_36-over-spi

器件型号:BQ76952EVM
主题中讨论的其他器件: BQ76952TM4C123BQSTUDIO

大家好、

我正在 BQ76952EVM BMS029B 上将通信从 I2C 切换到 SPI、并正在遇到有关器件是否处于 SPI 模式的问题。 我按照软件开发指南和 EVM 用户手册创建了 SPI 功能、但使用逻辑分析仪无法读取除垃圾以外的任何内容。 由于我有引导至 I2C 模式的器件、我编写了函数来启用 SPI 通信、然后交换至 SPI。 下面是我所做的工作:

1.通过写入通信类型寄存器(地址0x9239)将通信类型设置为0x10 (具有 CRC 的 SPI)-摘自 EVM 用户指南

2.通过将 REG0配置寄存器设置为0x01 (地址0x9237)来启用 REG0 -摘自 EVM 用户指南

3.通过将 REG1配置寄存器设置为0x0D (地址0x9236)来启用 REG1 -摘自 EVM 用户指南

4、通过向 SPI 配置寄存器(地址0x923C)写入0x60来启用 SPI 通信-摘自 EVM 用户指南

5.通过将该寄存器设置为0x00,为 SPI CS 操作配置了 CFETOFF

6.为 SPI MOSI 操作配置了 HDQ 引脚,但将该寄存器设置为0x00

完成这些步骤后、我已经从这些寄存器中读取并使用逻辑分析仪验证了正确的值、只是为了再次检查器件是否在其寄存器中设置这些值、所以一切看起来都很好。

最后、我发送 SWAP_COMM_MODE 子命令。

在这里、我尝试读取器件地址寄存器、但我只是在逻辑分析仪上看到了垃圾。 我完全移除了连接到外部 I2C J17以及 J15和 J18上的跳线、因此总线应该只有 SPI 流量。 这一切都是在使用逻辑分析仪验证 I2C 操作是否正确之后进行的。

我还尝试使用 swap_TO_spi()子命令,但这两个子命令也不起作用,并且逻辑分析仪上仍在读取垃圾信息。

I2C 通信无缝工作、我能够读取电压、状态寄存器、器件 ID 和其他所有内容、但我们需要将 SPI 用于我们的应用。

我是否遗漏了任何内容? 我正在使用评估模块、想知道我是否错过了某个或某个跳线、或者我错过了配置设置。 我已经多次了解 TRM、EVM 用户指南和软件开发指南。 我们非常感谢您的任何帮助。 谢谢!

此致、

Kyle Garland

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    编辑:我忘记了提到我不使用板载 MCU 与 BQ76952进行通信、而是使用外部 MCU (tm4c123系列)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Kyle、

    首先使用板载 MCU 尝试执行这些步骤以进行验证可能会更容易。 这将确保器件确实成功转换到 SPI 模式。

    我在步骤中没有看到的一点是、您应该在写入寄存器之前发送命令以进入 CONFIG_UPDATE 模式、并在写入之后退出此模式。 对于该器件、SPI 协议也可能有点棘手。 确保您的代码遵循 TRM 和软件开发指南(https://www.ti.com/lit/an/sluaa11a/sluaa11a.pdf )中的建议。 如果您向我发送了 E2E 朋友请求、我还可以通过私人消息使用 SPI 向您发送 ARM 示例。

    此致、

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt、

    我忘记了、但我在写入任何 RAM 寄存器之前进入配置更新模式、然后立即退出。

    我遵循软件开发指南并编写了一些保守的代码、用于检查 MISO 行以读回我发送的数据、然后再转到下一个字节、如下所示。  

    int16_t BQ76952::GetCellVoltage(uint8_t cell_number)
    {
        bool success = false;
        uint32_t tx_voltage_array[3];
        uint8_t rx_voltage_array[2];
        uint8_t cell = GetCellNumber(cell_number);
        int16_t voltage;
    
        for (uint8_t index = 0; index < 2; index++) //writing 2 bytes of data to one of these registers
        {
            tx_voltage_array[0] = cell;
            tx_voltage_array[1] = 0xFF; //not sending anything when reading voltages
            tx_voltage_array[2] = ComputeCRC8(tx_voltage_array, 2);
    
            while (!success)
            {
                spi->Transfer(tx_voltage_array, rx_data_array, 3);
    
                if (rx_data_array[0] == cell)
                {
                    success = true;
                    //TODO Add logic for checking CRC
                    rx_voltage_array[index] = rx_data_array[1];
                }
            }
    
            success = false;
            cell++;
        }
        voltage = static_cast<int16_t>(rx_voltage_array[0] << 8
                | rx_voltage_array[1]);
        return voltage;
    }

    您可以看到、在等待器件读回我发送的内容时、我进入 while 循环、因为 MISO 行上的第一个字节通常是0xFFFFFFF、然后 是0xFFFFFF00。 这种样式是我的典型函数、用于发送直接命令、子命令/数据子命令以及写入 RAM 寄存器。 我还在此论坛上找到了 SPI 和 I2C 的示例代码、我看到它们在循环检查过程中执行的操作与我执行的操作相同。

    使用板载 MCU 的问题是 BQ Studio 无法识别我正在使用的7695_0_36器件、也无法为我提供配置 SPI (将 SPI 通信寄存器设置为0x60)所需的选项之一。 我可以选择的唯一关闭选项是7695_0_28。

    使用板载 MCU 的另一个问题是、我必须将跳线从外部 I2C 来回切换为内部 I2C、以发送更改为 SPI 的命令、然后当我未连接内部 MCU 连接时、BQ Studio 不会显示任何内容。

    我实际上只需要一个示例、说明如何设置开发套件以供外部 SPI 使用、以便查看是否缺少跳线或配置。 谢谢你。

    此致、

    Kyle Garland

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Kyle、

    您似乎需要更新您的 BQStudio 版本。 您应该下载 BQSTUDIO-TEST 版本、以便包含最新的器件。 我建议首先连接 BQStudio 的原因是为了确认除代码外器件正常工作。

    此致、

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt、

    这对我来说听起来不错、我将安装 BQStudio 的最新测试版本、并检查我是否可以连接到 SPI、并在今天晚些时候返回给您。  

    此外、当我知道器件处于 SPI 模式时、是否需要在从 I2C 切换到 SPI 模式后更改用于内部 SPI 的跳线、然后移除这些跳线并连接我的外部 SPI 线以测试我的代码?  

    -Kyle

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、安装了供内部 SPI 使用的跳线、并在连接外部 SPI 时移除了跳线。