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.

[参考译文] TMS320F28386S:SCIA 引导模式和 serial_flash_programmer

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1179909/tms320f28386s-scia-boot-mode-and-serial_flash_programmer

器件型号:TMS320F28386S
Thread 中讨论的其他器件:SysConfigcontrolSUITEC2000WARE

我解决了其中的一些问题、并认为我通过 E2E 帮助解决了这个问题:

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1169837/non-jtag-firmware-update/4402777?tisearch=e2e-sitesearch&keymatch=%20user%3A152282#4402777

但是、问题未解决、但该 TT 已标记为已解决、因此我将启动新线程。 如果这不是正确的协议、请原谅我。

我正在编写应用手册 SPRACN1、它基本上是通过读取单个 GPIO 引脚引导至 SCIA 的变体。 如果引脚为高电平、则选择 SCIA 引导。 为了测试操作、我有一个短程序、根据引导引脚状态调用复位和重新引导。 如果输入为低电平、程序会重复运行、如果为高电平、程序会停止运行、我将其推导为 SCIA 引导模式。 我在 SCIA 引脚上放置示波器探针并启动 serial_flash_programmer。 它正在发送'A'、但我的板没有响应(我使用 com 终端验证了端口)。 也许应用手册缺少一些内容、但我认为 Z2 OTP 设置正确、至少它显然会更改引导模式。 我最大的怀疑(Charles 之前建议的)是 OTP 地址不正确。

应用程序代码:

#include "driverlib.h"
#include "device.h"
#include "string.h"

// Per SPRACN1
#pragma RETAIN(otp_z2_data)
#pragma DATA_SECTION(otp_z2_data,"dcsm_zsel_z2_1");
const long otp_z2_data = 0x5AFFFF0F;
#pragma RETAIN(otp_z2_data_2)
#pragma DATA_SECTION(otp_z2_data_2,"dcsm_zsel_z2_2");
const long otp_z2_data_2 = 0xFFFF0103;
// End SPRACN1

void setup(void);
void scibFlush(void);
void txb(char* s);

void main(void)
{
    uint32_t in = 0;
    setup();
    txb("\r\nStart:");
    GPIO_setDirectionMode(57U, GPIO_DIR_MODE_IN);

   in = GPIO_readPin(57U);
    txb(in == 1 ? "\nHi" : "\nLow");  //Write to SCI B and flush.
    SysCtl_resetDevice();
    return 0;
}

以下是链接 cmd 文件插入:

MEMORY
{
	PAGE 0:
	DCSM_ZSEL_Z2_P0: origin = 0x078208, length = 0x000002
	DCSM_ZSEL_Z2_P1: origin = 0x07820C, length = 0x000002
	//DCSM_ZSEL_Z1_P0: origin = 0x07800C, length = 0x000002
	//DCSM_ZSEL_Z1_P1: origin = 0x07801C, length = 0x000002
}

SECTIONS
{
	dcsm_zsel_z2_1 : > DCSM_ZSEL_Z2_P0, PAGE = 0
	dcsm_zsel_z2_2 : > DCSM_ZSEL_Z2_P1, PAGE = 0
}

MEMORY
{ ...

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

    嘿、John、

    查尔斯的怀疑似乎就是这样。 这是 SysConfig DCSM 工具为 F2838x 生成的默认.cmd:

    /*如果用户希望在器件上使用 DCSM 功能、则将包含此链接器命令文件
    * DCSM 表示双区域代码安全模块。
    *此链接器命令文件用作现有闪存/RAM 链接器命令文件的附录
    *项目具有的内容。
    * ZoneSelectBlock.asm 源文件中的段按照文件中给出的命令进行链接
    *注-请注意 fill=0xFFFF、如果用户将此文件错误地包含在项目中、则这会有所帮助
    *不提供所需的正确*_ZoneSelectBlock.asm 源。
    *请参阅 controlSUITE 示例中的 Blinky DCSM 示例、以正确使用该示例。
    *
    *一旦用户确信要在 OTP 中对密码进行编程、就可以删除 DSECT 段类型。
    *
    *

    存储器

    第0页:/*程序内存*/

    /* Z1 OTP。 Z1密码位置/闪存和 RAM 分区*/
    DCSM_OTP_Z1_LINKPOINTER:origin = 0x78000,length = 0x00006
    DCSM_OTP_Z1_JLM_ENABLE:origin = 0x78006,length = 0x00002
    DCSM_OTP_Z1_GPREG:origin = 0x78008,length = 0x00008
    DCSM_OTP_Z1_PSWDLOCK:origin = 0x78010,length = 0x00002
    DCSM_OTP_Z1_CRCLOCK:origin = 0x78012,length = 0x00002
    DCSM_OTP_Z1_JTAG_PSWDH:origin = 0x78014,length = 0x00004
    DCSM_OTP_Z1_CMAC_KEY:origin = 0x78018,length = 0x00008

    /* DCSM Z1区域选择内容(!!可移动!!) *
    DCSM_ZSEL_Z1_P0:origin = 0x78020,length = 0x000020

    /* Z2 OTP。 Z2密码位置/闪存和 RAM 分区*/
    DCSM_OTP_Z2_LINKPOINTER:origin = 0x78200,length = 0x00006
    DCSM_OTP_Z2_RSVD:origin = 0x78206,length = 0x00002
    DCSM_OTP_Z2_GPREG:origin = 0x78208,length = 0x00008
    DCSM_OTP_Z2_PSWDLOCK:origin = 0x78210,length = 0x00002
    DCSM_OTP_Z2_CRCLOCK:origin = 0x78212,length = 0x00002
    DCSM_OTP_Z2_RSVD1:origin = 0x78214、length = 0x0000C

    /* DCSM Z2区域选择内容(!!可移动!!) *
    DCSM_ZSEL_Z2_P0:origin = 0x78220,length = 0x000020

    部分

    DCSM_OTP_Z1_linkpointer :>DCSM_OTP_Z1_LINKPOINTER PAGE = 0
    DCSM_OTP_Z1_GPREG:>DCSM_OTP_Z1_GPREG PAGE = 0,TYPE = DSECT
    DCSM_OTP_Z1_pswdlock:>DCSM_OTP_Z1_PSWDLOCK PAGE = 0
    DCSM_OTP_Z1_CLOCK:>DCSM_OTP_Z1_CRCLOCK PAGE = 0
    DCSM_OTP_Z1_JLM_ENABLE:> DCSM_OTP_Z1_JLM_ENABLE,PAGE = 0
    DCSM_OTP_Z1_JTAG_pswdh:> DCSM_OTP_Z1_JTAG_PSWDH,页= 0,类型= DSECT
    DCSM_OTP_Z1_CMAC_KEY:>DCSM_OTP_Z1_CMAC_KEY,PAGE = 0,TYPE = DSECT
    dcsm_zsel_z1:>dcsm_ZSEL_Z1_P0 page = 0

    DCSM_OTP_Z2_linkpointer:>DCSM_OTP_Z2_LINKPOINTER PAGE = 0
    DCSM_OTP_Z2_GPREG:>DCSM_OTP_Z2_GPREG PAGE = 0,TYPE = DSECT
    DCSM_OTP_Z2_pswdlock:>DCSM_OTP_Z2_PSWDLOCK PAGE = 0
    DCSM_OTP_Z2_crclock:>DCSM_OTP_Z2_CRCLOCK PAGE = 0
    dcsm_rsvd_z2:> dcsm_otp_z2_RSVD,page = 0,type = DSECT
    dcsm_rsvd1_Z2:> dcsm_otp_z2_RSVD1,page = 0,type = DSECT
    dcsm_zsel_z2:>dcsm_ZSEL_Z2_P0 page = 0

    /*
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //文件结束。
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *

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

    谢谢 Luke、我想...

    我很感激、但它看起来像是一个巨大的药丸、绝对超出了我的舒适区。

    我正在寻找示例。 上述文件顶部的注释指出:

    请参阅 controlSUITE 示例中的 Blinky DCSM 示例以了解其正确用法。 我在所有 C2000中都找不到任何称为控制套件的东西。

    是否有这样一组示例?

    我找到了

    C:\ti\c2000Ware_4_01_00_00\driverlib\f2838x\F28386示例\C28x\led\led_ex2_blinky_dcsm.c 不确定这是否适用于 C28x_DUAL。

    我会对此表示愤慨、但我肯定会再来的。

    再次感谢。

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

    我想我将从 SysConfig 工具开始、看看可以设置什么。 几 个问题。

    1) 1)在密码锁定下、选项是永久启用或禁用。 我现在不想永久地这样做。

    2) 2)在 Z2引导设置下、SCIA 有对、其中一对是 gpio84 TX 和 gpio85 Rx。 我们将 GPIO9用于 Rx、但该选项不可用。

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

    嘿、John、

    对于信息转储表示歉意。 我只想指出  DCSM_ZSEL_Z2_P0的默认值:origin = 0x78220、length = 0x000020。

    更仔细地看一下您的代码、似乎您具有用于配置 GPREG1和 GPREG3的正确地址、我最初以为您正在尝试配置区域选择块。

    我相信 SysConfig 允许您暂时禁用密码锁定、只有启用选项应该是永久性的、让我与其他 SysConfig/DCSM 专家验证这一点。

    用于 TX 的 GPIO8和用于 RX 的 GPIO9应该是 SysConfig 中的可用选项。 您使用的是 C2000Ware 和 CCS 的哪个版本?

    当我在 SysConfig 中选择此选项时、我的 GPREG3值设置为0xFFFFFFC103、但您将其设置为0xFFFFFF0103、这对应于 SCIATX=GPIO29和 SCIARX=GPIO28。 这可能是您问题的原因。

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

    感谢您提供的注释。无需担心转储问题。 通过修复项目设置使配置工具变得更加直化后、它开始变得更加有意义。

    因此、如果我将 DCSM_ZSEL_Z2_P0更改为0x78220、长度= 0x000020、我的链接 cmd 文件将是可以的。

    我们使用的是 CCS 11和 C2000Ware_4_01_00_00。 如果需要、我可以切换到 CCS12。

    我看不到用于临时密码锁定禁用的选项、除非它在 Linkpointer 部分进行了编码。

    0xFFFFFF0103值是在应用手册 SPRACN1中以愚蠢的盲目信仰获取的:

    但我认为应用手册没有明确说明 SCIA 引脚的设置。 所以我在那里盲了。  我在简短参考手册 SPRSP14D 中找到了这一点

    因此、看起来我无法选择84和9、它必须是84和85。

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

    尊敬的 John:

    0x78220是区域2的区域选择块1的基地址。 通用寄存器(GPREG)用于配置引导设置。 通过使用地址0x78208和0x7820C、您将 GPREG1和 GPREG3配置为使用 GPIO15作为引导模式选择引脚、并在 GPIO15被驱动为高电平时使用 GPIO28和 GPIO29作为 SCI 引导引脚。 此图的 DCSM 一章中列出了 OTP 配置及其地址。  

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

    正确的方法是、必须使用表8-19中列出的其中一对。 您是否能够使用 GPIO29=SCIATX 和 GPIO28=SCIARX 进行 SCI 引导测试? 为了澄清这一点、当使用引导模式1 (在这种情况下、GPIO15 = 1)时、GPREG3中的位15-8决定了引导模式。 位7-0控制默认为0x03的引导0 (从闪存引导)。

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

    您好、Luke、

    图像模糊、因此放大图像不起作用。 请提供什么文档?

    我目前无法进行测试、因为我们的所有 GPIO 引脚都分配给了其他硬件。

    我们的板在 SCIA 上使用 GPIO 84进行 TX、使用9进行 Rx、重新旋转板基本上不是一个开始、因此我需要找到一个权变措施。

    它看起来像是部分/全部 serial_flash_programmer 可用。 我建议将闪存内核代码驻留在电路板上、作为维护菜单中的可调用函数。 然后修改 serial_flash_programmer 以跳过下载闪存内核、跳过自动波特并在9600下运行、然后继续传输 CPU1和 CM 文件。

    这看起来是实用的还是可行的?

    谢谢、

    John

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

    嘿、John、

    此图来自 F2838x 手册中的 DCSM 一章。

    让我来看看我们的串行闪存编程器和引导 ROM 专家、他们将更有能力帮助解决这个问题。

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

    尊敬的 John:

    如果您希望闪存内核驻留在电路板上、您可以更改链接器 cmd 文件、以便内核驻留在闪存存储器中、这样您只需下载一次并将其保存以用于您选择的扇区。 如果您的设置允许、跳过自动波特时、您可以在9600下运行。 这似乎是可行的。  

    将在明天对此进行更深入的研究。

    谢谢、
    查尔斯

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

    期待您的后续行动。

    JH

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

    尊敬的 John:

    对于 F28386S、您可以修改 Flash_api_lnk.cmd 文件并对其进行修改、以便出于内核目的将这些段与闪存对齐。 然后是构建配置、包括重命名。

    e2e.ti.com/.../2838x_5F00_flash_5F00_api_5F00_lnk.cmd

    我仍然需要更多的时间来了解这一点。  

    谢谢、

    查尔斯

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

    我想仿真 SCIA 引导模式代码。 其中一个串行闪存编程器自述文件指出:"器件的引导加载程序将传入的数据复制到 RAM 中、然后分支到指定的入口点。"

    是否 可以确定此负载和入口点?