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.

[参考译文] TMS320F28379D : TMS320F28379D : SCI 引导 1.

Guru**** 2445440 points
Other Parts Discussed in Thread: C2000WARE, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1465331/tms320f28379d-tms320f28379d-sci-boot-1

部件号:TMS320F28379D
Thread 中讨论的其他器件:UNIFLASHC2000WARE

工具/软件:

您好、

我们要求使用串行通信刷写应用程序。 为了实现此目的、我们启用了 SCI 引导模式 1、因为我们将 SCI-A 与 GPIO 引脚 28 和 29 配合使用。

以下是我们启用 SCI 引导模式 1 并加载应用程序所遵循的步骤:

  1. 设置 OTP 寄存器 Z1-BOOTCTRL (0x7801E)= 0x4955815A。
  2. 使用 TI 提供的串行闪存编程器实用程序。
  3. 内核和应用程序已成功刷写到电路板上、系统正常运行。 但是、在下电上电后、CPU 会进入休眠引导模式(请参阅 RTM:图 4-6、CPU1 独立和休眠引导流程)。

请帮助我们将系统配置为从闪存引导、以便应用程序在下电上电后正常运行。

此致、
Aditya.

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

    尊敬的 Aditya:

    遗憾的是、  在这种情况下、BOOTCTRL 寄存器受到限制。 鉴于 Get mode 只允许 对一个自定义引导选项进行编程(此处为 0x81)、因此使器件在复位后引导至闪存 的唯一方法是 autobaud 密钥值无效(!= 0x08AA)。  

    较新的器件(F280013x、F28003x、F2838x、F28P55x 等)具有 BOOTDEF 寄存器、可以通过支持  选择多达 8 个引导选项来解决此问题、并使这不是问题。  

    此致、

    马特

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

    尊敬的 Matt:

    非常感谢!

    如果我们更改前面提到的自动波特密钥值、之后我们是否仍然能够使用 SCI 引导 1 升级固件?

    此致、

    Aditya.

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

    尊敬的 Aditya:

    是的、只要 KeyValue 有效 (0x08AA)、您就能够使用 SCI 引导 1 升级固件。 否则、器件将引导至闪存。 您必须找到一种方法来使 KeyValue 检查失败、以便引导 ROM 将引导至闪存。  

    此致、

    马特

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

    我 假设此问题已得到解决并结束主题、因为它已有几周未得到 响应。 如果情况并非如此、请打开一个新主题。

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

    尊敬的 Matt:

    问题不会重新出现

    请查找以下详细信息:

    问题说明:在每次开机循环后固件启动后,使用 SCI 引导模式 1 进行固件升级。

    执行操作:

    1. 使用闪存设置 OTP 寄存器 Z1-BOOTCTRL (0x7801E)= 0x4955815A。
    2. DSP 进入引导模式。
    3. 已使用 TI 提供的串行闪存编程器实用程序。
    4. 使用引导加载程序升级应用程序、并从闪存完美启动。
    5. 两个引导模式引脚 (GPIO 72 和 84) 都设置为高电平(获取模式)。
    6. 下电上电后、DSP 不会启动应用程序(闪存应用程序)。 此外、我们不会在 SCI A 端口上发送任何数据(用于 firmeare 升级的数据相同)
    7. 我们还使用 JTAG 将应用程序刷写到闪存区域中、但下电上电后应用程序仍无法启动。

    正如您在前面的消息中所提到的、如果引导加载程序接收到无效的 autobuad 密钥值、则会启动闪存应用程序。

    在本例中、下电上电后我们没有在 SCI 端口上发送任何数据、这意味着它没有收到任何自动波特密钥值、它应该会启动应用程序、但没有发生这种情况。

    如果缺少任何步骤、或者需要对现有步骤进行任何更改、请告知我们

    此致、

    Aditya.

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

    尊敬的 Aditya:

    Uint16 SCIA_GetWordData()
    {
       Uint16 wordData;
       Uint16 byteData;
    
       wordData = 0x0000;
       byteData = 0x0000;
    
       // Fetch the LSB and verify back to the host
       while(SciaRegs.SCIRXST.bit.RXRDY != 1) { }
       wordData =  (Uint16)SciaRegs.SCIRXBUF.bit.RXDT;
       SciaRegs.SCITXBUF = wordData;
    
       // Fetch the MSB and verify back to the host
       while(SciaRegs.SCIRXST.bit.RXRDY != 1) { }
       byteData =  (Uint16)SciaRegs.SCIRXBUF.bit.RXDT;
       SciaRegs.SCITXBUF = byteData;
    
       // form the wordData from the MSB:LSB
       wordData |= (byteData << 8);
    
       return wordData;
    }

    我们没有在 SCI 端口上发送任何数据、这意味着它没有收到任何自动波特率密钥值、它应该启动应用程序、但这没有发生。

    这是来自 SCI ROM 引导加载程序 (C2000Ware_X_XX_XX_XX\libraries\boot_rom\f2837xd\RevB\ROM_Sources\F2837x_bootROM\cpu01-bootROM\source) 的函数、如果您没有向 SCI 端口发送任何数据、则器件将继续等待、直到收到内容。 此时需要发送错误的自动波特密钥。

    此致、

    马特

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

    尊敬的 Matt:

    由于我们的系统安装在远程位置、因此 每次下电上电时都不可能发送错误的自动波特密钥。

    可以通过任何其他方法修改 ROM 引导加载程序。 因此无需发送错误的自动波特密钥。

    我们还有一个详细信息涉及引导模式选择引脚 (GPIO 72 和 84)、对于闪存引导、我们应该使用引导模式引脚选择哪种模式。

    此致、

    Aditya.

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

    尊敬的 Aditya:

    否、很遗憾、无法修改引导 ROM。 在 F2837xD 器件上使用 GPIO28/29 和闪存引导模式实现 SCI 引导的唯一方法是在闪存中自行创建自定义 SCI 引导加载程序。 请注意、如果您将 GPIO84/85 用于 SCI、则可以使用 ROM 引导加载程序。

    为此、您可以修改要在闪存中构建和执行的 SCI 闪存内核 (C2000Ware_X_XX_XX_XX\device_support\f2837xd\examples\dual\F2837xD/sci_flash_kernels)。 应用程序(加载到另一个闪存组中)随后可以接收用于固件升级的命令、并在必要时跳转到 SCI 引导加载程序。

    我们还有一个与引导模式选择引脚 (GPIO 72 和 84) 相关的安静信息、用于闪存引导、我们应该使用引导模式引脚选择哪种模式。

    您需要将 GPIO72 和 GPIO84 都配置为 1 以启用“Get/Flash"引导“引导模式。 在未编程的器件上、默认情况下获取引导模式(即未对 OTP 中的 BOOTCTRL 寄存器进行编程)会引导至闪存。

    此致、

    马特

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

    尊敬的 Matt:

    希望您做得好。

    我们修改了 SCI 闪存内核 (C2000Ware_X_XX_XX_XX\device_support\f2837xd\examples\dual\F2837xD_sci_flash_kernels) 以支持使用 GPIO 28 和 29 的备用 SCI 引导模式。 但是、我们会遇到以下问题:

    1. 调试时收到错误:
      “USB XDS100v2 Texas Instruments Debug Probe_0/C28xx_CPU1:在加载程序之前、必须先连接目标。“
      调试器已连接、连接测试显示成功、但仍然出现错误。

    2. 尽管刷写了代码、但在使用 TI 实用程序尝试进行固件更新时、我们仍运行以下命令:

      .\serial_flash_programr.exe -d f2837xD -k .\F2837xD_sci_flash_kernels_cpu01.txt -a .\blinky_dc_cpu01.txt -b 9600 -p COM7 -v

      该过程在“尝试 autobuad“步骤卡住。

    此外、我们是否需要F2837xD_sci_flash_kernels_cpu01.txt在每次固件升级期间都使用内核?

    您能指导我们如何使用自定义 SCI 引导加载程序正确执行固件升级吗?

    提前感谢您的支持。

    此致、
    Aditya.

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

    尊敬的 Aditya:

    "USB XDS100v2“ XDS100v2 Texas Instruments Debug Probe_0/C28xx_CPU1:加载程序之前必须连接目标。“

    此主题可能会有所帮助: https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/781790/ccs-lp-cc2652rb-automatic-loading-of-program-not-possible-if-2-different-launch-pads-are-connected-to-same-pc/2890700#2890700

    对于自定义引导加载程序、我需要阐明以下几点:

    1. SCI 闪存内核是针对 RAM 还是闪存构建的?
      1. 如果内核是为 RAM 构建的(在 C200Ware 中默认为 RAM)、则使用与您打算使用的备用 GPIO 分配集不同的 GPIO 分配集来通过 ROM 引导加载程序加载内核。 因此、一旦内核接管执行、串行闪存编程器将无法检测到自动波特率。
      2. 如果 SCI 内核是为闪存构建的、则您可以将内核加载到闪存中(使用 CCS 或 UniFlash)。 然后、您必须分支到自定义引导加载程序(从应用程序或通过引导至引导加载程序的闪存入口点)、并使用 serial_flash_programr_appIn.exe 通过自定义引导加载程序将应用程序代码加载到闪存中。  

    在您的情况下、您需要为闪存执行构建自定义引导加载程序并按照流程选项 (b) 进行操作。

    此致、

    马特

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

    尊敬的 Matt:

    我们为闪存构建 SCI 内核、我们成功地对其进行调试、但当我们使用 TI 提供的串行闪存 programr.exe 时、它会收到错误并停止执行。

    下面的错误消息我们得到  

    我们所做的事情请给出正确的答案。

    此致、  

    Aditya.

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

    尊敬的 Aditya:

    通常是因为波特率过高或某些噪声干扰通信而发生这种情况。

    1. 您使用哪种串行接口与器件通信?
    2. 您的器件设置是什么(这是定制电路板,LaunchPad、controlCARD 等)?
    3. 您如何调用 serial_flash_programmer_Appin.exe?

    此致、

    马特

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

    尊敬的 Matt:

    我使用 USB 转串行 (RS232) 适配器与器件进行通信。 该设置基于我们正在开发的定制板、因此它不是 LaunchPad 或 controlCARD。

    我们使用以下命令调用串行闪存编程器、

    “.\serial_flash_programr.exe -d f2837xD -k .\F2837xD_sci_flash_kernels_cpu01.txt -a .\blinky_dc_cpu01.txt -b 9600 -p COM14 -v“

    此致、

    Aditya.

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

    尊敬的 Aditya:

    您正在尝试加载 SCI 内核是为闪存构建的 使用 ROM 引导加载程序? ROM 中的引导加载程序只能将代码加载到 RAM 中。

    如果是、您需要先将内核编程到闪存中(使用 CCS、UniFlash,第三方工具等)、然后使用 serial_flash_programmer _Appin .exe、以仅下载应用程序(在将器件引导至闪存中的内核后)。 可以在不使用“-k"参数“参数的情况下调用仅应用程序可执行文件:

    .\serial_flash_programr_appIn.exe -d f2837xD -a .\blinky_dc_cpu01.txt -b 9600 -p COM14 -v

    此致、

    马特

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

    尊敬的 Matt:

    我按照您提到的相同步骤、

    1.为闪存构建内核。

    2.使用 CCS 加载内核。

    3.使用 Serial_flash_programr_appln.exe  

    命令:   .\serial_flash_programr_appln.exe -d f2837xD -a .\blinky_dc_cpu01.txt -b 9600 -p COM14 -v

    但我们收到 NACK 错误。 请查找以下详细信息、

    此致、

    Aditya.

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

    尊敬的 Aditya:

    应用程序的闪存段是否为 128 位对齐? 在链接器命令文件的 SECTIONS 中、在将某段分配给闪存的每一行后添加一个逗号和“align (8)“。

    此致、

    马特

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

    尊敬的 Matt:

    按照您的建议、在将段分配给闪存的每行之后添加“align (8)“。

    但获得上述相同的结果 ara。

    此致、

    Aditya.

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

    尊敬的 Matt:

    我们成功加载了应用程序、但之后遇到了程序错误。

    以下是详细信息:

    运行命令“run CPU1“或执行下电上电后、自定义引导加载程序和应用程序都不会引导。

    您能告诉我们如何在下电上电后启动该应用程序吗?

    此致、

    Aditya.

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

    尊敬的 Aditya:

    内核正在报告编程错误、您能否在 CCS 中检查 FMSTAT 寄存器以查看报告的故障状态? 您是否还可以共享您的应用链接器命令文件 (.cmd)?

    有关更多详细信息、请参阅 F2837xD 闪存 API 参考指南中的 FMSTAT 寄存器字段说明

    此致、

    马特

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

    尊敬的 Matt:

    请找到应用程序命令文件

    /*
    //##########################################################################
    // file:flash_programming_cpu1_flash.cmd
    //标题:所有 F28X7x 器件的链接器命令文件
    //##########################################################################
    //$TI 版本:F2837xD 支持库 V200 $
    //发布日期:星期二 Jun 21 13:00:02 CDT 2016 $
    //$Copyright : Copyright (C) 2013-2016 Texas Instruments Incorporated -
    // http://www.ti.com/ 保留所有权利$
    //##########################################################################
    */

    /*==================================================
    //对于 Code Composer Studio V2.2 和更高版本
    //------------------------------------------------
    //除此内存链接器命令文件外、
    //将头链接器命令文件直接添加到工程中。
    //链接头链接器命令文件是必需的
    //外设结构到内的正确位置
    //存储器映射。
    //头链接器文件位于中 \F2837xD/headers\cmd
    //对于 BIOS 应用程序、添加:F28X7x_Headers_bios.cmd
    //对于非 BIOS 应用程序、添加:F28X7x_Headers_nonBIOS.cmd
    =================================================== */

    /*定义 F28X7x 的内存块起始/长度
    第 0 页将用于组织程序段
    PAGE 1 将用于组织数据段

    注意:
    F28M3Xx 上的存储器块是一致的(即相同的
    物理存储器)的位。
    相同的存储器区域不应是这样
    已为 PAGE 0 和 PAGE 1 定义。
    这样做将导致程序损坏
    和/或数据。

    可以是连续的 SARAM 存储块或闪存扇区
    组合在一起、以创建更大的存储块。
    */

    移动数据

    第 0 页:/*程序存储器*/
    /*存储器 (RAM/FLASH) 块可移动到 Page1 以进行数据分配*/
    /* BEGIN 用于“引导至闪存“引导加载程序模式*/

    BEGIN:origin = 0x080000、length = 0x000002
    RAMM0:原点= 0x000122、长度= 0x0002DE
    RAMD0:原点= 0x00B000、长度= 0x000800
    RAMLS03:origin = 0x008000、length = 0x002000
    /* RAMLS1:原点= 0x008800、长度= 0x000800
    RAMLS2:原点= 0x009000、长度= 0x000800
    RAMLS3:origin = 0x009800、length = 0x000800 */
    RAMLS4:原点= 0x00A000、长度= 0x000800
    RAMGS14:原点= 0x01A000、长度= 0x001000
    RAMGS15:origin = 0x01B000、length = 0x001000
    Reset:origin = 0x3FFFC0、length = 0x000002

    /*闪存扇区*/
    FLASHA:origin = 0x080002、length = 0x001FFE /*片上闪存*/
    FLASHB:origin = 0x082000、length = 0x002000 /*片上闪存*/
    FLASHC:origin = 0x084000、length = 0x002000 /*片上闪存*/
    FLASHD:origin = 0x086000、length = 0x00A000 /*片上闪存*/
    FLASHE:origin = 0x090000、长度= 0x002000 /*片上闪存*/
    FLASHF:origin = 0x092000、length = 0x006000 /*片上闪存*/
    FLASHG:origin = 0x098000、length = 0x008000 /*片上闪存*/
    FLASHH:origin = 0x0A0000、length = 0x008000 /*片上闪存*/
    FLASHI:origin = 0x0A8000、length = 0x008000 /*片上闪存*/
    FLASHJ:origin = 0x0B0000、length = 0x008000 /*片上闪存*/
    FLASHK:origin = 0x0B8000、length = 0x002000 /*片上闪存*/
    FLASHL:origin = 0x0BA000、length = 0x002000 /*片上闪存*/
    FLASHM:origin = 0x0BC000、length = 0x002000 /*片上闪存*/
    FLASHN:origin = 0x0BE000、length = 0x002000 /*片上闪存*/

    第 1 页:/*数据内存*/
    /*存储器(RAM/闪存)块可移动到 PAGE0 以进行程序分配*/

    boot_RSVD:origin = 0x000002、length = 0x000120 /* M0 的一部分、引导 ROM 将对堆栈使用该值*/
    RAMM1:origin = 0x000400、length = 0x000400 /*片上 RAM 块 M1 */
    RAMD1:origin = 0x00B800、length = 0x000800

    RAMLS5:原点= 0x00A800、长度= 0x000800

    RAMGS0:原点= 0x00C000、长度= 0x00B000
    /*RAMGS1:origin = 0x00D000、length = 0x001000*/
    /*RAMGS2 : origin = 0x00E000, length = 0x001000*/
    /*RAMGS3:origin = 0x00F000、length = 0x001000
    RAMGS4:原点= 0x010000、长度= 0x001000
    RAMGS5:原点= 0x011000、长度= 0x001000
    RAMGS6:原点= 0x012000、长度= 0x001000
    RAMGS7:origin = 0x013000、length = 0x001000
    RAMGS8:原点= 0x014000、长度= 0x001000
    RAMGS9:原点= 0x015000、长度= 0x001000
    RAMGS10:原点= 0x016000、长度= 0x001000*/
    RAMGS11:原点= 0x017000、长度= 0x001000
    RAMGS12:原点= 0x018000、长度= 0x001000
    RAMGS13:原点= 0x019000、长度= 0x001000


    CPU2TOCPU1RAM:原点= 0x03F800、长度= 0x000400
    CPU1TOCPU2RAM:origin = 0x03FC00、length = 0x000400
    }


    很重要

    /*分配程序区域:*/
    .cinit:> FLASHD PAGE = 0、ALIGN(8)
    .pinit:> FLASHD、page = 0、align(8)
    .text:>> FLASHD | FLASHE |FLASHH | FLASHI PAGE = 0、ALIGN (8)
    codestart:> Begin page = 0, align(8)

    业务线经理

    ramfuncs
    dclfuncs
    {-l F021_API_F2837xD/F2837xD/FPU32.lib}

    } load = FLASHD、
    RUN = RAMLS03、
    LOAD_START (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    LOAD_END (_RamfuncsLoadEnd)、
    RUN_START (_RamfuncsRunStart)、
    RUN_SIZE (_RamfuncsRunSize)、
    RUN_END (_RamfuncsRunEnd)、
    PAGE = 0、ALIGN (8)

    /*分配未初始化的数据段:*/
    .stack :> RAMM1 PAGE = 1
    .ebss:>> RAMLS5 | RAMGS0 PAGE = 1
    .esysmem :> RAMLS5 page = 1.

    /*初始化段进入闪存*/
    .econst:>> FLASHF | FLASHG PAGE = 0、ALIGN (8)
    .switch:> FLASHD page = 0、align(8)

    .reset:> reset、page =0、type = DSECT /*未使用、*/

    Filter_Regs 文件:> RAMGS0、页= 1

    SHARERAMGS0:> RAMGS0、页= 1
    SHARERAMGS1 :> RAMGS11, page = 1.

    /*闪存编程缓冲区*/
    BufferDataSection :> RAMD1, page = 1, align(4)

    /*使用 IPC API 驱动程序时、需要以下章节定义*/
    组:> CPU1TOCPU2RAM、PAGE = 1

    PUTBUFFER
    PUTWRITEIDX
    GETREADIDX
    }

    组:> CPU2TOCPU1RAM、PAGE = 1

    GETBUFFER:TYPE = DSECT
    GETWRITEIDX :类型= DSECT
    PUTREADIDX :类型= DSECT
    }

    }

    /*
    //==============================================================================
    //文件结尾。
    //==============================================================================
    */

    此致、

    Aditya.

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

    尊敬的 Aditya:

    内核报告了编程错误、您能否在 CCS 中检查 FMSTAT 寄存器以查看报告的失败状态? [/报价]

    内核尝试加载应用后、您能否在 CCS 中检查 FMSTAT 寄存器?

    您是否还能共享 SCI 闪存内核的链接器命令文件?

    此致、

    马特

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

    尊敬的 Aditya:

    请验证闪存中的应用程序和引导加载程序之间是否没有重叠/冲突。 目前、.econst 段重叠(在 FLASHF、FLASHG 和 FLASHH 中)、这在闪存编程时会出现问题。

    除此之外:当尝试进行实时固件更新(即从应用程序返回到引导加载程序而不复位)时、 还必须更加注意 RAM。

    我们在引导加载程序中添加了一些超时、但它无法正常工作。

    能否分享您为超时实施的代码?

    此致、

    马特

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

    尊敬的 Matt:

    引导加载程序中的超时按预期工作、5 秒后应用程序会运行。

    但是、当使用引导加载程序进行应用程序闪存时、我的串行外设 SCI A 和 SCI B 无法正常工作。 当我们仅刷写应用程序时、串行外设正常工作。

    您能检查并提供建议吗?

    检查以下代码以了解超时。

    void SCIA_AutobaudLock(void)
    {
        Uint16 byteData;
        Uint32 nWait = 0;
        //
        // Must prime baud register with >= 1
        //
        SciaRegs.SCILBAUD.bit.BAUD = 1;
    
        //
        // Prepare for autobaud detection
        // Set the CDC bit to enable autobaud detection
        // and clear the ABD bit
        //
        SciaRegs.SCIFFCT.bit.CDC = 1;
        SciaRegs.SCIFFCT.bit.ABDCLR = 1;
    
        //
        // Wait until we correctly read an
        // 'A' or 'a' and lock
        //
        while(SciaRegs.SCIFFCT.bit.ABD != 1 && nWait <= 5000) {
            nWait++;
            DELAY_US(1000);
        }
        if(nWait > 5000){
            bSetGotoFlash = 1;
        }
        else{
            //
            // After autobaud lock, clear the ABD and CDC bits
            //
            SciaRegs.SCIFFCT.bit.ABDCLR = 1;
            SciaRegs.SCIFFCT.bit.CDC = 0;
    
            while(SciaRegs.SCIRXST.bit.RXRDY != 1) { }
            byteData = SciaRegs.SCIRXBUF.bit.SAR;
            SciaRegs.SCITXBUF.bit.TXDT = byteData;
        }
        return;
    }

    然后返回到应用程序地址。

        SCIA_AutobaudLock();
    
        if(bSetGotoFlash)
        {
            EALLOW;
            WdRegs.SCSR.all = 0;    //enable WDRST
            WdRegs.WDCR.all = 0x28; //enable WD
            EDIS;
    
            EntryAddr = 0xaff96;
            return(EntryAddr);
        }

    此致、  

    Aditya.

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

    尊敬的 Aditya:

    您的超时代码违反了 TRM 中所述的自动波特检测序列。 您还需要通过在超时事件中清除 CDC 位来禁用进一步的自动波特锁定。

    void SCIA_AutobaudLock(void)
    {
        Uint16 byteData;
        Uint32 nWait = 0;
        //
        // Must prime baud register with >= 1
        //
        SciaRegs.SCILBAUD.bit.BAUD = 1;
    
        //
        // Prepare for autobaud detection
        // Set the CDC bit to enable autobaud detection
        // and clear the ABD bit
        //
        SciaRegs.SCIFFCT.bit.CDC = 1;
        SciaRegs.SCIFFCT.bit.ABDCLR = 1;
    
        //
        // Wait until we correctly read an
        // 'A' or 'a' and lock
        //
        while(SciaRegs.SCIFFCT.bit.ABD != 1 && nWait <= 5000) {
            nWait++;
            DELAY_US(1000);
        }
        if(nWait > 5000){
            bSetGotoFlash = 1;
            
            SciaRegs.SCIFFCT.bit.ABDCLR = 1;
            SciaRegs.SCIFFCT.bit.CDC = 0;
        }
        else{
            //
            // After autobaud lock, clear the ABD and CDC bits
            //
            SciaRegs.SCIFFCT.bit.ABDCLR = 1;
            SciaRegs.SCIFFCT.bit.CDC = 0;
    
            while(SciaRegs.SCIRXST.bit.RXRDY != 1) { }
            byteData = SciaRegs.SCIRXBUF.bit.SAR;
            SciaRegs.SCITXBUF.bit.TXDT = byteData;
        }
        return;
    }

    此致、

    马特

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

    尊敬的 Matt:

    我们尝试清除 CDC 位、但遇到了一些问题。

    在跳转到应用程序之前、是否有方法从引导加载程序执行干净的启动?

    此致、
    Aditya.

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

    尊敬的 Aditya:

    您是否正在对应用程序 codestart 执行 LB? 根据您提供的应用程序的链接器命令文件、地址为 0x098000。 为什么要分支到 0x0AFF96?

    此致、

    马特

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

    尊敬的 Matt:

    我们引用了映射文件、并看到条目符号_c_int00位于0x0AFF96、因此我们从引导加载程序跳转到该地址。

    我们0x098000也尝试了分支到、但注意到 SCI 模块仍然无法被调用

    此致、
    Aditya.

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

    尊敬的 Aditya:

    我明白了。 通常、您需要分支到应用程序代码的 codestartbranch.asm。 您用于引导加载程序的 codestartbranch.asm 是什么?

    并确认:您是否已删除内核和应用程序之间闪存中的所有重叠?

    此致、

    马特

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

    尊敬的 Matt:

    是的、我们已删除所有重叠。 内核和应用程序之间没有闪存重叠。

    请找到我们使用的以下.asm 文件。

    ;// TI File $Revision: /main/2 $
    ;// Checkin $Date: December 7, 2011   18:25:05 $
    ;//###########################################################################
    ;//
    ;// FILE:  F2837xD_CodeStartBranch._asm	
    ;//
    ;// TITLE: Branch for redirecting code execution after boot. 
    ;//
    ;// For these examples, code_start is the first code that is executed after
    ;// exiting the boot ROM code. 
    ;//
    ;// The codestart section in the linker cmd file is used to physically place
    ;// this code at the correct memory location.  This section should be placed 
    ;// at the location the BOOT ROM will re-direct the code to.  For example, 
    ;// for boot to FLASH this code will be located at 0x3f7ff6. 
    ;//
    ;// In addition, the example F2837xD projects are setup such that the codegen
    ;// entry point is also set to the code_start label.  This is done by linker 
    ;// option -e in the project build options.  When the debugger loads the code,
    ;// it will automatically set the PC to the "entry point" address indicated by
    ;// the -e linker option.  In this case the debugger is simply assigning the PC, 
    ;// it is not the same as a full reset of the device. 
    ;// 
    ;// The compiler may warn that the entry point for the project is other then
    ;//  _c_init00.  _c_init00 is the C environment setup and is run before 
    ;// main() is entered. The code_start code will re-direct the execution 
    ;// to _c_init00 and thus there is no worry and this warning can be ignored. 
    ;// 
    ;//###########################################################################
    ;// $TI Release: F2837xD Support Library v3.04.00.00 $
    ;// $Release Date: Sun Mar 25 13:26:04 CDT 2018 $
    ;// $Copyright:
    ;// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/
    ;//
    ;// Redistribution and use in source and binary forms, with or without 
    ;// modification, are permitted provided that the following conditions 
    ;// are met:
    ;// 
    ;//   Redistributions of source code must retain the above copyright 
    ;//   notice, this list of conditions and the following disclaimer.
    ;// 
    ;//   Redistributions in binary form must reproduce the above copyright
    ;//   notice, this list of conditions and the following disclaimer in the 
    ;//   documentation and/or other materials provided with the   
    ;//   distribution.
    ;// 
    ;//   Neither the name of Texas Instruments Incorporated nor the names of
    ;//   its contributors may be used to endorse or promote products derived
    ;//   from this software without specific prior written permission.
    ;// 
    ;// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
    ;// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
    ;// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    ;// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
    ;// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    ;// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
    ;// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    ;// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    ;// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    ;// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    ;// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    ;// $
    ;//###########################################################################
    
    ***********************************************************************
    
    WD_DISABLE	.set	1		;set to 1 to disable WD, else set to 0
    
        .global code_start
        .global _ExitBoot
    	.ref _main
    
    ***********************************************************************
    * Function: codestart section
    *
    * Description: Branch to code starting point
    ***********************************************************************
    
        .sect "codestart"
    
    code_start:
            LB wd_disable       ;Branch to watchdog disable code
    
    ;end codestart section
    
    ***********************************************************************
    * Function: wd_disable
    *
    * Description: Disables the watchdog timer
    ***********************************************************************
        .if WD_DISABLE == 1
    
        .text
    __stack:    .usect ".stack",0
    
    wd_disable:
        SETC OBJMODE        ;Set OBJMODE for 28x object code
        EALLOW              ;Enable EALLOW protected register access
        MOVZ DP, #7029h>>6  ;Set data page for WDCR register
        MOV @7029h, #0068h  ;Set WDDIS bit in WDCR to disable WD
        EDIS                ;Disable EALLOW protected register access
    ;    LB _c_int00         ;Branch to start of boot._asm in RTS library
    	LCR _main
    ; Cleanup and exit.  At this point the EntryAddr
    ; is located in the ACC register
        BF  _ExitBoot,UNC
        .endif
    
    ;end wd_disable
    
    
    ;-----------------------------------------------
    ; _ExitBoot
    ;-----------------------------------------------
    ;-----------------------------------------------
    ;This module cleans up after the boot loader
    ;
    ; 1) Make sure the stack is deallocated.
    ;    SP = 0x400 after exiting the boot
    ;    loader
    ; 2) Push 0 onto the stack so RPC will be
    ;    0 after using LRETR to jump to the
    ;    entry point
    ; 2) Load RPC with the entry point
    ; 3) Clear all XARn registers
    ; 4) Clear ACC, P and XT registers
    ; 5) LRETR - this will also clear the RPC
    ;    register since 0 was on the stack
    ;-----------------------------------------------
    
    _ExitBoot:
    
    ;-----------------------------------------------
    ;   Insure that the stack is deallocated
    ;-----------------------------------------------
    
        MOV SP,#__stack
    
    ;-----------------------------------------------
    ; Clear the bottom of the stack.  This will endup
    ; in RPC when we are finished
    ;-----------------------------------------------
    
        MOV  *SP++,#0
        MOV  *SP++,#0
    
    ;-----------------------------------------------
    ; Load RPC with the entry point as determined
    ; by the boot mode.  This address will be returned
    ; in the ACC register.
    ;-----------------------------------------------
    
        PUSH ACC
        POP  RPC
    
    ;-----------------------------------------------
    ; Put registers back in their reset state.
    ;
    ; Clear all the XARn, ACC, XT, and P and DP
    ; registers
    ;
    ; NOTE: Leave the device in C28x operating mode
    ;       (OBJMODE = 1, AMODE = 0)
    ;-----------------------------------------------
        ZAPA
        MOVL  XT,ACC
        MOVZ  AR0,AL
        MOVZ  AR1,AL
        MOVZ  AR2,AL
        MOVZ  AR3,AL
        MOVZ  AR4,AL
        MOVZ  AR5,AL
        MOVZ  AR6,AL
        MOVZ  AR7,AL
        MOVW  DP, #0
    
    ;------------------------------------------------
    ;   Restore ST0 and ST1.  Note OBJMODE is
    ;   the only bit not restored to its reset state.
    ;   OBJMODE is left set for C28x object operating
    ;   mode.
    ;
    ;  ST0 = 0x0000     ST1 = 0x0A0B
    ;  15:10 OVC = 0    15:13      ARP = 0
    ;   9: 7  PM = 0       12       XF = 0
    ;      6   V = 0       11  M0M1MAP = 1
    ;      5   N = 0       10  reserved
    ;      4   Z = 0        9  OBJMODE = 1
    ;      3   C = 0        8    AMODE = 0
    ;      2  TC = 0        7 IDLESTAT = 0
    ;      1 OVM = 0        6   EALLOW = 0
    ;      0 SXM = 0        5     LOOP = 0
    ;                       4      SPA = 0
    ;                       3     VMAP = 1
    ;                       2    PAGE0 = 0
    ;                       1     DBGM = 1
    ;                       0     INTM = 1
    ;-----------------------------------------------
    
        MOV  *SP++,#0
        MOV  *SP++,#0x0A0B
        POP  ST1
        POP  ST0
    
    ;------------------------------------------------
    ;   Jump to the EntryAddr as defined by the
    ;   boot mode selected and continue execution
    ;-----------------------------------------------
    
        LRETR
    
    ;eof ----------
    
    	.end
    	
    ;//===========================================================================
    ;// End of file.
    ;//===========================================================================
    

    重置“ClkCfgRegs"后“后、我的问题会重新出现。

    但我不知道为什么在.asm 文件的 exit routin 中、该寄存器不会复位。

    此致、

    Aditya.

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

    尊敬的 Aditya:

    我认为 ClkCfgRegs 不会在退出引导例程中复位。

    您是否在您的应用中初始化 Sysctrl(即初始化外设时钟)、而它以前不起作用?

    此致、

    马特

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

    尊敬的 Matt:

    是的、我们有初始化 Sysctrl、它已在“F2837xD/sci_flash_kernels_cpu01.c"中“中调用  

    // Step 1. Initialize System Control:
    // Enable Peripheral Clocks
    // This example function is found in the F2837xD_SysCtrl.c file.
    //
        InitSysCtrl(); //PLL activates

    我的 “CodeStartBranch._asm"是否“是否有任何问题? 我已经与大家分享了。

    此致、

    Aditya.

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

    尊敬的 Aditya:

    CodeStartBranch 文件看起来很好。

    是否也在应用程序中再次初始化 Sysctrl? 当跳转到应用程序的起始地址时、SCI 依赖项之一可能仍然被重新初始化/修改。 例如、如果时钟被重新初始化。

    此致、

    马特

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

    您好、

    由于这个线程在一个月内没有得到回复,我会假设它已经解决,并关闭线程。

    此致、

    马特

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

    尊敬的 Matt:

    现在、我们在升级新版本的固件时遇到了以下问题、但在升级以前版本时、升级成功、没有任何错误。 但现在我们得到了这种类型的错误、或者有时它会卡在 46 00 86 FE 06 00。

    请检查以下上传的文件、  

    firmware.txt — 升级固件时出现上述错误。  

    400000000384.v5.1.txt — 以前固件版本的工作 txt 文件。

    e2e.ti.com/.../400000000384.v5.1.txte2e.ti.com/.../firmware.txt

    我的 cmd 文件用于创建两个固件版本

    /*
    //###########################################################################
    // FILE:    flash_programming_cpu1_FLASH.cmd
    // TITLE:   Linker Command File For all F28X7x devices
    //###########################################################################
    // $TI Release: F2837xD Support Library v200 $
    // $Release Date: Tue Jun 21 13:00:02 CDT 2016 $
    // $Copyright: Copyright (C) 2013-2016 Texas Instruments Incorporated -
    //             http://www.ti.com/ ALL RIGHTS RESERVED $
    //###########################################################################
    */
    
    /* ======================================================
    // For Code Composer Studio V2.2 and later
    // ---------------------------------------
    // In addition to this memory linker command file,
    // add the header linker command file directly to the project.
    // The header linker command file is required to link the
    // peripheral structures to the proper locations within
    // the memory map.
    // The header linker files are found in <base>\F2837xD_headers\cmd
    // For BIOS applications add:      F28X7x_Headers_BIOS.cmd
    // For nonBIOS applications add:   F28X7x_Headers_nonBIOS.cmd
    ========================================================= */
    
    /* Define the memory block start/length for the F28X7x
       PAGE 0 will be used to organize program sections
       PAGE 1 will be used to organize data sections
    
       Notes:
             Memory blocks on F28M3Xx are uniform (ie same
             physical memory) in both PAGE 0 and PAGE 1.
             That is the same memory region should not be
             defined for both PAGE 0 and PAGE 1.
             Doing so will result in corruption of program
             and/or data.
    
             Contiguous SARAM memory blocks or flash sectors can be
             be combined if required to create a larger memory block.
    */
    
    MEMORY
    {
    PAGE 0:    /* Program Memory */
              /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */
              /* BEGIN is used for the "boot to Flash" bootloader mode   */
    
      BEGIN           	: origin = 0x086000, length = 0x000002
       RAMM0           	: origin = 0x000122, length = 0x0002DE
       RAMD0           	: origin = 0x00B000, length = 0x000800
       RAMLS03          : origin = 0x008000, length = 0x002000
    /*	RAMLS1           : origin = 0x008800, length = 0x000800
        RAMLS2           : origin = 0x009000, length = 0x000800
        RAMLS3           : origin = 0x009800, length = 0x000800 */
       RAMLS4      		: origin = 0x00A000, length = 0x000800
       RAMGS14          : origin = 0x01A000, length = 0x001000
       RAMGS15          : origin = 0x01B000, length = 0x001000
       RESET           	: origin = 0x3FFFC0, length = 0x000002
    
    	/* Flash sectors */
       FLASHA           : origin = 0x080000, length = 0x002000	/* on-chip Flash */
       FLASHB           : origin = 0x082000, length = 0x002000	/* on-chip Flash */
       FLASHC           : origin = 0x084000, length = 0x002000	/* on-chip Flash */
       FLASHD           : origin = 0x086002, length = 0x001FFE	/* on-chip Flash */
       FLASHE           : origin = 0x088000, length = 0x008000	/* on-chip Flash */
       FLASHF           : origin = 0x090000, length = 0x008000	/* on-chip Flash */
       FLASHG           : origin = 0x098000, length = 0x008000	/* on-chip Flash */
       FLASHH           : origin = 0x0A0000, length = 0x008000	/* on-chip Flash */
       FLASHI           : origin = 0x0A8000, length = 0x008000	/* on-chip Flash */
       FLASHJ           : origin = 0x0B0000, length = 0x008000	/* on-chip Flash */
       FLASHK           : origin = 0x0B8000, length = 0x002000	/* on-chip Flash */
       FLASHL           : origin = 0x0BA000, length = 0x002000	/* on-chip Flash */
       FLASHM           : origin = 0x0BC000, length = 0x002000	/* on-chip Flash */
       FLASHN           : origin = 0x0BE000, length = 0x002000	/* on-chip Flash */
    
    PAGE 1 :   /* Data Memory */
             /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */
    
        BOOT_RSVD       : origin = 0x000002, length = 0x000120     /* Part of M0, BOOT rom will use this for stack */
    	RAMM1           : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
        RAMD1           : origin = 0x00B800, length = 0x000800
    
        RAMLS5      : origin = 0x00A800, length = 0x000800
    
    	RAMGS0          : origin = 0x00C000, length = 0x00B000
    	/*RAMGS1          : origin = 0x00D000, length = 0x001000*/
    	/*RAMGS2          : origin = 0x00E000, length = 0x001000*/
    	/*RAMGS3          : origin = 0x00F000, length = 0x001000
    	RAMGS4          : origin = 0x010000, length = 0x001000
    	RAMGS5          : origin = 0x011000, length = 0x001000
    	RAMGS6          : origin = 0x012000, length = 0x001000
    	RAMGS7          : origin = 0x013000, length = 0x001000
    	RAMGS8          : origin = 0x014000, length = 0x001000
    	RAMGS9          : origin = 0x015000, length = 0x001000
    	RAMGS10         : origin = 0x016000, length = 0x001000*/
    	RAMGS11         : origin = 0x017000, length = 0x001000
    	RAMGS12         : origin = 0x018000, length = 0x001000
    	RAMGS13         : origin = 0x019000, length = 0x001000
    
    
       CPU2TOCPU1RAM   : origin = 0x03F800, length = 0x000400
       CPU1TOCPU2RAM   : origin = 0x03FC00, length = 0x000400
    }
    
    
    SECTIONS
    {
    
       /* Allocate program areas: */
       .cinit              : > FLASHD      PAGE = 0, ALIGN(8)
       .pinit              : > FLASHD,     PAGE = 0, ALIGN(8)
       .text               : >> FLASHD |FLASHE | FLASHF | FLASHG | FLASHH     PAGE = 0, ALIGN(8)
       codestart           : > BEGIN	PAGE = 0, ALIGN(8)
       
        GROUP
        {
            ramfuncs
            dclfuncs
            { -l F021_API_F2837xD_FPU32.lib}
         
        } LOAD = FLASHE,
          RUN  = RAMLS03, 
          LOAD_START(_RamfuncsLoadStart),
          LOAD_SIZE(_RamfuncsLoadSize),
          LOAD_END(_RamfuncsLoadEnd),
          RUN_START(_RamfuncsRunStart),
          RUN_SIZE(_RamfuncsRunSize),
          RUN_END(_RamfuncsRunEnd),
          PAGE = 0, ALIGN(8)
    
       /* Allocate uninitalized data sections: */
       .stack              : > RAMM1       PAGE = 1
       .ebss               : >> RAMLS5 | RAMGS0       PAGE = 1
       .esysmem            : > RAMLS5       PAGE = 1
    
       /* Initalized sections go in Flash */
       .econst             : >> FLASHE | FLASHF | FLASHG      PAGE = 0, ALIGN(8)
       .switch             : > FLASHE      PAGE = 0, ALIGN(8)
    
       .reset              : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */
    
       Filter_RegsFile     : > RAMGS0,	   PAGE = 1
    
       SHARERAMGS0		: > RAMGS0,		PAGE = 1
       SHARERAMGS1		: > RAMGS11,		PAGE = 1
    
       /* Flash Programming Buffer */
       BufferDataSection : > RAMD1, PAGE = 1, ALIGN(4)   
       
       /* The following section definitions are required when using the IPC API Drivers */ 
        GROUP : > CPU1TOCPU2RAM, PAGE = 1 
        {
            PUTBUFFER 
            PUTWRITEIDX 
            GETREADIDX 
        }
    
        GROUP : > CPU2TOCPU1RAM, PAGE = 1
        {
            GETBUFFER :    TYPE = DSECT
            GETWRITEIDX :  TYPE = DSECT
            PUTREADIDX :   TYPE = DSECT
        }  
    
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    
    
    
    
    

     请告诉我、我的 cmd 文件或创建 firmware.txt 文件中是否有任何错误。

    此致、

    Aditya Malwade

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

    尊敬的 Matt:

    我知道您可能很忙、但如果您能在方便时提供更新、我将不胜感激。

    如果您需要我方面的任何其他信息以继续、请告诉我。

    此致、

    Aditya Malwade。

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

    尊敬的 Aditya:

    能否提供有关不同固件版本之间发生了哪些变化的更多详细信息? 您是否还可以共享这两个版本的.map 文件?

    此致、

    马特

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

    尊敬的 Matt:

    请查找随附的两个版本的地图文件。

    固件中完成的更改:  

    1.更改固件版本。

    2.在液晶显示屏中添加预切字符。

    3.将函数调用从 10 毫秒循环更改为 300 毫秒循环。

    4.添加校准验证锁。

    此致、

    Aditya.

     e2e.ti.com/.../kcontrol_5F00_map_5F00_file_5F00_Not_5F00_working.txt

    e2e.ti.com/.../kcontrol_5F00_map_5F00_file_5F00_working.txt

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

    尊敬的 Aditya:

    我们将能够在第二天内对此进行研究。

    谢谢。此致、

    Charles

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

    Aditya,

    您可以为此主题创建新主题吗?

    谢谢。此致、

    Charles

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

    好的、没问题

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

    尊敬的 Charles:

    请在下面找到有关使用自定义 SCI 引导加载程序进行固件升级的新创建线程的链接:

    Link New Thread–使用自定义 SCI 引导加载程序进行固件升级

    如果您需要更多信息、请告诉我。

    此致、
    Aditya.

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

    尊敬的 Aditya:

    好的、感谢您创建新线程。

    此致、

    Charles