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.

[参考译文] MSP430F5438A:更新固件映像-通过 I2C 使用 BSL

Guru**** 2539500 points
Other Parts Discussed in Thread: MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1031014/msp430f5438a-update-firmware-image---using-bsl-over-i2c

器件型号:MSP430F5438A

我们的设计使用 MSP430F5438A、我们使用 Code Composer Studio (CCS)来实现 IDE。  

此设计需要通过 I2C 进行固件更新。  我们已决定使用 TI 提供的 BSL 代码(下载为 zip 文件) 、其中包含开始使用所需的文件。

该设计使用 UCB0 P3.1和 P3.2。  下面是用于定义端口和引脚的设置。

BSL_Device_File.h

(笑声)

/*特定于器件的定义*/
#define MUS_ERASE_DELAY 0x8000
#define interrupt_vector_start 0xFFE0
#define interrupt_vector_end 0xFFFF
#define SECURE_RAM_START 0x1C00


#define TX_PORT_SEL P3SEL
#define TX_PORT_DIR P3DIR
#define RX_PORT_SEL P3SEL
#define RX_PORT_DIR P3DIR
在 P3.1上#define RXD BIT1 /* RXD *
#define TXD BIT2 // P3.2上的 TXD *
#define DCO_SPEED 8000000
#define ACLK_SPEED 32768

#define UCZNCTL1 UCB0CTL1
#define UCZNCTL0 UCB0CTL0
#define UCZNI2COA UCB0I2COA
#define UCZNIE UCB0IE
#define UCZIV UCB0IV
#define UCZRXBUF UCB0RXBUF
#define UCZTXBUF UCB0TXBUF


/*命令和错误的特定于器件的定义*/
#define do not _check_VPE
#define CLEAR_LOCKIO

#define programming_functions
/*#define memory_reading_functions */
/*#define OTHER 函数*/

#ifdef programming_functions
#define supports_RX_password
#define supports_mass 擦除
#define supports_toggle_info
#define supports_RX_DATA_BLOCK
#define supports_crc_check
#define supports_load_PC
#endif

(笑声)

下面是执行代码后 pi_init()中的代码和分配的寄存器值。  

BSL I2C Registers

使用 JTAG、我可以下载 BSL 并单步执行代码(CCS 调试器)、直到 文件 BSL430_PT_USCIB_I2C.c 中的函数 pi_receivePacket ()、其中代码等待 I2C 开始条件(检查 UCZIV 中的更改)。

BSL430_PI_USCIB_I2C.c

char pi_receivePacket()

RX_STATUSFlags = RX_PACKE_RUSing;

while (RX_STATUSFlags = RX_PACKET_RUSDING_RUSDINUSing)

开关(UCZIV)

实例 I2C_START_Condition_Received:
transmitPoint = 0;接收到//开始条件
rxdataPointer = 0;
中断;

(笑声)

我们使用文档中提供的代码调用 BSL:

_disable_interrupt ();/*禁用中断*/
((void (*)() 0x1000)();/*跳转至 BSL */

我甚至添加了一个 LED、以便在调用 BSL 时亮起...

上面的寄存器和代码段是否看起来正确?

问题:

为了测试此设计、我们使用另一个 MSP430F5438A 通过 I2C 使用从地址0x48与上述 BSL 从器件通信。  出于某种原因、我们永远不会得到启动条件。   

  • 当 接收到启动条件时、我尝试添加另一个 LED 进行切换、但不会发生任何情况。
  • 我已经尝试使用两台计算机、其中两台 JTAGs 一台用于主器件、另一台用于使用 switch 语句开始条件中的断点调试 BSL 代码、但没有发生任何情况。

注意: 在调用 BSL 之前 、2个微控制器通过 I2C 进行通信、而不会发出来回发送消息的问题。  其中一条消息调用代码来调用 BSL。

如果上面显示的寄存器设置和代码正确、接下来我可以检查/验证哪些内容?  

一旦我能够让 BSL 识别 启动条件-其余的就是解决协议(密码等)  

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

    您好、Steve、

    MSP430F5438A 默认支持 UART BSL。 您将使用什么代码来实现此 I2C? 我在您的初始帖子中没有看到特定的参考。

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

    我使用提供的 F5438A UART 代码和提供的 F522x I2C 代码创建了它。

    这两个文件都是 zip 文件的一部分、可在以下位置找到:  https://www.ti.com/tool/download/MSPBSL_CUSTOMBSL430

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

    感谢您分享来源。 这很有帮助。 代码是否有可能等待来自主机的 BSL 进入信号? 我假设在发出复位命令后进行了检查。

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

    我们知道 BSL 被调用是因为应用程序代码(在地址0x5c00中)使用2行代码跳转到 BSL、并且在初始调用期间 、LED 在调用 BSL 时亮起...  

    我可能无法理解您的问题:"代码是否有可能等待来自主机的 BSL 进入信号?" 因为在调用时 LED 会亮起、所以我们可以确定 BSL 正在执行。  此外、如上所述、JTAG 用于单步执行代码、直到它在 I2C 启动条件下等待。

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

    感谢 您的澄清。  pi_init()代码似乎已正确配置。  由于 I2C 通信在 BSL 之外正常工作、我假设这意味着您在器件之间的 I2C 线路上使用上拉电阻器。

    如果在您的 pi_receivePacket()函数中没有收到起始条件,但在应用程序代码中的两个器件之间的 I2C 通信正常,那么我会比较时钟和 I2C 模块设置以确保它们匹配。

    此外,我还会在   pi_receivePacket()函数中添加代码来打开 I2C_start_condition_received 情况下的 LED。 我会在 I2C 主机和 I2C 目标上没有活动调试会话的情况下进行一些测试。 对于 I2C 目标、当按下按钮时、我会添加代码来调用 BSL。 理想情况下,I2C 目标代码随后将进入 pi_receivePacket()并在 while ()循环中停止,直至收到起始条件。  对于 I2C 主机、我会在按下按钮后添加代码以发送 BSL 命令。

    如果这不起作用、那么我会返回到在 I2C 目标上运行一个有效的调试会话来检查 UCxIV 的值、这应该会给你一个关于这个问题的提示。

    此外、请注意、此器件有几个 USCI 勘误表。 更多详细信息、请参阅器件特定勘误表。

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

    感谢大家提出新的意见,解决问题后,我会尽快向社会公布问题。

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

    听起来不错!