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.

[参考译文] MSP430F2274:BSL UART 波特率

Guru**** 1123240 points
Other Parts Discussed in Thread: MSP430F2274, MSP430F149, AM5746
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/982746/msp430f2274-bsl-uart-baud-rate

器件型号:MSP430F2274
主题中讨论的其他器件: MSP430F149AM5746

我想知道 BSL 协议中是否可以使用9600波特以外的波特率。

查看 SLAU319AD–2010年7月–2020年6月修订版文档、我发现一个明显的矛盾、如下所示:

  1. 在文档的第7页、第1.4节 UART 协议显示:
    1. 波特率半双工模式下固定为9600波特(一次一个发送器)。
    2. 此外、同一页的注释中还显示:
      在初始化时应用9600波特以外的波特率会导致通信问题
      违反闪存存储器写入时序规范。 闪存存储器可能会受到很大的压力或
      不可靠的编程或擦除操作会做出反应。
    3. 由此可以得出结论、仅允许使用9600波特 UART 数据速率。

  2. 但是、在文档的第9页、数据流结构表列出了"更改波特率 BSL"命令、该命令允许将 UART 波特率更改为1920038400波特、此外还允许将默认值9600波特率更改为19200或38400波特。

我假设这两条语句都适用于不同类型/版本的 MSP430器件。

在本例中、我使用 MSP430F2274器件。

那么、我可以在使用的器件上应用38400波特率吗?

耳塞

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

    您好、Bud、

    是的。 您可以。

    伊斯天

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

    谢谢你伊斯天!

    我有一个相关问题、但我将在此提出、因为出于某种原因、"提出相关问题"按钮不起作用。

    根据 SLAU319AD 的2.4.4.8更改波特率部分–2010年7月–2020年6月修订版文档、我可以看到对于我的器件(MSP430F2274)、我应该使用 BSL 更改波特率命令的 D1、D2和 D3字节来设置:

    • 处理器频率、其中:
      • D1应承载偏移量0x56处的 DCOCTL 寄存器的值
      • D2应承载偏移量0x57处 BCSCTL 寄存器的值

    • 肉定时发生器频率、其中:
      • D3应携带:
        • 0x00 - 9600波特
        • 0x01 -用于19200波特
        • 0x10 -表示38400波特

    问题是、如果我的 msp4302274器件使用由外部晶振生成的12MHz 时钟并连接到引脚3时为 CLK_12M_IN 、引脚2时为 CLK_12M_OUT、如何确定 D1和 D2字节的值?  请参阅e2e.ti.com/.../Attachment_5F00_0.pdf 文件。

    我看到了表2-2。 文档中针对 MSP430F149的建议、但我没有了解如何计算 D1和 D2的值。

    此致、

    耳塞

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

    您好!

    我想您可以参考这个:

    从 UG 中可以看出、它不使用外部振荡器:

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

    您好、伊斯天、

    我现在只尝试了你的上述建议,但它不起作用。  让我解释一下。

    我们使用 MSP430F2274件、该器件的引脚40 (P2.5/ROSC)通过100K 电阻下拉。  请参阅附件_1。

    因此、我尝试使用上述建议值将波特率更改为38400、但 BSL 使用 NACK (0xA0)进行应答、这意味着命令数据出错。  请参阅附件_2。

    我感觉基本时钟模块+寄存器设置有一些错误、因为我不太知道我当前的系统时钟频率是多少。

    您是否有关于如何解决此问题的建议?

    谢谢、

    耳塞

    e2e.ti.com/.../Attachment_5F00_3.pdf

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

    这很奇怪。 在我检查时、它将使用内部时钟。 您能不能帮助我使用以下命令检查 BSL 的版本:

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

    您好、伊斯天、

    我已经尝试检查 MSP430F2274器件的 BSL 版本。  但是、我没有从器件获得预期的响应。  我只得到一个 NACK (0x0A)?!

    下面是跟踪捕获:

    我发送的消息为:|80|1E|04|04|7F|7F|7F|7F|7F|7F|7B|E5|

    我不知道 该命令会出现什么错误、除非我错误地计算了校验和。  您能否检查它是否正确?

    此致、

    耳塞

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

    我一侧的计算结果为0xC0FA。 您能否将此结果发送给测试?

    我也不太确定这是否正确。 检查您使用的计算工具是否正确的最简单方法是尝试其他命令、如批量擦除。

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

    您好、伊斯迅、

    我将测试您的校验和。

    不过,我很难理解为什么会发生这种情况。

    让我与您分享我的 BSL 应用程序代码。  我从 TI 网站获得了代码。  每个 C 模块均拥有2016年起的德州仪器(TI)版权、作者是 Nima Eskandari。  请参阅随附的文件 e2e.ti.com/.../bud_5F00_bsl_5F00_arch.tar

    我修改了原始代码如下:(请参阅 main.c)

       第151行:注释掉了 PinMuxConfig(),因为在我的应用程序中,CPU (AM5746)引脚复用已经由引导加载程序完成。
       第156-158行:使用 gpiod 库配置必要的 CPU GPIO 引脚。
       第217-225行:首先执行批量擦除命令以将密码重置为 FFFF。

    通过这些修改、该程序可以正常工作。  有趣的是,我省略地在 BSL.c 模块中实现了一个新的 Mass Eras()函数(第229行),因为我没有注意到已经有一个函数,MassErase (line508):-)

    如果您比较这两个函数,则可以看到它们实际上是完全相同的,但 dummy_byte 除外,在原始 MassEras()函数中,dummy()函数硬编码为0,在我的实现中,我使用了0x7F 的值。

    这里的要点是,在248行中,我使用 CalculateChecksum ()函数,它用于 BSL.c 模块中的所有其他命令。  正如我说过的,Mass Eras()函数起作用。

    现在、回到 main.c、您可以看到我尝试更改波特率的位置:

    -复位后(第176行)、我初始化 CPU UART、执行 BSLEntrySequence、然后(在注释掉的代码中)发送 chage_Baud_rate 命令(第190行)。  请参阅 BSL.c 第187行,其中我构建 sendBuffer 并按照与 Mass Erase ()中相同的方式计算校验和,发送它并等待器件响应。  这些入侵是巨大的,但正如我以前所报告的那样,这是一种否定。

    然后再返回 main.c、我(在第206行)尝试按照您的建议获取 BSL 版本。  我调用在 BSL.c 行150中实现的 Tx_BSL_Version ()函数。  如您所见、我构建 sendBuffer 数组、以与以前相同的方式计算校验和、发送命令并等待 ackResult。  

    但是、对于此测试、我不会检查返回值、因为我正在监控 UART Tx 和 Rx 线路、因此该函数返回 true 并返回到 main.c、在这里我只是终止程序。  但是、我从器件获得的唯一响应是 NACK!?

    所以、我在这里对正在发生的情况非常困惑。  我认为我一直在使用同一函数计算校验和、该函数在整个代码中使用。

    您能否查看我的代码并尝试查看其中是否存在一些隐藏陷阱。

    此致、
    耳塞

    PS -同时、我已经测试了您的校验和并获得了相同的结果- NACK!  请参见随附的图像。

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

    我检查您的代码、您的 CRC 是正确的。 抱歉、FRAM 系列器件具有不同的 CRC 计算公式。 您也可以使用此选项进行检查:

    我还检查 BSL 版本、它是正确的0x0202版本。 但我在 UG 中找不到任何内容。

    如您所见、批量擦除、发送密码、读取版本是三个不受保护的命令。 我不知道为什么你遇到这个问题。 我能想到的唯一一点是产品不支持此功能。

    我还检查我们的系统、找不到源代码...

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

    我回来了。

    请参阅此主题 :https://e2e.ti.com/support/microcontrollers/msp430/f/msp-low-power-microcontroller-forum/985271/msp430g2755-correct-d1-and-d2-values-to-change-bsl-uart-baud-rate-to-38400/3642512#3642512

    波特率变化命令似乎也受到保护。

    我认为您可以按照以下步骤检查它是否可以正常工作。 等待您的好消息。

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

    是的、

    我也见过它,很快就会尝试它。

    因此应该更新 UG!

    谢谢、

    耳塞

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

    您好、伊斯迅、

    是的、我已经尝试过密码、当然、它可以正常工作。

    谢谢、

    耳塞