主题中讨论的其他器件:MSP430F5438A、 MSP430F6736、 UNIFLASH
工具/软件:Code Composer Studio
我正在尝试为 MSP430F6726定制 I2C BSL、我在 这里找到了一些示例代码(http://www.ti.com/tool/MSPBSL) 以供参考。 我没有找到任何有关将 BSL 代码配置到闪存的 CCS 命令文件的文档。 有人能帮我详细了解需要在 CCS 工具的默认命令文件中进行哪些更改吗?
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.
工具/软件:Code Composer Studio
我正在尝试为 MSP430F6726定制 I2C BSL、我在 这里找到了一些示例代码(http://www.ti.com/tool/MSPBSL) 以供参考。 我没有找到任何有关将 BSL 代码配置到闪存的 CCS 命令文件的文档。 有人能帮我详细了解需要在 CCS 工具的默认命令文件中进行哪些更改吗?
尊敬的 Jace H:
感谢您的回答。 我已经下载了参考代码并将其放入其中。
我已打开"CCS_v7_MSP430F543xA_TA_UART"项目并将其构建。 我的工作空间中生成的.txt 与位于该文件夹"MSP430BSL_1_01_00_00\Released_BSL_Images\MSP430F5438A_Family"中的发布.txt 文件不同。 我认为这两种方法应该是相同的。 我在这里附加了这两个文件以供参考。 我不理解这两者之间的区别。
我使用的是 CCS 版本:7.3.0.00019和编译器版本 TI V16.4.4。
CCS 工具中需要的任何其他设置。 我的最终目标是为 MSP430F6726制作 I2C BSL。 根据您的输入、我将针对 I2C 项目进行相应的更改。
e2e.ti.com/.../8877.BSL.00.07.05.04.txte2e.ti.com/.../6330.MSP430F5438A_5F00_BSL.txt
Niranjan、
与通过下载中的二进制文件存储的二进制文件相比、您将无法从项目编译中获得相同的二进制文件。 自定义 BSL 文件夹中提供的二进制文件是在制造时在芯片上提供的内容的准确副本。 此时使用的编译器版本和 IDE 版本以及提供的 BSL 源代码之间会有差异。 我们不断更新 BSL 源代码以进行改进和错误修复、但不要更新提供的二进制文件、因为我们希望确保客户始终可以重新刷写到"刚好离开汇编行"状态。
至于将外设接口更改为 I2C、源代码在定制 BSL 下载中提供、并在随附的应用手册中提供一些示例和文档。
Niranjan、您好!
感谢您在此提供更多信息。 以前不清楚您的问题到底是什么。 为了便于记录、自定义 BSL 下载包中包含的原始二进制文件历来使用 IAR 编译。
我刚刚在 CCSv8中使用编译器 TIv18.1.0.LTS 编译了这个相同的项目,我能够编译到低于2k 标记的位置。 这是在4级进行优化时进行的、通过设置"0"进行大小与速度之间的关系、强调对大小进行优化。 此外、我关闭了 CCS 执行的零初始化。 为此、请打开项目属性并导航至"Build"->"MSP430 Linker"->"Advanced Options"-> Miscellaneous。 这是此页面上的最后一个选项。 选择"关闭"。
尊敬的 Jace:
我尝试了相同的方法、并将其编译为低于2k 标记、这是使用 CCS_v7_MSP430F543xA_TA_UART 项目进行的。
但是、当我使用 这个 CCS_v7_MSP430F522x_I2C 项目尝试相同的设置时、它仍然超过2k 标记。
实际上、我需要 MSP430F6726/MSP430F6736的 I2C-BSL 、我已将这个 CCS_v7_MSP430F522x_I2C 项目作为参考并更改了这个 MSP430F6736器件型号的设置。 详情如下:
1) 1)工具更改
a.器件型号(随附配置屏幕)
b.命令文件(随附是 MSP430F6736的命令文件(lnk_msp430f6736_BSL)、我已将文件扩展名更改为.txt、因为.cmd 未上传)
2) 2)代码更改
A. BSL_Device_File.h
//特定于器件的定义
#define MUS_ERASE_DELAY 0x8000
#define interrupt_vector_start 0xFF80
#define interrupt_vector_end 0xFFFF
#define SECURE_RAM_START 0x1C00
#define TX_PORT_SEL P2SEL
#define TX_PORT_DIR P2DIR
#define RX_PORT_SEL P2SEL
#define RX_PORT_DIR P2DIR
#define RXD BIT1 // P2.1上的 RXD
#define TXD BIT0 // P2.0上的 TXD
#define DCO_SPEED 8000000
#define ACLK_SPEED 32768
#define UCZNCTL1 UCB0CTL1
#define UCZNCTL0 UCB0CTL0
#define UCZNI2COA UCB0I2COA0
#define UCZNIE UCB0IE
#define UCZIV UCB0IV
#define UCZRXBUF UCB0RXBUF
#define UCZTXBUF UCB0TXBUF
Niranjan、您好!
我向 Custom BSL Creator 介绍了这一点。 CCS 中的 I2C 实现似乎不会编译到小于2k 的内存中。 这是由于 CCS 编译器内的限制。 如果您的应用无法容忍更多的 BSL 空间、则建议使用 IAR 编译定制 BSL。 (过去、IAR 提供了可实现此目的的有限大小免费版本。) 或者、如果您想留在 CCS 中、可以剪切某些功能或命令以减小大小。
您可以在此处获取 CCS +自定义 BSL 编译大小中的反馈。 我们将在将来向定制 BSL 包添加注释、以引起注意。 很抱歉造成混淆。
尊敬的 Jace:
感谢您的澄清。
我在这里还有几个问题。
图像超过2k 还可以吗?
如果将映像拆分为两 个区域(BSL 存储器和主代码存储器)、那么它是否仍然可以正常工作??
"如果您的应用无法容忍更多的 BSL 空间"
我还有很多用于 BSL 的主存储器空间、您建议在存储器中包含 FLASH2 (请参阅 FLASH2的.cmd 文件)区域吗? 我认为 Bank3 位于0x01C000。
您能否确认 BSL_Device_File.h 中所做的上述共享更改是否正确?
感谢你的帮助。
此致
Niranjan
尊敬的 Jace:
感谢您的澄清。
我删除了一些函数(不需要的 BSL 命令)并使其在2k 标记中进行编译。
我使用 UNIFLASH 将其刷写到器件中、它会擦除所有内容并将新的 BSL 映像写入 BSL 存储器。
附加的是 UNIFLASH 设置。
如文档 slaa450e.pdf 中所述。 BSL 应该从0x1000地址开始、用户应用程序我们可以通过调用0x1000地址(如(void (*)() 0x1000)(); (在调用此地址之前禁用中断)来跳转到 BSL 代码。
但是地址0x1000在刷写 BSL 映像(CUSTOMBSL.txt )后没有任何内容,因为文件没有要写入的任何数据。 CUSTOMBSL.txt 文件的数据从0x1010开始。 随附的是 CUSTOMBSLtxt 文件。
我尝试保留0x1000到0x100F (ZAREA)之间的现有数据、并写入0x1010中未发生的新映像。
请提供您的意见。