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.

[参考译文] CCS/TMS320C6713B:CCS/TMS320C6713B

Guru**** 2590860 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/588120/ccs-tms320c6713b-ccs-tms320c6713b

器件型号:TMS320C6713B

工具/软件:Code Composer Studio

我使用 CCSv3.3 开发 C6713引导加载。  我设计的次级引导加载 程序可以将应用程序从0x90000400的闪存复制到0x00000000的 IRAM 中、然后板复位、项目可以正确运行。 但我希望 二级应用程序可以 从0x90000400处的闪存复制到0x80000000开头的 SDRAM 中、但当我复位电路板时、它无法 正确运行。 我不知道我的设计是错误的。  希望获得您的帮助。

此外,还有一个问题,即  在<文件中设计的次级引导加载程序示例 >  可以 将 应用 程序从闪存复制到 IRAM。 但是、它是否 满足 了我将 应用从闪存复制到 SDRAM 的需要?

提前感谢您的回复。

1.my .cmd:

-c
-x
l rts670.lib
-heap 200h
-stack 300h

存储器

BOOT_RAM:o=0、l=200h
IRAM:o=401h、l=0x0003FBFE

SDRAM:o = 80000000h l = 10000000h  

部分

 .vectors :>boot_RAM

 boot_load:> boot_RAM

.bss:> SDRAM
.cinit:> SDRAM
.far:>SDRAM
.stack:> SDRAM  

.text > SDRAM
.const > SDRAM

.pinit > SDRAM
.switch > SDRAM
.data > SDRAM
.cio > SDRAM

2.我使用 十六进制转换实用程序  自动创建段复制表。 我 的十六进制命令文件如下所示:

Debug\boot_test.out
-A
-memwidth 8
-map boot_test.map
-boot
-bootorg 0x90000400
bootsection .boot_load 0x90000000
ROM
{  
闪存:org = 0x90000000、len = 0x8C00、romwidth = 8、files ={boot_test.hex}

我的次级引导加载程序如下:

;a;
;===== BOOT_C671x.s62 ===

.title "Flash 启动实用程序"
选项 D、T
长度102.
宽140

;为 C671x 系列定义的全局 EMIF 符号
.include boot_C671x.h62

;生成的引导表的地址
copyTable .equ 0x90000400

;.global _text_size
;.global _text_ld_start
;.global _text_rn_start

.sect ".boot_load"
全局_boot

.ref _c_int00

启动(_P):  
;'********
;*调试循环-为正常运行注释出 B
;'********

零 B1
_myloop:;[!b1] B _myloop  
NOP 5.
_myloopend:NOP

;'********
;*配置 EMIF、EMIF
;'********

;********
;* EMIF_GCTL = EMIF_GCTL_V;
;********

mvkl EMIF_GCTL、A4  
|| mvkl EMIF_GCTL_V、B4

mvkh EMIF_GCTL、A4
|| mvkh EMIF_GCTL_V、B4

STW B4、* A4

;********
;* EMIF_CE0 = EMIF_CE0_V
;********

mvkl EMIF_ce0、A4  
|| mvkl EMIF_ce0_V、B4

mvkh EMIF_ce0、A4
|| mvkh EMIF_ce0_V、B4

STW B4、* A4

;********
;* EMIF_CE1 = EMIF_CE1_V (设置为8位异步)
;********

mvkl EMIF_CE1、A4  
|| mvkl EMIF_CE1_V、B4

mvkh EMIF_CE1、A4
|| mvkh EMIF_CE1_V、B4

STW B4、* A4

;********
;* EMIF_CE2 = EMIF_CE2_V (设置为32位异步)
;********

mvkl EMIF_CE2、A4  
|| mvkl EMIF_CE2_V、B4

mvkh EMIF_CE2、A4
|| mvkh EMIF_CE2_V、B4

STW B4、* A4

;********
;* EMIF_CE3 = EMIF_CE3_V (设置为32位异步)
;********

|| mvkl EMIF_CE3、A4  
|| mvkl EMIF_CE3_V、B4;

mvkh EMIF_CE3、A4
|| mvkh EMIF_CE3_V、B4

STW B4、* A4

;********
;* EMIF_SDRAMCTL = EMIF_SDRAMCTL_V
;********
|| mvkl EMIF_SDRAMCTL、A4  
|| mvkl EMIF_SDRAMCTL_V、B4;

mvkh EMIF_SDRAMCTL、A4
|| mvkh EMIF_SDRAMCTL_V、B4

STW B4、* A4

;********
;* EMIF_SDRAMTIM = EMIF_SDRAMTIM_V
;********
|| mvkl EMIF_SDRAMTIM、A4  
|| mvkl EMIF_SDRAMTIM_V、B4;

mvkh EMIF_SDRAMTIM、A4
|| mvkh EMIF_SDRAMTIM_V、B4

STW B4、* A4

;********
;* EMIF_SDRAMEXT = EMIF_SDRAMEXT_V
;********
|| mvkl EMIF_SDRAMEXT、A4  
|| mvkl EMIF_SDRAMEXT_V、B4;

mvkh EMIF_SDRAMEXT、A4
|| mvkh EMIF_SDRAMEXT_V、B4

STW B4、* A4


;复制段,

mvkl copyTable,A3;加载表指针
mvkh copyTable、A3

LDW *A3++,B1;负载入口点

COPY_SECTION 顶部:
LDW *A3++,b0;字节计数  
LDW *A3++,A4;RAM 起始地址
NOP 3.

[!b0] b copy_done;我们是否复制了所有段?
NOP 5.

COPY_LOOP:
LDB * A3++、B5
低于 b0、1、b0;递减计数器
[b0] b COPY_LOOP;如果未完成则设置分支
[!b0] b COPY_SECTION _TOP
A1为零
[!b0]和3、A3、A1
STB B5、* A4++
[!b0]和-4、A3、A5;向上舍入地址到4的下一个倍数
[a1]加4、A5、A3;四舍五入地址到4的下一个倍数


;跳转到入口点

COPY_DONE:
b .S2 B1
NOP 5.

;复制表:  

;计数
;闪存启动(载入)地址  
; RAM 启动(运行)地址

;.text
;.word _text_size
;.word _text_ld_start
;.word _text_rn_start


;表末尾
;.word 0
;.word 0
;.word 0

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

    我已将其转发给引导加载程序专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请注意、IRAM 在芯片上、而 SDRAM 是外部板级组件、因此次级引导加载程序需要初始化 SDRAM 时钟和 SDRAM 时序、以便可以写入该存储器。 我看到您的汇编代码正在配置 SDRAM 时序和 EMIF 寄存器。

    您是否已确认这些 SDRAM 时序和 EMIF 配置可以在 GEL 文件中使用它们。 您需要在 GEL 文件中使用这些设置来独立于引导加载程序进行测试。 您可以使用我们为评估平台提供的 GEL 作为参考。

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

    此外、检查 ECLKIN 或 SYSCLK3设置以查看时钟是否被正确设置。

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

          感谢你的建议。

           在我的项目中、我不配置 PLL、而是使用默认的 CPU 时钟、即50MHz。 我已经通过示波器对其进行了检查。

           现在使用上面提到的项目、我已经实现了将   一个33KB 的小项目从闪存加载到 SDRAM 中。 但是、当项目的代码变大时、例如800KB、即2级引导加载

    无法 使用选项“View -> Memory”,我可以看到两级引导加载从闪存复制到 IRAM。但两级引导加载不会将用户代码从闪存复制到 SDRAM。

           此外、我在我的非引导加载项目中测试 SDRAM 和 EMIF 的设置 、在 GEL 文件中大约为800KB、这些设置有效。  我使用了选项"file->load symbols",然后在时进行 sigle debug

    代码执行  复制表,发出警告 ,指示“目标 CPU 停止时出现问题:错误0x80000020/-1070致命错误:执行期间,……” 序列 ID:15错误代码:-1070错误类:0x80000020"。

    当我调试大约33KB 的小工程时、同样的警告也会出现、但是可以从闪存引导加载该小工程到 SDRAM。 这实在太糟糕了。

             是否有任何项目从闪存成功引导加载到 SDRAM 中、我可以参考?  我的电子邮件是 1511534881@qq.com。

           衷心感谢您的帮助。 希望你有一个美好的一天!