Thread 中讨论的其他器件:TPS65381A-Q1、 TIDA-01527、 USB2ANY
工具/软件:
您好 TI 专家
我目前正在开发一个使用 TPS65313 为汽车应用供电的系统。 我们正面临某些问题的 PMIC ,所以我想读取 PMIC 寄存器使用 SPI . 您是否具备与 TPS65313 连接的 C2000 控制器的任何参考代码。 如果 C2000 控制器不提供该功能、则任何参考代码都会提供该功能。
提前感谢您
Ashwin Bhaskar A.
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.
工具/软件:
您好 TI 专家
我目前正在开发一个使用 TPS65313 为汽车应用供电的系统。 我们正面临某些问题的 PMIC ,所以我想读取 PMIC 寄存器使用 SPI . 您是否具备与 TPS65313 连接的 C2000 控制器的任何参考代码。 如果 C2000 控制器不提供该功能、则任何参考代码都会提供该功能。
提前感谢您
Ashwin Bhaskar A.
尊敬的 Ashwin:
我不知道采用 C2000 的 TSP65313 的参考代码、但是有一个采用 C2000 的 TPS65381A-Q1 参考设计: 关于 TPS65313-Q1:TPS65313 参考设计
对于 TPS65313 -Q1 代码、您需要使用器件数据表中的 SPI 信息。
此致、
Katie
尊敬的 Ashwin:
很遗憾、我不知道示例代码。 我分享的参考设计有一些适用于另一个 PMIC 器件型号的示例代码 — 因为许多 PMIC 共享通用的 SPI 格式、这可能仍然是您的参考。 https://dr-download.ti.com/secure/software-development/code-example-or-demo/MD-YIeomGUBt5/01.00.00.00/tidcel0.zip
此致、
Katie
尊敬的 Katie:
感谢您的答复,
我 根据数据表建立了 SPI 与 PMIC 连接的初步代码库,但我无法读取寄存器或对其进行可靠的配置。 如果我与你共享代码库,你可以看看它,并验证它,如果可能. 我很难按时间,这是一个关键的组件,我们去现场之前,因为我们面临 PMIC 相关的问题, PMIC 在电流尖峰期间关闭,尽管它在其额定限值内.
提前感谢您
Ashwin Bhaskar A.
您好、Niko、
我们有一个带有 PMIC 和控制器的定制电路板和电线似乎是正确的,我不知道您是什么意思的外部调试器的 PMIC ,如果您的意思是如果我有办法调试系统那么是的,我有一个 xds110 模块的 f28p65x,我试图读取 rev id 和其中一个配置寄存器,其默认值是已知的。 向您发送示波器捕获是有点困难,因为我目前没有物理访问板,所有我有远程访问系统连接到板. 我只是想澄清两件事,根据我的理解, SPI 模式是 SPI 模式 1,并且我们不能有连续的 SPI 操作没有 NCS 引脚上升到高值 788ns。 我发布了一段 SPI 事务逻辑,如果我对此的任何理解有缺陷,请告诉我。
uint16_t spi_transmit_seq_function(uint16_t tx_data) {
pmic_cs_low();
SPI_writeDataBlockingNonFIFO(PMIC_SPI_BASE, tx_data);
uint16_t rx_data = SPI_readDataBlockingNonFIFO(PMIC_SPI_BASE);
pmic_cs_high();
DEVICE_DELAY_US(1);
return rx_data;
}
tps_status_t tps_read_register(uint8_t read_cmd_code, uint8_t* data)
{
if (platform_spi_transfer == NULL) {
return TPS_ERROR_SPI_FAIL;
}
if (data == NULL) {
return TPS_ERROR_NULL_POINTER;
}
uint16_t tx_frame = (uint16_t)read_cmd_code << 8;
uint16_t rx_frame = spi_transmit_seq_function(tx_frame);
*data = (uint8_t)(rx_frame & 0x00FF);
uint8_t status_byte = (uint8_t)((rx_frame >> 8) & 0xFF);
if (status_byte & 0x01) {
return TPS_ERROR_SPI_FAIL;
}
return TPS_OK;
}
此致
Ashwin
尊敬的 Ashwin:
我指的是 USB2ANY 等一些器件、它们可用于与 PMIC 通信(绕过板载 MCU)、只是为了让您能够与一些现有解决方案进行通信。
SPI 模式为 1、因此在下降沿对接收到的数据进行采样、并在上升沿发送数据。 SCK 待机状态为低电平。 nCS 引脚必须在两次运行之间保持高电平至少 788ns。
很抱歉、由于我不是软件工程师、我真的不明白您的代码是如何工作的。 是否确定您没有尝试在传输中写入 SPI CRC、因为 SPI_CRC 默认情况下处于禁用状态。
此致、
Niko
您好、Niko、
很抱歉、我在休假时回复太晚了、
我指的是 USB2ANY 等器件、它可用于与 PMIC 通信(绕过板载 MCU)、只是为了让您能够与某个现有解决方案进行通信。
我无法通过 USB 访问 PMIC、因为我们仅使用 IC、而不使用 PMIC 的 EVK。 我假设您想针对 TPS65313 通过 TI GUI 测试 PMIC、但这是不可能的、因为我没有 EVK 模块、并且我相信该 GUI 无法在 TI 网站上下载。
感谢您确认 SPI 模式、我使用 16 位 SPI 传输、所以我不使用 24 位传输的 CRC。
此致、
Ashwin
你好 Niko 和 Katie ,
我收到了在逻辑分析仪上捕获的 SPI 通信数据。 控制器正在发送命令 0x1、用于读取 PMIC 的 DEV REV ID、下面连接了响应以及 CLK 和 nCS 引脚。 如果您需要任何其他信息、请告诉我。 
SPI 读取的值是 0x88、它是较低的 8 位、但根据数据表、该值必须是 0x21、我相信。 因此、我假设这里的 SPI 通信工作方式存在缺陷。 请让我知道您对此的推论。
此致
Ashwin
你好、Niko 和 Katie、
我想问一个后续问题的 PMIC ,目前我们面临的问题,当我们的系统要求高电流 PMIC 是完全复位和控制器是关闭. 是否有办法在过载事件期间禁用升压和降压转换器的 PMIC 关断功能、而不仅仅是产生中断? 。 我知道这在严重短路事件中不可能发生,但我的控制器及其外设在某些操作期间需要突然爆发电流,并且 PMIC 不允许这种额外的电源要求。
根据我对 PMIC 数据表的解释,所有开关模式调节器都在过载、过流状态下被禁用。 是否有任何方法 PMIC 不禁用这些稳压器,而只是生成中断.
此致
Ashwin
您好、Niko、
感谢您的答复
我将看看表,看看它是否可能禁用任何的保护功能,但为了做到这一点,SPI 通信需要是可靠的,从你之前的答复,我无法在代码中继续前进,因为我无法理解为什么波形是这样的,我正在做一个简单的读取命令操作,它不能按预期发挥作用. 你正在谈论的延迟已经是代码的一部分,它仍然没有发送似乎有任何效果. 我假设 SPI 通信在我的原始命令之后需要一个虚拟数据命令,它会发送实际响应。 即使在那时,通信似乎有缺陷。
此致
Ashwin
您好、Niko、
很抱歉延迟回复、
我正在努力获取这些 SPI 捕获、但可能需要一些时间、因为探测时意外短路、我们之前使用的定制电路板不再起作用。 获得 SPI 捕获结果后、我将在此处发布一个有趣的观察结果、即电路板发生故障之前、我尝试将 SPI 模式从模式 1 更改为模式 0、我能够正确读取修订 ID 0x021、还可以根据数据表中提到的初始值正确读取一些其他 RD 寄存器。 我不确定这是否是巧合,因为根据您确认的内容和我在数据表上阅读的内容,SPI 模式肯定是模式 1。 你能解释为什么模式 0 似乎现在工作?
您是否在其他项目中使用过相同的 SPI 代码并测试了 SPI 实现是否正常工作? 我想排除 SPI 处理实现错误的可能性、在这种情况下不会出现 PMIC 问题
我在环回模式下测试了代码,似乎工作正常,我为 DRV8343S 做了类似的 SPI 驱动程序,这也是基于 SPI 的,我遵循类似的程序来使它。 我不认为它现在是一个实施问题,但我可以进行更多的测试来确定。
正如我说过的、可能需要一些时间才能捕获这些数据。 我会尽快发布。
此致
Ashwin
尊敬的 Ashwin:
感谢您提供的信息。 我不确定为什么选择 SPI 模式 0 似乎有效、但我在使用 TPS65313 EVM 并与 GUI 进行通信时获取了示例捕获。 请参阅下图、了解使用此设置时的外观。 我已经读取了寄存器 0x1、读取值为 0x21。 现在查看您的传输数据、似乎出现了问题、因为您发送的命令不是 0x1。 PMIC 正在时钟的下降沿对此命令进行采样、但在您的事务中、似乎代码是以预期在上升沿进行采样的方式实现的。 时钟的上升沿位于 MOSI 位的中间。 另外、我不知道如何得到 0x88 作为读取值、因为在我看来它应该是 0x10、因为 MCU 采样应该发生在时钟的下降沿。
整个事务

放大事务的前半部分(显示 MOSI 中的 CMD)

放大事务的后一半(显示 MISO 上的读取值)

此致、
Niko