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.

[参考译文] TMS320F28069:串行闪存编程器卡在&quot 上;应用自动波特率成功"

Guru**** 2582405 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/970210/tms320f28069-serial-flash-programmer-getting-stuck-at-application-autobaud-successful

器件型号:TMS320F28069

您好!

我使用以下命令将输出文件转换为十六进制格式:

hex2000.exe -boot -sci8 -a example_2806xLEDBlink.out -o blinky_new.txt

它通过以下输出进行转换:

正在转换为 ASCII 十六进制格式...
"Example_2806xLEDBlink.out" codestart =>(引导表)
"Example_2806xLEDBlink.out" ramfuncs =>(引导表)
"Example_2806xLEDBlink.out".text =>(引导表)
"Example_2806xLEDBlink.out".cinit =>(引导表)
"Example_2806xLEDBlink.out".econst =>(引导表)

然后、我使用以下命令刷写文件:

serial_flash_programr.exe -d f2806x -k f28069_sci_flash_kernel.txt -p COM6 -b 9600 -v -a blinky_new.txt

然后获得以下输出:

C2000串行固件升级程序
版权所有(c) 2013 Texas Instruments Incorporated。 保留所有权利。

正在获取通信状态
建立通信 DCB
调整端口设置

调用 F05_DownloadImage
正在将 blinky_new.txt 下载到设备...

内核自动波特率成功
aA=aa.
8==8
0==0
0==0
0==0
0==0
0==0
0==0
0==0
0==0
0==0
0==0
0==0
0==0
0==0
0==0
0==0
0==0
0==0
0==0
62=62
83=83
2==2
0==0
0==0
0==0
0==0
0==0
40==40
0==0
57==57
83=83
B6=B6
0==0
0==0
0==0
50==50
0==0
C==c
fe=fe
40==40
76==76
5==5

内核
已完成等待内核引导...正在尝试自动波特
应用程序自动波特率成功

(无限期停留在这里)

如果我有任何问题、请告诉我。

编辑:

在用"/f28069/common/F28069.cmd"替换命令文件后、上述问题得到解决、现在我可以将闪烁示例固件上载到控制器、但当我尝试上传固件时、它会卡在同一位置。 我的固件可能太大、比如300KB、上载可能需要太多时间吗? 或者我的固件的命令文件是否有问题、我正在将其粘贴到这里、请检查一下。

//
*版权所有(c) 2015-2020,Texas Instruments Incorporated
*保留所有权利。
*
*
只要
符合以下条件*、允许以源代码和二进制形式重新分发和使用:
*
*源代码的重新分发必须保留上述版权
声明*、此条件列表和以下免责声明。
*
***二进制形式的再发行必须在

*随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
***未经

事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*、

不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
*贡献者都不对任何直接、间接、偶然、特殊、
*模范、 或相应的损害(包括但不限于
*采购替代产品或服务;丧失使用、数据或利润;
*或业务中断)、但出于任何责任理论
、*无论是在合同中、严格责任还是由于
使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
、*即使已获悉可能会发生此类损坏。
//
/*
=== TMS320F28069.cmd ===
*定义 F28069的内存块开始/长度
*/

/*
页0将用于组织程序段
*页1将用于组织数据段
*
*注意:
* F2806x 上的内存块是一致的(即相同
的* 物理存储器)。
* 相同的存储器区域不应
是* 同时为 PAGE 0和 PAGE 1定义。
* 这样做将导致程序损坏
* 和/或数据。
//

_Cla1Prog_Start =_Cla1funcsRunStart;

CLA_暂 存区大小= 0x100;
--undef_sym=__cla_scratchpad_end
--undef_sym=__cla_scratchpad_start

MEMORY
{
PAGE 0://程序存储器*/RAML4L

:origin = 0x00A000、length = 0x001C00 /*片上 RAM 块 L4 */
L03SARAM:origin = 0x008000、length = 0x002000 /*片上 RAM 块 L0-L3 */
OTP :origin = 0x3D7800,length = 0x000400 /*片上 OTP */
闪存 :origin = 0x3D8000,length = 0x01FF80 /*片上闪存*/
csm_RSVD:origin = 0x3F7F80,length = 0x000076 /*使用 CSM 时使用所有0x0000进行编程。 *
开始 :origin = 0x3F7FF6,length = 0x000002 /*用于"引导至闪存"引导加载程序模式。 *
CSM_PWL :origin = 0x3F7FF8、length = 0x000008 /*闪存中的 CSM 密码位置*/

FPUTABLES:origin = 0x3FD860,length = 0x0006A0 /*引导 ROM 中的 FPU 表*/
IQTABLES:origin = 0x3FDF00,length = 0x000B50 /*引导 ROM 中的 IQMath 表*/
IQTABLES2:origin = 0x3FEA50,length = 0x00008C /*引导 ROM 中的 IQMath 表*/
IQTABLES3:origin = 0x3FEADC,length = 0x0000AA/*引导 ROM 中的 IQMath 表*/

ROM :origin = 0x3FF3B0,length = 0x000C10 /*引导 ROM */
复位 :origin = 0x3FFFC0,length = 0x000002 /*引导 ROM 的一部分*/
矢量 :origin = 0x3FFFC2,length = 0x00003E /*部分引导 ROM */

第1页:/*数据存储器*/

M01SARAM:origin = 0x000000,length = 0x000800 /*片上 RAM 块 M0、M1 */
PIEVECT :origin = 0xD00,length = 0x100
L46SARAM:origin = 0x00A000、length = 0x006000 /*片上 RAM 块 L4-L6 */
L78SARAM:origin = 0x010000,length = 0x004000 /*片上 RAM 块 L7、L8 */

CLARAM2 :origin = 0x008000、length = 0x000800//片上 RAM 块 L0 */
CLARAM0 :origin = 0x008800,length = 0x000400//片上 RAM 块 L1 */
CLARAM1 :origin = 0x008C00,length = 0x000400//片上 RAM 块 L1 */
CLA1_MSGRAMLOW :origin = 0x001480、length = 0x000080
CLA1_MSGRAMHIGH :origin = 0x001500,length = 0x000080
}/*


将段分配给内存块。
*注意:
* DSP28_CodeStartBranch.asm
*中的 codestart 用户定义的段 用于在引导至闪存
时重定向代码执行*
ramfuncs 用户定义的段、用于存储将为
*的函数 从闪存复制到 RAM
*/

SECTIONS
{
/*分配计划领域:*/
.cinit :>闪存 PAGE = 0
.pinit :>闪存 PAGE = 0
.text :>闪存 PAGE = 0
codestart :>开始 PAGE = 0
ramfuncs :LOAD = FLASH PAGE = 0、
RUN = L03SARAM PAGE = 0、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)

csmpasswds :>CSM_PWL PAGE = 0
csm_rsvd :>csm_RSVD page = 0

/*分配未初始化的数据段:*/
堆栈 :> M01SARAM | L46SARAM PAGE = 1.
ebss :> M01SARAM | L46SARAM PAGE = 1.
.data :> M01SARAM | L46SARAM PAGE = 1.
等斯梅姆 :> L78SARAM | L46SARAM | M01SARAM PAGE = 1.
.cio :> L78SARAM | L46SARAM | M01SARAM PAGE = 1.

/*初始化段进入闪存*/
/*要使 SDFlash 对这些内容进行编程、必须将它们分配到第0页*/
.econst :>闪存 PAGE = 0
切换 :>闪存 PAGE = 0
.args :>闪存 PAGE = 0

#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>=15009000
.TI.ramfunc :{}load = flash page = 0、
RUN = L03SARAM PAGE = 0、
表(BINIT)
#endif
#endif

/*分配 IQ 数学区域:*/
IQMath :>闪存 PAGE = 0 /*数学代码*/
IQmathTables :> IQTABLES PAGE = 0,TYPE = NOLOAD

/*分配 FPU 数学区域:*/
FPUmathTables :> FPUTABLES PAGE = 0,TYPE = NOLOAD

/*
*如果调用 IQNexp()或 IQexp(),请取消注释以下部分
* IQMath.lib 库中的函数、以便利用
*引导 ROM 中的相关 IQMath 表(这可以节省空间和引导 ROM
*为1个等待状态)。 如果此部分未注释、则为 IQmathTables2
*将被加载到其他存储器(SARAM、闪存等)中并将采用
*向上计数空间、但0等待状态是可能的。
*
/*
IQmathTables2. :> IQTABLES2 page = 0,type = NoLoad
{
IQMath.lib (IQmathTablesRam)
}
*

/*
*如果调用 IQNasin ()或 IQasin (),请取消注释以下部分
* IQMath.lib 库中的函数、以便利用
*引导 ROM 中的相关 IQMath 表(这可以节省空间和引导 ROM
*为1个等待状态)。 如果此部分未注释、则为 IQmathTables2
*将被加载到其他存储器(SARAM、闪存等)中并将采用
*向上计数空间、但0等待状态是可能的。
*
/*
IQmathTables3. :> IQTABLES3 page = 0,type = NoLoad
{
IQMath.lib (IQmathTablesRam)
}
*/

.scratchpad :> CLARAM0,PAGE = 1.bss_CLA
:> CLARAM0、PAGE = 1.CONST_CLA
:> CLARAM0,PAGE = 1

dclfuncs:load = flash,page = 0,
运行= RAML4Lpage = 0
dcl32funcs:load = flash、page = 0、
运行= RAML4LPAGE = 0


Cla1Prog :>闪存,
load_start (_Cla1funcsLoadStart)、
load_end (_Cla1funcsLoadEnd)、
load_size (_Cla1funcsLoadSize)、
run_start (_Cla1funcsRunStart)、
PAGE = 0

Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,PAGE = 1
CpuToCl1MsgRAM:> CLA1_MSGRAMIGH,PAGE = 1
Cla1DataRam0:> CLARAM0,PAGE = 1
Cla1DataRam1:> CLARAM1,PAGE = 1
Cla1DataRam2:>CLARAM2,页=1

CLA1mathTables:>CLARAM1,
Load_start (_Cla1mathTablesLoadStart)、
Load_End (_Cla1mathTablesLoadEnd)、
load_size (_Cla1mathTablesLoadSize)、
run_start (_Cla1mathTablesRunStart)、
PAGE = 1

CLAscratch :
{*。obj (CLAscratch)
。 += CLA_ScratchPad_size;
*。obj (CLAscratch_end)}> CLARAM0、
PAGE = 1
}

谢谢、

Najeeb

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

    您好!

    我自己找到了解决方案。 实际上、我研究了内核的代码、它只擦除了少数扇区、因为我的固件足够大、不适合这些扇区、这会导致数据覆盖。 因此、我更改了内核以擦除所有扇区、现在它的工作方式就像一个魅力。

    此致、

    Najeeb