主题中讨论的其他器件: TPS55288、 BQ27220、 LP55231、 BQ51221、 DRV2605L
尊敬的团队
主机 MCU 是否可以 通过 I2C1向 I2C3发送数据/命令? (例如通过 I2C1向 SPI 发送数据/命令)
此致、
Majid
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.
尊敬的 pdjuandi
感谢您的回答。
任何可能的方式。
让我来解释一下。
在 TPS65987D + TPS55288配置中、主机 MCU (作为主器 件)连接到 TPS65987D 的 I2C1 (作为从器件)、TPS55288 (作为从器件)连接到 TPS65987D 的 I2C3 (作为主器件)。 现在、要读取 TPS55288的"状态寄存器(0x7)"、在 I2C3物理线路上只有一个主器件 (即 TPS65987D)是合乎逻辑的。
如果可以 通过 TPS65987D 读取 TPS55288的"状态寄存器(0x7)"并以任何方式将数据传递到 MCU、则会很好。
我可以考虑4种方法:
TPS65987D 通过 I2C1接收命令、通过 I2C3读取 TPS55288的"状态寄存器(0x7)"、然后通过 I2C1发回数据。
TPS65987D 通过 I2C1接收命令、通过 I2C3读取 TPS55288的"状态寄存器(0x7)"、然后在内部存储数据、然后 MCU 通过 I2C1读取 TPS65987D 的内部存储数据。
TPS65987D 通过 I2C3定期读取 TPS55288的"状态寄存器(0x7)"、并通过 I2C1定期向 MUC 发送数据。
TPS65987D 通过 I2C3定期读取 TPS55288的"状态寄存器(0x7)"并将其内部存储、 MUC 通过 I2C1定期读取内部存储的数据。
此致、
Majid
您好、Majid、
您将需要使用4CC (4个字符代码) I2Cr 命令、如此处所述。
基本而言 、MCU 通过 PD 控制器的 I2C1发送4CC"I2Cr"命令->此命令会使 PD 控制器通过 I2C3向 TPS55288发送 I2C 读取命令-> MCU 从数据寄存器中的 I2Cr 命令读回数据。
要执行4CC 命令、首先需要将输入数据发送到数据寄存器(0x9表示 Data1)。 将输入数据发送到数据寄存器后、可将4CC 命令发送到 CMD 寄存器(0x8表示 CMD1)。 因此、在您的情况 下、数据是下表中所述的从器件地址、寄存器地址和字节数、该命令将是 ASCII 的十六进制"I2Cr"、有关详细信息、请参阅随附的 Excel 工作表。
e2e.ti.com/.../2072.I2Cr_5F00_4CC_5F00_cmd_5F00_example_5F00_987.xlsx
此致。
Peter
尊敬的 Peter
它不工作。
使用应用程序自定义工具、我 使用以下值从 I2C3地址为0x74 (3A << 1)的 TPS55288的寄存器0x05读取一个字节数据、我希望收到默认值0xE0、但它不起作用:
字1 (最低有效) 字1 (最低有效) 4cc 命令 4cc 命令
运行前的数据寄存器(0x9) 运行后的数据寄存器(0x9) 运行前的 CMD1 (0x8) CMD1 (0x8) -运行后
0x74050100 0x74050103 0x72433249 0x0
0x74050101 0x74050103 0x72433249 0x0
0x74050000 0x74050003 0x72433249 0x0
0x74050101 0x74050003 0x72433249 0x0
0x74010005 0x74010003 0x72433249 0x0
0x74010105 0x74010103 0x72433249 0x0
0x01000574 0x01000574 0x72433249 0x72433249
0x00010574 *未初始化 0x72433249 *未初始化
(*如果是以上行、我必须关闭/打开应用程序自定义工具软件并回收电路板的电源)
问题1:我是否正确设置了 CMD1和 Data1的值?
Q2:应用配置寄存器(0x6c)与此相关吗?
第二种方法:
I2Cr 命令也不起作用、会导致断开连接:
所有这些事件发生时、"I2C 控制器事件"运行良好。
Q3:是否有任何设置允许 I2Cr 命令工作?
此致、
Majid
尊敬的 pdjuandi
问题1:这是 TPS65987DH 还是 TPS65987DJ、您能否向我发送 pjt 文件?
回答:这是一款 TPS65987DDH 器件。
Q2:如果您使用的是 GUI 调试模式、则需要将其连接。
回答:当然 、在调试模式下运行'[I2Cr]- I2C 主设备读取'命令以读取地址0x74处的 I2C3之前、已连接应用程序自定义工具。 按下"Execute I2Cr (执行 I2Cr)"按钮后、它会断开连接。 CMD1和 Data1也是如此。
Q3:单击"Sweep I2C address..."时、您能读取 I2C 地址吗? 从适配器菜单中选择 Aardvark?
它是0x23 (下图下文)
我 的 I2C1上的 TPS65987D 地址为0x46 (0x23 << 1)、 I2C3上的 TPS55288地址为0x74 (0x3A << 1)。
同样在下图中、我在 寄存器0x64中设置 TPS55288地址、工作正常。
此致、
Majid
您好、Majid、
我看不到您的 pjt 文件、 您能否确认您在寄存器0x27中选中了"I2C3启用为主模式"? 如果您能捕获 I2C 事务并确保收到事务的 ACK、您是否能?
如果在从 GUI 调试模式中检查"I2C3作为主器件"后读数不正确、 请尝试 使用上述 Excel 工作表中的步骤。
此致、
Peter
尊敬的 Peter
在我之前的帖子中、我说 地址为0x74的 TPS55288正在工作、这意味着它已在寄存器0x27 (下图下文)中启用。
为什么你重复 我已经做过的步骤,它不起作用。
好的、这是我的项目:
e2e.ti.com/.../TPS65987DDH_5F00_Source_5F00_UFP_5F00_Test_5F00_1.pjt
首先、该项目正在工作、 TPS65987D 正在 通过 I2C3成功与 TPS55288通信、以对其进行初始化并按照 I2C 控制器事件中的定义将其输出电压设置为5V、9V、15V 和20V。
我将一个 CRO 连接到定制板上 I2C3的 SDA/SCL 引脚、信号波形 符合预期且干净、因此硬件正常。
然后我尝试了之前布置的所有步骤、奇怪的是、当我使用 I2Cr 命令时、I2C3引脚上没有信号。
然后、我想让我们执行 I2Cw 命令(下图):
它表示成功、但同样、当我使用 I2Cw 命令时、也不会通过 I2C3引脚发送任何内容。
当然、 TPS65987D 器件的 I2Cr 和 I2Cw 命令并不正确。
(我没有来自总相位的 PD 分析仪)
----------------------------------------------------
我做了另一个实验。
我执行了以下 I2Cw 命令:
(从机地址:0x0、长度:0、数据:0x1)
然后、在 CRO 上的 I2C3引脚上、我可以看到一个字节、即0x00 (下图)
更多实验:
如果我发送 (从机地址:0x1、长度:0、数据:0x1)、我将在 CRO 上获得0x2 (位0写入为0)
如果我发送 (从机地址:0x2、长度:0、数据:0x1)、我将在 CRO 上获得0x4 (位0写入为0)
等等。
在这些实验中、如果我将"数据"字段 值设置为0x0、则应用程序自定义隧道会断开连接、而 CRO 上没有数据。
在这些实验中、'Data'字段应为0x1、否则我在 CRO 上看不到任何内容。
在这些实验中、"长度"字段的值似乎可以是任何值、但它没有影响。
发生什么事了?
我只需要执行以下任务:
此致、
Majid
您好、Majid、
因此、当您首次为电路板加电时、您可以看到 I2C3与 TPS55288进行了交互、但在使用 I2Cx 命令时却没有看到。 这很奇怪。
您的范围捕获仅显示最后一个交易、因此数据可能会误导您。 如果您可以从写入从器件地址的开始捕获、那么我们就可以看到它是否会使地址发生栈等。。。
我建议 暂时搁置 GUI 中的 I2Cw 和 I2Cr 方法、并使用 Data1和 CMD 方法。
如何从系统中执行 Data1和 CMD 命令?
您是否可以按照 Excel 中的格式操作并捕获全部事务? 我不确定您是如何执行这些命令的、因此这里的顺序可能是错误的。 让我们尝试使用以下方法:
Data1 (09):0x01057403
CMD (0x08):0x7243324904
读回 CMD、确保其为0x00、然后读取 Data1。
此致、
Peter
当我将0x01057403放入 Data1时、写入成功:
当我将0x7243324904放入 CMD1时、写入似乎成功、但我收到异常:
当我关闭异常窗口时,应用程序自定义工具也会关闭。
0x444d4321表示'MC!' 或者!CMD、我 在 CRO 的 I2C3引脚上看不到任何信号。
我正在使用 Application Customization Tool 版本6.1.2、我不确定您正在使用什么!?
对于这样一个简单的任务,我的时间太长了:((
我做了另一个实验、但在解释之前、我应该提到 I2Cr 命令看起来好像是将从器件地址向左移动一位、但 I2C 主器件配置(寄存器0x64)没有。 因此、为了我的实验、我不使用0x74、而是使用0x3a。
(重要提示:在您的 Data1 CRO 捕获中、您使用了0x74、而您的 CRO 恰好显示了0x74)
如果我将0x0105003a 放入 Data1寄存器、则写入操作成功。 (我必须使用四个字节、否则、当我运行 I2Cr 命令时、应用程序自定义工具会断开连接)
如果我将0x72433249放入 CMD1寄存器、我可以在 I2C3引脚的 CRO 上看到只有 ACK 为0x74的从地址:
并且 CMD1的值保持为0x72433249。
当我使用板载 MCU 运行 I2Cr 命令时、我也会获得相同的结果。
您好、Majid、
在设置中、数据被移位的原因令人奇怪、等等。
您的最后一次捕捉在0x74上显示 NACK、您的从地址是7位还是8位寻址格式? 请检查。
我没有可以连接到 I2C3的设置、因此我无法验证 I2C3上的事务、如果您也可以进行检查。
我在这里附加了我使用的方法、让我们来尝试一下您的设置。
e2e.ti.com/.../I2Cr_5F00_4CC_5F00_cmd_5F00_example_5F00_987_5F00_majid.xlsx
此致、
Peter
你(们)好
我已经完成了这个。 我 在 最近的项目中暂停使用 TI 的 TPS65987D 和 TPS55288。
我还需要将此问题上报至下一级别。 我认为问题出在 TPS65987D 芯片内部(您发送给我的文档中的固件、设置或 I2Cr 命令语法错误)。
我通过 MCU (不带应用程序自定义工具)进行的直接尝试会提供与使用应用程序自定义工具相同的结果。
如果这个问题不能很快解决、我将取消在我的设计中使用您的芯片。
P.S.
我进行了大量的设计和开发来通过 I2C 进行通信;成功地使用 了 LP55231、 BQ51221、 BQ27220、 DRV2605L 等芯 片、甚至通过 I2C 进行的 TPS65987D 通信也可以正常工作。
问题在于 、 如果我使用 I2Cr/I2Cw 命令、TPS65987D 无法从 I2C1向 I2C3传递数据、而 I2C 控制器事件(I2C3作为主器件启用)工作正常。
我期待着听取你对这一问题的裁决。
此致、
Majid
尊敬的 Peter
我对此表示赞赏。 我在这里捕获的图像:
1.从 Application Customization Tool 版本6.1.2成功连接到 地址0x23处的定制板 TPS65987D 的 I2C1引脚
TPS65987D 的器件信息
3.成功协商电力输送
I2C3被启用为主机
I2C3的 I2C 从地址设置为 自定义电路板的 TPS55288的 I2C 引脚、地址0x74为0x3A << 1
6.我在配置中使用了14个索引,所有这些索引都成功运行。
7.按照'I2CR_4CC_cmd_example_987_Majid.xlsx'文档中的说明写入 Data1寄存器0x9
8.此处确认 Data1已成功写入
9. 按照'I2CR_4CC_cmd_example_987_Majid.xlsx'文档中的说明写入 CMD1寄存器0x8
9.1、然后按下"Execute Write"按钮
9.2 在按下"执行写入"按钮后
9.3在前一步骤9.2之后没有通信
注:
一 我的示波器已在定制板 TPS65987D 芯片的 I2C3引脚上设置、用于监控 SDA 和 SCL 引脚。
二 当写入 Data1寄存器0x9时、 TPS65987D 的 I2C3引脚上没有预期的信号、我的 CRO 上没有信号、这是正确的。
三 按下'Execute Write'按钮将0x72433249写入 CMD1寄存 器0x8后、TPS65987D 的 I2C3引脚上会出现时钟和数据信号、但遗憾的是任一引脚上都没有信号、这就是问题所在。 此外 、应用程序自定义工具会从 地址0x23处的定制板 TPS65987D 的 I2C1引脚断开连接、并且我必须回收定制板上的电源以使其正常工作。
四 在步骤1 ~ 9中、很明显、信号通过 I2C1引脚在应用程序自定义工具和 TPS65987D 之间传输、因此我没有提供 CRO 图像。
V.在 您的'I2CR_4CC_cmd_example_987_Majid.xlsx'文档中、您捕获了 TPS65987D 的 I2C1引脚发出的 CRO 信号、这并不有用、因为问题出在 I2C3引脚而非 I2C1上。
六 为了进行演 示、以下是我的 CRO 的捕获图像、当我从定制板上拔下 USB-C 电缆时、TPS65987D 通过 I2C3引脚向 TPS55288的寄存器0x00和0x01发送0x00d2、以将电压设置为5V、这是安全的。
VII. A 记录索引13、 由 TPS65987D 在分离事件时调用:
即我的 CRO 上的 I2C3信号(抱歉、我的 CRO 没有 USB、但软盘、屏幕宽高比不宽、因此出于可读性原因、我将其分解为两个)
整个信号:
开始:
我对 起始信号的解释:
结束:
我对 结束信号的解释:
七 您可以看到4个字节的数据;0x74 (从器件地址)、0x00 (寄存器地址)、0xD2 (地址0x0的数据)、0x00 (地址0x1的数据)已通过 I2C3引脚成功发送。
八 我搜索了您的 e2e 论坛、找到了 I2Cw 命令语法。 它有一个位可以指定 I2C1 (零)或 I2C3 (一个);表4-44。 表4-37中的 I2Cr 格式是否是最新的?
九 如果不使用应用程序自定义工具、而只使用定制板上的板载 MCU、我将面临完全相同 的问题。
x.我认为 I2Cw 命令语法也是过时的。 没有、表4-44中提到了寄存器偏移的位置、以开始写入。
结论:
我对整个问题的理解是、如果 TPS65987D 的固件中既没有错误 、也没有特定设置要求、则 I2Cr 命令的格式(表4-37)不是 TPS65987D 所期望或理解的格式。
此致、
Majid
Majid、
Peter 复制了您可以写入的确切数据以及您可以预期的数据、他还向电子表格(I2CR_4CC_cmd_example_987_Majid.xlsx)提供了他如何使用该工具的信息。
您是否可以按照 Excel 中的格式操作并捕获全部事务? 我不确定您是如何执行这些命令的、因此这里的顺序可能是错误的。 让我们尝试使用以下方法:
Data1 (09):0x01057403
CMD (0x08):0x7243324904
读回 CMD、确保其为0x00、然后读取 Data1。
我在下面看到您的消息、即您进行了 I2C3交易
[引用 userid="493615" URL"~/support/interface-group/interface/f/interface-forum/1028695/tps65987d-send-data-to-i2c3-over-i2c1/3816847 #3816847]VII 您可以看到4个字节的数据;0x74 (从器件地址)、0x00 (寄存器地址)、0xD2 (数据到地址0x0)、0x00 (数据到地址0x1)已通过 I2C3引脚成功发送。[/QUERPILET]您的待处理问题是什么?
如果我问您的应用是什么、 I2C3主器件的用途主要是 PD 控制器来控制 USB 多路复用器等器件、以便从 I2C 主表进行简单的 I2C 写入。 它不适用于从 I2C1到 I2C3的隧道。 可能会出现冲突、从而导致问题。
您好!
这一切都与 I2C1到 I2C3的隧道有关。 这个问题的标题是关于 I2C1到 I2C3的隧道、正如我问的:
问题:"主机 MCU 是否可以 通过 I2C1向 I2C3发送数据/命令? (例如通过 I2C1向 SPI 发送数据/命令)"
答案是肯定的。 根据下面以黄色突出显示的文本:
同样、您没有完全阅读我的帖子、只需从上下文中挑选一些内容、然后重复并重复相同的答案。
上次:通过 I2C1从 MCU 或应用程序自定义工具进行通信是可以的。 为什么要继续在 I2C1上捕获信号!?
I2C1和 I2C3之间的隧道不起作用。
I2Cr 和 I2Cw 命令的用途是什么?
"您的待处理问题现在是什么?"
问题是 I2Cr 和 I2Cw 命令、这些命令不执行它们预期的操作。
您说:"如果我问您的应用是什么。 I2C3主器件的用途主要是 PD 控制器来控制 USB 多路复用器等器件、以便从 I2C 主表进行简单的 I2C 写入。 它不适用于从 I2C1到 I2C3的隧道。 可能会出现冲突、从而导致问题。"
但是、上图中突出显示的文本恰好相反。 它应该起作用。 我的问题是为什么不呢?
Majid、
我猜您已经看过这篇文章 (+) TPS65987D:"I2Cr"-接口论坛-接口- TI E2E 支持论坛的文档 ? 在这个示例中、您可以看到 I2Cw 命令工作正常、绅士的 I2Cr 命令有问题。
您是否有办法在 Saleae 等逻辑分析仪上捕获您的 I2C3流量? 这可能有助于我了解您面临的问题或是否存在格式错误。
我不知道我们为什么要进入环路。
在您提到的帖子中、Emma 提供了3个步骤。
问题出在步骤1之后,即:“1。 您将首先写入 I2Cr CMD"、TPS65987D 变为无响应、我必须重置 TPS65987D (正如我在上一篇文章中所述;步骤9.2)。 步骤2没有意义,即:"2. 然后、您将读取 CMD 寄存器以验证 CMD"
我相信那位绅士,“埃里克”,就像我那样放弃了。
底线是 I2Cr 在 TPS65987D 上不起作用、TI 不希望也不感兴趣解决它。