主题中讨论的其他器件: MSP-FET
大家好、
我正在使用 MSP430FR5969设计定制 PCB、并在参阅此博客后以类似的方式使用 CP2102进行编程;
和
和
经过上述链接后,我开发了以下原理图:
问题1. 原理图是否正确?
问题2. DTR (CP2102的)连接是否需要反相、然后连接到 MSP430FR5969的复位?
问题3. 我是否需要注意其他任何预防措施?
谢谢、此致
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.
大家好、
我正在使用 MSP430FR5969设计定制 PCB、并在参阅此博客后以类似的方式使用 CP2102进行编程;
和
和
经过上述链接后,我开发了以下原理图:
问题1. 原理图是否正确?
问题2. DTR (CP2102的)连接是否需要反相、然后连接到 MSP430FR5969的复位?
问题3. 我是否需要注意其他任何预防措施?
谢谢、此致
您的帖子中的第二个参考涉及使用 CP2102对 G2553器件进行编程。 G2553是一款较旧的器件、使用 TI 的软件 BSLDEMO.exe 进行编程。 该程序 直接在 DTR 和 RTS 上输出启动 BSL 所需的脉冲、但使用 CP2102时 DTR 的极性错误。
但是、FR5969是比 G2553具有完全不同 BSL 协议的更新器件。 它使用 TI 的 BSL Scripter 软件进行编程。 遗憾的是、Scripter 根本不会生成 DTR 和 RTS 脉冲。 这取决于"火箭"或 MSPFET 编程器件。
因此、除非(1)您编写自己的软件来对 FR5969进行编程、(2)您重新编写 BSL Scripter 以便让它可以选择直接发出 DTR 和 RTS 脉冲、否则我相信您的想法不会奏效。 或者(3) TI 为您(以及我们所有人)重新编写。
过去,我试图理解你第一次提到的问题,但却无法理解。 所有内部链接都是坏的、我只是不能理解他在做什么。
据我所知、没有人成功地使用简单的 CP2102适配器、或类似的适配器、没有 Rocket、MSPFET 或等效的第三方器件以及 BSL Scripter。 这是很不幸的、因为如果将需要 BSL Scripter 的产品发送给客户、除了包含可能比产品本身成本更高的编程器件之外、没有实际的固件更新方法。 使用 BSLDEMO 的旧器件不是这种情况、因为 CP2102模块非常便宜、并且 CP2102甚至可以用几美元嵌入到项目电路中。
我的第一个答复涉及用于刷写 FR5969的软件。 我还应该解决您的硬件问题。
问题1. 假设您需要反转 CP2102 DTR 输出、原理图看起来是正确的。 但也可以参阅 Q3、了解 CP2102断电时这些连接的状态。 此外、您不会显示如何为 CP2102供电。 CP2102/9和 CP2102N (数据表的 v1.2)的数据表为新设计推荐、提供了各种电源选项的出色图表。 在任何情况下、我相信您都需要将 VBUS 输入连接回 USB 5V 线路、可能需要通过分压器来启用 CP2102。 我的理解是、CP2102 (N)完全不会运行、除非它检测到 USB 已连接。
问题2. 反相 DTR 的问题完全取决于您使用什么软件来生成 DTR/RTS 信令模式。 如果您可以将示波器连接到这些输出、则软件启动时生成的图形应如 SLAU550P 第3.3.2节的图2所示。
问题3. 请注意、当 CP2102断电时、它的所有 I/O 引脚都会变成灌电流-它们的运行方式就像通过电阻器接地一样。 如果 CP2102由 USB 总线供电、但 FR5969由另一个电源供电、这会使事情变得复杂。 如果不需要反转、最大的问题通常涉及 DTR 输出。 空闲时、DTR 通常为高电平、但当 CP2102断电时、DTR 将变为低电平。 如果它直接连接到 FR5969的/Reset、则可能会将处理器保持在永久复位状态、这不是您想要的。 虽然与 FR5969没有直接关系、但我在 Github 上发布了一个有关将 CP2102连接到 MSP430G 器件的冗长 PDF、并且从第11页开始讨论硬件可能会有所帮助。
使用嵌入式 USB 转串行适配器的 Gbhug5a-MSP430-BSL MSP430G BSL
我仍然对您将用于此 BSL 的软件感到好奇。 我希望你能公布这方面的情况。
[引用用户="George Hug"]
您的帖子中的第二个参考涉及使用 CP2102对 G2553器件进行编程。 G2553是一款较旧的器件、使用 TI 的软件 BSLDEMO.exe 进行编程。 该程序 直接在 DTR 和 RTS 上输出启动 BSL 所需的脉冲、但使用 CP2102时 DTR 的极性错误。
但是、FR5969是比 G2553具有完全不同 BSL 协议的更新器件。 它使用 TI 的 BSL Scripter 软件进行编程。 遗憾的是、Scripter 根本不会生成 DTR 和 RTS 脉冲。 这取决于"火箭"或 MSPFET 编程器件。
因此、除非(1)您编写自己的软件来对 FR5969进行编程、(2)您重新编写 BSL Scripter 以便让它可以选择直接发出 DTR 和 RTS 脉冲、否则我相信您的想法不会奏效。 或者(3) TI 为您(以及我们所有人)重新编写。
过去,我试图理解你第一次提到的问题,但却无法理解。 所有内部链接都是坏的、我只是不能理解他在做什么。
据我所知、没有人成功地使用简单的 CP2102适配器、或类似的适配器、没有 Rocket、MSPFET 或等效的第三方器件以及 BSL Scripter。 这是很不幸的、因为如果将需要 BSL Scripter 的产品发送给客户、除了包含可能比产品本身成本更高的编程器件之外、没有实际的固件更新方法。 使用 BSLDEMO 的旧器件不是这种情况、因为 CP2102模块非常便宜、并且 CP2102甚至可以用几美元嵌入到项目电路中。
[/报价]
我能够使用以下代码生成 SLAU550 (图2、第7页)中提到的 BSL 调用序列:
链接
但是、当我在运行 BSL_scripter 之后尝试运行该脚本时、我得到了以下输出:
我将 CP2102与 MSP430FR5969搭配使用、并在 Manjaro Linux 下使用 GCC 8.2.1 20180831编译了 BSL_Invoke.c。
e2e.ti.com/.../BSL_5F00_invoke.c
还附加了我与 BSL_scripter 一起使用的示例脚本
e2e.ti.com/.../script_5F00_blink_5F00_led.txt
e2e.ti.com/.../Blink_5F00_led.txt
首先、我应该说我对 Linux 一无所知。 因此、我必须将其留给您、以确保在模式行中对 COM 端口的指定是正确的。 在 Windows 中、它将是由 Silabs 驱动程序创建的虚拟 COM 端口的名称、没有提到"USB"。 但我不知道这在 Linux 中是如何工作的。
否则、我建议您尝试在模式行的末尾添加奇偶校验。 SLAU655F 表示 Scripter 默认为无奇偶校验、但几乎所有 BSL 都需要偶校验。 通常情况下、Rocket 或 MSP-FET 会生成奇偶校验位、但由于您使用的是 CP2102、我认为您需要在脚本编辑器中打开偶校验、这是通过向模式行添加奇偶校验来实现的。
对于测试、发送错误的密码导致批量擦除、然后发送默认密码后、我建议您只执行 TX_BSL_VERSION、以查看是否在两个方向上都能正常工作。
非常感谢 DTR/RTS 代码。 如果您有指向 Windows 版本的链接、这将很有帮助。 否则、我可能会尝试写入一个。 我认为、在运行脚本编写器之前、具有单独的可执行文件会生成 BSL 进入模式、这将非常有用、并允许使用标准的 USB 转 UART 适配器、如带有脚本编写器的 CP2102。
请告诉我奇偶校验是否起作用。
编辑: 我想到了另一个可能的问题。 如果脚本编写器在打开 COM 端口时初始化 DTR 和 RTS、则此方法可能不起作用。 如果 Scripter 在开始时将 DTR 置为低电平、则 FR5969将复位、BSL 会话将被取消。 如果 RTS 只是临时状态、则将其置于错误状态可能不是一个大问题。 启动 BSL 会话后、代码必须将这些行保持在正确的状态(DTR 高电平、RTS 低电平)、并且脚本编写器在运行时不得更改这些行。
[引用用户="George Hug"]
编辑: 我想到了另一个可能的问题。 如果脚本编写器在打开 COM 端口时初始化 DTR 和 RTS、则此方法可能不起作用。 如果 Scripter 在开始时将 DTR 置为低电平、则 FR5969将复位、BSL 会话将被取消。 如果 RTS 只是临时状态、则将其置于错误状态可能不是一个大问题。 启动 BSL 会话后、代码必须将这些行保持在正确的状态(DTR 高电平、RTS 低电平)、并且脚本编写器在运行时不得更改这些行。
[/报价]
我编写了一个 Windows 版本的程序、当它退出时、它会将两行保留在正确的状态-/Reset 为高电平、test 为低电平。 但是、当 BSL-Scripter 运行时、它会复位 DTR 线路、且/Reset 为低电平、处理器无法正常工作。 我遇到了与您相同的错误、但未连接任何器件、因此我认为您的 FR5969可能在脚本编写器运行时处于复位状态、并且不执行任何操作。
我不知道解决这个问题的方法是什么、只是重新编译脚本解释器、以便在找到它们时保留 DTR 和 RTS。 但这可能会使使用 Rocket 或 MSP-FET 的情况变得混乱。
我使用脚本进行了测试。 我没有检查 Scripter 的命令行模式以查看它是否也会将 DTR 拉低、但如果我有时间、我会尝试。 如果这会产生任何影响,我会感到惊讶。
因此、我想说、这看起来并不是很有希望的。 最好的解决方案仍然是让 TI 通过一个选项来修改脚本编写器、使其能够与 CP2102等通用适配器配合使用。
尊敬的乔治:
[引用 user="George Hug">首先,我应该说我对 Linux 一无所知。 因此、我必须将其留给您、以确保在模式行中对 COM 端口的指定是正确的。 在 Windows 中、它将是由 Silabs 驱动程序创建的虚拟 COM 端口的名称、没有提到"USB"。 但我不知道这在 Linux 中是如何工作的。
我检查了端口名称、它是正确的、并且它成功地打开了端口。
[引用用户="George Hug"]
否则、我建议您尝试在模式行的末尾添加奇偶校验。 SLAU655F 表示 Scripter 默认为无奇偶校验、但几乎所有 BSL 都需要偶校验。 通常情况 下、Rocket 或 MSP-FET 会生成奇偶校验位、但由于您使用的是 CP2102、我认为您需要在脚本编辑器中打开偶校验、这是通过向模式行添加奇偶校验来实现的。
对于测试、发送错误的密码导致批量擦除、然后发送默认密码后、我建议您只执行 TX_BSL_VERSION、以查看是否在两个方向上都能正常工作。
[/报价]
好的、将尝试此操作。
[引用 user="George Hug">非常感谢 DTR/RTS 代码。 如果您有指向 Windows 版本的链接、这将很有帮助。 否则、我可能会尝试写入一个。 我认为、在运行脚本编写器之前、具有单独的可执行文件会生成 BSL 条目模式、这将非常有用、并允许使用标准 USB 转 UART 适配器、如带有脚本编写器的 CP2102。
似乎您已经知道了、但无论如何、 此链接 会很有帮助。
[引用 user="George Hug"]编辑: 我想到了另一个可能的问题。 如果脚本编写器在打开 COM 端口时初始化 DTR 和 RTS、则此方法可能不起作用。 如果 Scripter 在开始时将 DTR 置为低电平、则 FR5969将复位、BSL 会话将被取消。 如果 RTS 只是临时状态、则将其置于错误状态可能不是一个大问题。 启动 BSL 会话后、代码必须将这些行保持在正确的状态(DTR 高电平、RTS 低电平)、并且脚本编写器在运行时不得更改这些行。[/QUERT]
我通过逻辑分析仪检查了信号。 BSL 脚本编写器启动时、会下拉 CP2102的 DTR 和 RTS 行。 我已经浏览过它的代码、我认为它使用 libusb 来控制 RTS 和 DTR 线路。 我们可能需要重新编译 BSL 脚本编写器代码以删除该 DTR/RTS 器件。
当 BSL 脚本编写器正在传输时、MSP430FR5969会给出一些回复、如下图所示(查看 TXD 和 RXD 行):
[引用 user="George Hug">我编写了一个 Windows 版本的程序,当程序退出时,它会将两行保留在正确的状态-/Reset 为 HIGH,test 为 LOW。 但是、当 BSL-Scripter 运行时、它会复位 DTR 线路、且/Reset 为低电平、处理器无法正常工作。 我遇到了与您相同的错误、但未连接任何器件、因此我认为您的 FR5969可能在脚本编写器运行时处于复位状态、并且不执行任何操作。
我更改了代码中的调用序列部分、因为上一个调用序列生成了不正确的序列(更新 了存储库)。 我还发现 tSBW、EN 必须介于250ns (slau550p、第7页、图2)和110us (MSP430FR5969数据表、第52页、表5-35)之间(在 存储库中添加了 SLEEP_us 函 数以处理此问题)。 但使用我的代码,我无法生成 tSBW,EN 低于386us (因为我们的系统是多线程的,所以操作系统可能正在处理一些其他进程,而不是 SLEEP_US 函数)。 寻找某种方法来生成准确的时间戳。 我没有浏览过 BSLdemo 代码,但您非常熟悉它,而且您在前面也提到它确实会生成这些 DTR/RTS 序列,因此他们会使用哪一个系统库?
以下是生成的调用序列:
我的观点(根据 slau550p、第7页、图2)。 在启动调用序列之前,我还将测试行设置为低电平(在 slau550p 中提到)(在我的代码的前一版本中没有)。 如果有问题、请告诉我。
[引用 user="George Hug">我不知道解决方案是什么、只是重新编译脚本、以便在找到它们时保留 DTR 和 RTS。 但这可能会使使用 Rocket 或 MSP-FET 的情况变得混乱。[/QUERP]
是的、很可能我们必须重新编译它。 我们可以添加在 Rocket、MSP-FET 或 CP2102之间进行选择的选项(可以在参数中给出)
我无法使 quote 函数正常工作、因此我将这样做:
>我已将代码中的调用序列部分更改为
>上一个正在生成不正确的序列(已更新
>存储库)。 我还发现 tSBW、EN 必须介于之间
大于250ns (slau550p、第7页、图2)和110us (MSP430FR5969
>数据表、第52页、表5-35)(在中添加了 SLEEP_us 功能
>要处理此问题的存储库)。 但我的代码是
>无法生成小于386us 的 tSBW,EN (作为我们的
>系统是多线程的,因此操作系统可能正在处理某些线程
>其他进程而不是 SLEEP_US 函数)。 看到的
>以获得生成精确时间戳的某种方法。 我没有
>浏览了 BSLdemo 代码、但确实如此
>熟悉它、您之前也提到过它
>生成这些 DTR/RTS 序列、然后生成哪个系统库
>他们用了什么呢?
我不认为 tSBW/EN 的解释是正确的。 请在上图2的文本中注意:
"TEST 引脚的第一个高电平必须至少为 tSBW、En (tSBW、En 参数请参阅器件专用数据表)。"
实际上、它是第一个正测试脉冲的最短持续时间。 相比之下、G2553的 tSBW、EN 最大值为1us、但 BSLDEMO 产生的实际脉冲为15ms。 这种方法效果非常好。 也许拥有火箭或 MSP-FET 的人可以测量其为 FRxx 器件产生的实际持续时间。
BSLDEMO 比 Scripter 早。 它是用 C 语言编写的、不使用任何第三方环境、只需进行标准 Windows 调用即可切换 DTR 和 RTS 级别。 我不相信有 Linux 或 Mac 版本。
我不理解 Scripter 源代码。 源代码中唯一出现的"DTR"是在 TestReset.h 中、但我不理解它在做什么、也不知道它是如何执行的。 如果您重新编写代码、我认为这样做的方法可能是提供一个额外的模式行选项、也许称为适配器、如果存在该选项、将绕过正在更改行的任何代码、并替换执行 DTR/RTS 模式的代码。
我在单独的主题中发布了、要求对 tSWB、en 进行澄清。
在 Linux 中还有一种可能适合您、但在 Windows 中可能不适合您。 一位朋友告诉我、有一种方法可以阻止 Scripter 调用更改 DTR 和 RTS 的特定 Linux 例程的条目。 这可能是插入挂钩、这样调用只会返回而没有错误、但不会执行任何操作。 或者、在 Linux 中可能有一种正式的方法来实现这一目的。 无论如何、我们的想法是运行您的程序、该程序传输 BSL 调用序列、并且还会阻止对这些行的进一步更改、然后运行脚本、最后运行另一个程序、该程序会反转阻止并使内容恢复正常。 或者可能涉及从调用程序中运行脚本解释程序。
这样做的好处是完全不必修改脚本。 随着添加对新器件的支持、它会定期更新、最好不要修改每一个脚本更新。
[引用用户="Wei.Jeim Zhao]Hi George、
因此、我想说、这看起来并不是很有希望的。 最好的解决方案仍然是让 TI 通过一个选项来修改脚本编写器、使其能够与 CP2102等通用适配器配合使用。
[Wei]当然、我将向我们的工具团队反馈未来发展计划。
[/报价]
感谢您的邀请。 如果该系列需要/Reset and Test 上的调用模式、并且该模式是 UART、则可能在模式行上有一个"适配器"或"调用"选项、这会导致脚本执行调用模式本身。 我认为不需要任何其他更改。 毕竟、我们有 了 SLAA535a.pdf G2 launchpad 和 G2231设置、这种设置只执行调用模式并添加偶校验、脚本解释器似乎可以正常使用该设置。
但是、在我回来的时候、我跑了一段时间、为 BSLDEMO 获得了类似的更改、但由于通信错误、所做的更改不是需要的、并且该更改已被删除。 因此、我不确定您的工具团队对此有多大兴趣 。 我觉得 TI 销售的火箭肯定会更少、但它销售的 MSP430可能会更多。 设计人员可以在项目中嵌入成本极低的适配器、这将允许客户仅使用 USB 电缆和脚本编写器来更新固件。
Aaditya、
有一种解决此问题的方法并不是很巧妙、但不需要重新编译 Scripter。 您可以进行设置、以便 轻松快速地从 CP2102将 DTR 和 RTS 连接到 FR5969上的/Reset 和 Test 的线路可以通过机械方式或电子方式断开或关闭。 首先运行在 DTR 和 RTS 上生成调用模式的程序、然后断开 DTR 和 RTS 与 FR5969的连接、然后运行 Scripter。 /Reset 引脚应该已经有一个外部上拉电阻器、并且 Test 有一个内部下拉电阻器。 您的程序会将/Reset (DTR)保持为高电平、将 Test (RTS)保持为低电平、这是 FR5969的正常状态、而上拉/下拉电阻器将在线路断开时保持该状态。 那么、脚本解释器是否对 DTR 和 RTS 执行奇怪的操作无关紧要。
如果这对您的项目来说不是一个实用的解决方案、至少可以使用脚本解释器和 CP2102来确认闪存是否适用于此方法。
编辑: 可能只需要断开 DTR。 我尚未对其进行全面测试、但如果 Scripter 将 RTS 拉低、并将其保持在该状态、则可能是正常的。 如果是这种情况、只有 DTR 变为低电平会使事情混乱。
另一种解决方案是 CP2102N 器件的特定解决方案-新版本。 除了常用的 UART 引脚之外、即使是20引脚封装也有四个 GPIO 引脚、遗憾的是这些引脚默认配置为输入、但可以重新配置为输出、并且可以使用其中的两个引脚生成/Reset and Test 模式、 甚至不连接 DTR 和 RTS。 但这需要您预先配置芯片、而生成调用模式的程序则需要有 Silabs 运行时 DLL。 这是一个额外的问题、但如果您在电路板上嵌入 CP2102N、它似乎应该起作用。
当然、如果 TI 向脚本编写器添加了合适的选项、则无需执行任何操作、如前面所述。
Aaditya、
我不知道您是否仍然对此感兴趣、但如果您再次来到这里、我只想说、我开始了有关我在上一篇文章中提到的 DTR 断开解决方案的新主题:
https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/734713
这里有一个指向我的 Github repo 的链接、其中包含用于 Windows 的调用生成软件。
无论如何、我希望您能找到适合您的解决方案。
[引用用户="George Hug"]
https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/734713
这里有一个指向我的 Github repo 的链接、其中包含用于 Windows 的调用生成软件。
[/报价]
尊敬的乔治:
除了 序列生成器件之外、我已经介绍过您编写的 invoke .c 代码、我了解到您将 RTS 的默认值更改为 LOW、将 DTR 的默认值更改为 HIGH (如果我错了、请纠正我的错误)
dcbMasterInitState.fDtrControl = 0; /*将初始化状态 DTR 更改为关闭=高电平)*/ dcbMasterInitState.frtsControl = 1; /*将原始初始化状态 RTS 更改为 on = low)*/
我将尝试为 Linux 找到类似的功能、并使用 FR5969板对其进行测试。
[引用用户="Aaditya Chaudhary83"]
George Hughttps://e2e.ti.com/support/microcontrollers/msp430/f/166/t/734713
这里有一个指向我的 Github repo 的链接、其中包含用于 Windows 的调用生成软件。
尊敬的乔治:
除了 序列生成器件之外、我已经介绍过您编写的 invoke .c 代码、我了解到您将 RTS 的默认值更改为 LOW、将 DTR 的默认值更改为 HIGH (如果我错了、请纠正我的错误)
dcbMasterInitState.fDtrControl = 0; /*将初始化状态 DTR 更改为关闭=高电平)*/ dcbMasterInitState.frtsControl = 1; /*将原始初始化状态 RTS 更改为 on = low)*/
我将尝试为 Linux 找到类似的功能、并使用 FR5969板对其进行测试。
[/报价]
这是我在退出程序时希望保留的状态。 它的状态与 slau550的图2所示相同。 我不知道这两个代码行是否有必要、因为它已经是调用序列的结束状态。 因此、您可能不需要在 Linux 中使用它们。 只需确保在运行调用程序后、DTR 为高电平、RTS 为低电平。 确保在程序关闭后 Linux 不会将其更改为其他内容。
但是、当 Scripter 运行时、它会将 DTR 设置为低电平、因此您需要使用一些断开方法、以便它将保持高电平。