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.

[参考译文] LP5569:LP5569

Guru**** 2511415 points
Other Parts Discussed in Thread: LP5523, LP5569

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/921319/lp5569-lp5569

器件型号:LP5569
主题中讨论的其他器件:LP5523

大家好、我不确定这是适合我的问题的论坛、但这正是 TI 发送给我的论坛。  

我正在更新一个 Linux 驱动程序、我发现它有一些错误。 它的大部分功能正常-它可以单独控制 LED 并使用自定义程序运行单个引擎。  


问题是当我尝试让多个引擎运行时。 我可以在 i2c 接口上看到正确的数据被发送到芯片。 这些是我遵循的步骤。
-将 Engine1_MODE 设置为"load"
-将程序加载到 Engine1_LOAD (该程序向红色 LED 发出脉冲)
-将 Engine1_MODE 设置为"run"
此时、编程的预期红色 LED 脉冲。 然后、我按如下方式对第二个引擎进行编程。
-将 engine2_mode 设置为"load"
-将程序加载到 engine2_mode (此程序向绿色 LED 发出脉冲)
-将 engine2_mode 设置为"run"
此时、相同的红色 LED 脉冲。 它似乎正在运行 Engine1的程序。

除上述问题外,我还有几点需要澄清。
我正在使用 LP5523 LASM 汇编器生成程序。 当我有多个程序并且在顶部有一个 LED 映射表时、对每个引擎进行编程时是否包括该表? 我已经尝试使用表进行编程、仅用于第一个引擎以及每个引擎。 但是、我没有看到任何行为差异。
2.在 LP5523数据表中、ENGINE_CONTROL2的信息意味着只要任何发动机处于负载模式、所有发动机都将处于保持状态。 如果只将发动机模式设置为加载、则不清楚是否会自动将所有发动机设置为保持状态。 但是、在 LP5569中、它表示"如果任何引擎设置为加载程序模式、则其他引擎应设置为
禁用或加载程序模式、因为加载 SRAM 时禁止执行指令"。 根据这一点、我假设必须手动将任何正在运行的引擎设置为禁用或加载模式。 是这样吗?

此致、

Daniel

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

    Daniel、您好!

    您能帮您分享您的引擎代码吗?

    1.可以。如果需要通过引擎控制多个通道、则需要在顶部包含 LED 映射表。 如果您只控制一个通道、则可以使用 MAP_SEL、因此无需该表。

    2.是的,您需要手动将正在运行的引擎设置为禁用或加载程序模式。

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

    您好、Hardy、

    感谢您的回答。 很抱歉重播太晚了。 这是引擎源代码、可使用汇编的 LP5523进行编译

    红色:DW 0000000100000000b
    GRN:DW 000000010000b
    蓝光:DW 000000000001b

    .segment program1;段的开头
    MUX_MAP_addr RED;映射表起始地址;第一行被激活
    loop1:ramp 2.0 255;循环开始、设置 PWM 满量程
    斜坡2.0 -255
    斜坡2.0 -255
    分支0 loop1;无限循环
    RST

    .segment program2;段的开头
    MUX_MAP_addr grn;映射表起始地址;第一行被激活
    等待0.45
    loop2:ramp 2.0-255;循环开始、设置 PWM 满量程
    斜坡2.0 255
    斜坡2.0 -255
    分支0 loop2;无限循环
    RST

    .segment program3;段的开头
    MUX_MAP_addr Blu;映射表起始地址;第一行被激活
    等待0.45
    等待0.45
    loop3:ramp 2.0-255;循环开始,设置 PWM 满量程
    斜坡2.0 -255
    斜坡2.0 255
    分支0 loop3;无限循环
    RST

    这是 hex 文件

    01 00 00 10 00 01 9F 80 20 FF 21 FF 21 FF A0 01
    00 00 9F 81 7A 00 21 FF 20 FF 21 FF A0 02 00
    9F 82 7A 00 7A 00 21 FF 21 FF 20 FF A0 03 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    @ 03程序1
    @ 09程序2.
    @ 10程序3.

    BTW、我不使用 MSP430板对其进行编程。 我直接为每个发动机使用驱动器。 因此、我仍然不确定您在顶部添加表格意味着什么。 当我对 Engine1进行编程时、我选择引擎并加载程序、包括映射表。 我还不清楚的是、当我对 engine2和 Engine3进行编程时、我是否仍需要在程序之前为每个引擎添加映射表? 无论是否添加表、我都没有看到任何区别。  

    此致、

    Daniel

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

    Daniel、您好!

    很抱歉我错过了通知。 我提到了表

    'd:DW 0000000100000000b
    GRN:DW 000000010000b
    蓝光:DW 000000000001b'

    用于映射相关操作通道。 需要在整个程序的前面添加它、但不需要在 engine2和 Engine3之前添加它。  发动机代码可以控制不同的通道。 我还在 EVM 上进行了验证。

    那么问题仍然是 engine2和 Engine3控制红色 LED、对吧? 您能不能帮助分享您的原理图和详细寄存器设置过程  

    "-将 Engine1_MODE 设置为"load"
    -将程序加载到 Engine1_LOAD (该程序向红色 LED 发出脉冲)
    -将 Engine1_MODE 设置为"run"
    此时、编程的预期红色 LED 脉冲。 然后、我按如下方式对第二个引擎进行编程。
    -将 engine2_mode 设置为"load"
    -将程序加载到 engine2_mode (此程序向绿色 LED 发出脉冲)
    -将 engine2_mode 设置为"run"
    此时、相同的红色 LED 脉冲。 它似乎正在运行 Engine1的程序。" ?

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

     您好、Hardy、

    感谢您的回答。 请参阅下面突出显示的我的答案  

    胡汉迪 回答 LP5569:LP5569

    Daniel、您好!

    很抱歉我错过了通知。 我提到了表

    'd:DW 0000000100000000b
    GRN:DW 000000010000b
    蓝光:DW 000000000001b'

    用于映射相关操作通道。 需要在整个程序的前面添加它、但不需要在 engine2和 Engine3之前添加它。  ​我不明白您在整个程序的前面添加的意思。 使用 i2c 接口、我只能加载三个程序和三个 LED 映射值。 通过在前面添加、您是否意味着将其添加到 Engine1的程序中?  发动机代码可以控制不同的通道。 我还在 EVM 上进行了验证。  ​您是否能够同时运行全部三个引擎并查看正确的 LED 行为? 不清楚您是否成功运行了所有发动机。 我没有做的一件事是在加载发动机时停止其他正在运行的发动机。 这是否会导致问题?  

    那么问题仍然是 engine2和 Engine3控制红色 LED、对吧? 您能不能帮助分享您的原理图 。没有原理图可供讨论。 我刚刚将 LP5569EVM 连接到电路板上的 i2c 接口。 我在发动机1上运行了不同的程序、以测试所有 LED、并检查所有 LED 是否处于工作状态

    和的详细寄存器设置过程  

    '-将 Engine1_MODE 设置为"load"     ​ echo load > Engine1_MODE
    -将程序加载到 Engine1_LOAD (该程序向红色 LED 发出脉冲)    回显"0010xxxxx..." > Engine1_LOAD
    -将 Engine1_MODE 设置为"run"      ​echo run > Engine1_mode
    此时、编程的预期红色 LED 脉冲。 然后、我按如下方式对第二个引擎进行编程。
    -将 engine2_mode 设置为"load"    ​ echo load > engine2_mode
    -将程序加载到 engine2_mode (此程序向绿色 LED 发出脉冲)   ​ echo "hex program"> engine2_mode
    -将 engine2_mode 设置为"run"      ​echo run > engine2_mode
    此时、相同的红色 LED 脉冲。 它似乎正在运行 Engine1的程序。" ?

     

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

     Daniel、您好!

     ​我不明白您在整个程序的前面添加的意思。 使用 i2c 接口、我只能加载三个程序和三个 LED 映射值。 通过在前面添加、您是否意味着将其添加到 Engine1的程序中?
    很抱歉、您可能会感到困惑、请忽略这一点。 您的代码是正确的。 我尝试说的是、声明执行输出通道短名称的这三个 dw 命令需要位于整个程序前面。   

    您是否能够同时运行全部三个引擎并查看正确的 LED 行为? 不清楚您是否成功运行了所有发动机。 我没有做的一件事是在加载发动机时停止其他正在运行的发动机。 这是否会导致问题?  
    是的、我同时运行全部三个代码、它们可以像描述的代码那样独立运行。 您是否首先尝试运行 engine2并查看它是否可以控制 LED?  

    以了解 详细寄存器设置过程
    我没有适用于您的程序的驱动程序代码、因此我无法确定您的命令究竟设置了哪些寄存器。 需要确认的一点是,我看到有两个'echo "0010xxxxx...">Engine1/2_load'命令。 这是否意味着您将整个十六进制程序上载两次? 还是将 hex 程序分为3个部分并单独上传?   
    我通常所做的是1)将所有引擎设置为加载模式(将0x54写入寄存器0x02) 2)将整个十六进制程序上载到 SRAM 3) 将所有引擎设置为运行模式(将0xA8写入寄存器0x02) 4)执行引擎(将0xA8写入寄存器0x01)

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

    你(们)好、哈迪

    很抱歉、您可能会感到困惑、请忽略这一点。 您的代码是正确的。 我尝试说的是、声明执行输出通道短名称的这三个 dw 命令需要位于整个程序前面。 -- 这是我还没有得到的部分。 如何将其置于整个程序的前面?

    需要确认的一点是,我看到有两  个'echo "0010xxxxx...">Engine1/2_load'命令。 这是否意味着您将整个十六进制程序上载两次? 还是将 hex 程序分为3个部分并单独上传? --如果我要对多个引擎进行编程,我将分别上传每个引擎的部分。 对于您加载和测试的程序、该程序已划分为每个引擎的三个单独负载。 第一个引擎程序始终包含地图表。 对于接下来的两个引擎、我尝试在加载和不加载程序的情况下加载。  

    我通常做的是1)将所有引擎设置为加载模式(将0x54写入寄存器0x02) 2)将整个十六进制程序上载到 SRAM 3) 将所有引擎设置为运行模式(将0xA8写入寄存器0x02) 4)执行引擎(将0xA8写入寄存器0x01)- -我不清楚第2步。 我使用回波"xxxx..." > enginex_load 命令。 我将整个程序上传到哪个地址?  

    附件是驱动程序源。

    e2e.ti.com/.../leds_2D00_lp5569.c

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

    Daniel、您好!

    如何将其置于整个程序的前面?
    中的代码已包含此部分。 'D:DW 0000000100000000b grn:DW 000000010000b Blu:DW 0000000000000001b'由 LASM 汇编器转换为'01 00 10 00 01'

    如果我要对多个引擎进行编程、我会单独上传每个引擎的部分。  
    如何分隔十六进制程序?  整个十六进制程序只需上传一次。 如果您在3次内上传、也应该是可以的。

    我将整个程序上传到哪个地址?
    程序地址从寄存器50h 到6Fh、而 PAGE 由寄存器4Fh 选择。 您可以在数据表第39页中找到它。 很抱歉、我不是软件工程师、我很难在短时间内理解源代码。 我没有找到回波"xxxx..."的声明 > enginex_load 命令。 这里还有头文件"LED-lp55xx-common.h"和"LED-lp55xx.h"也可能需要与我共享。

    在我看来、可能会导致您的情况的一件事是、这里有 prog_start_addr 寄存器(0x4B、0x4C、0x4D)、用于设置每个引擎的程序启动地址。 您是否在程序中设置了它? (对于您的程序、将0x03写入 Engine1的寄存器0x4B、将0x09写入 engine2的寄存器0x4C、将0x10写入 Engine3的寄存器0x4D)

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

    您好、Hardy、  

    感谢您的帮助、但我想我需要拥有更多软件背景的人的帮助。 您请求的源文件是 Linux 内核的一部分、您可以找到这些文件。  

    此致、

    Daniel

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

    Daniel、您好!

    很抱歉、我们团队中没有其他人拥有 Linux 经验... 由于您的发动机代码良好、我认为我们几乎已关闭、只需检查一些寄存器设置。

    您是否曾尝试过我在前一次有关 prog_start_addr 寄存器的答复中提到的内容?  原始设置中的寄存器0x4B、0x4C、0x4D 值是多少? 我认为代码中应该有单个寄存器读取函数。