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.

[参考译文] TMS320C5505:如何引导至外部存储器

Guru**** 2553450 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/623235/tms320c5505-how-to-boot-to-external-memory

器件型号:TMS320C5505

我尝试引导至外部存储器 CS3 SRAM、我在 cmd 文件中进行了如下配置、 它可以引导至外部存储器、 但无法运行、在没有 GEL 的情况下连接 JTAG 后、PC 值为0x06xx、将 PC 设置为_c_int00值、它可以运行正常、因此我假设引导过程正常、但引导加载程序没有跳转到应用程序。

-boot
-v5505
串行8
-reg_config 0x1c02 0x0000
-reg_config 0x1c03、0x0000
-reg_config 0x1c05、0x0002
延迟0xff
-reg_config 0x1c33、0x0000
-reg_config 0x1c60、0x0000
-reg_config 0x1014、0x4125
-reg_config 0x1015、0x0824
延迟0xff
-b.
-o xf.bin
C550xXFLEDtestRaw.out

下面是简单测试代码。 仅将 blink_led()分配给外部存储器。 我在 main 的开头插入了一个死循环、它也没有到达那里。

void main()

unsigned short i、j、k;
while (1);
(ioport_register (0x1C02))= 0;
(ioport_register (0x1C03))= 0;
for (i=0;i<0x100;i++);

while (1)

blink_led();
// for (j=0;j<0xFFFF;j++)

对于(i=0;i<0xA;i++)

对于(k=0;k<0xFFFF;k++);


#pragma CODE_SECTION (blink_led、"blink_section")
void blink_led ()

静态 int toggle = 0;

如果(0 =切换)

LED_ON;
切换= 1;

其他

LED_OFF;
切换= 0;

如果我删除了该命令的一些-reg 配置、则它可以引导并运行到死循环。 但外部存储器值错误、因此如果我移除死循环、它将会运行得一团糟。 观察 EMIF 寄存器0x1014、0x1015的值与配置的值一致。 因此、我认为引导加载程序跳转到应用程序过程是可以的、但外部存储器配置不正确、因此其中的值是错误的。  

-boot
-v5505
串行8
-reg_config 0x1c02 0x0000
-reg_config 0x1c03、0x0000
-reg_config 0x1c60、0x0000
-reg_config 0x1014、0x4125
-reg_config 0x1015、0x0824
延迟0xff
-b.
-o xf.bin
C550xXFLEDtestRaw.out

命令文件配置中似乎有一些技巧、请指导我。

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

    快照如下、烧录闪存、重启电源、连接 JTAG、PC 停止在 ROM 中。

    将 PC 更改为.out 入口点、它会运行。

    我想 ROM 代码在将闪存中的数据传输到 RAM/SRAM 后没有跳转到入口点、它与-reg_config 相关、可能 ROM 代码会在跳转之前判断某个条件、并且该条件尚未准备好。

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

    您好、Tony、

    请确认。 是否正在尝试使用引导加载程序从 CS3上的引导源复制到某些异步存储器?
    您的引导源是什么? CS3上的存储器是什么?

    reg_config 参数存在几个问题...

    您写入0x1c05 (外设复位控制寄存器(PRCR))而不首先写入0x1c04 (外设软件复位计数器寄存器(PSRCR))
    在向 PRCR 中的任何位写入1之前、必须始终向 PSRCR 写入最小值0x08
    REG_CONFIG 在0x1c60处写入以下哪些寄存器?

    -reg_config 0x1c02、0x0000   -确定解压所有外设
    -reg_config 0x1c03、0x0000   -确定解压所有外设
    -reg_config 0x1c05、0x0002   -重置 EMIF、但必须首先在0x1c04内放置大于0x08的值
    延迟0xff
    REG_CONFIG 0x1c33、0x0000   -允许 CPU 访问 EMIF 字
    -reg_config 0x1c60、0x0000   -该寄存器是什么? 它应该是0x1060 - NAND 闪存控制寄存器(NANDFCR)吗?
    -REG_CONFIG 0x1014、0x4125   - CS3异步配置寄存器1
    -reg_config 0x1015、0x0824   - CS3异步配置寄存器2
    延迟0xff

    根据 C5505引导加载程序的映射文件,ROM 引导加载程序仍位于 secbootshell getAppData()函数内,PC = 0xFFA670

    orgn (bytes)   orgn (words)   len (bytes)   len (words)   输入段
    00ffa4f8    [ 007fd27c ]   000001a6   *        secbootshell.obj (.text:_getAppData)

    您可能可以发送 hex55命令输出的生成的.bin 文件、以便我们可以使用十六进制编辑器查看它...
    您能否从存储器中了解哪些段已被复制以及引导加载程序在何处卡住? 我猜在尝试写入 CS3上的异步存储器时它会卡住...

    此致、
    标记

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

    标记

    感谢您的回复、是的、它是0x1060。 我根据您的建议进行了修改、结果相同。 它从24位 SPI 闪存引导至片上 RAM 和 CS3异步 RAM 存储器。

    -boot
    -v5505
    串行8
    -reg_config 0x1c02 0x0000
    -reg_config 0x1c03、0x0000
    -reg_config 0x1c04 0x0020
    -reg_config 0x1c05、0x0002
    延迟0x00ff
    -reg_config 0x1c33、0x0000
    -reg_config 0x1060、0x0000
    -reg_config 0x1014、0x4125
    -reg_config 0x1015、0x0824
    延迟0x00ff
    -b.
    -o xf.bin
    C550xXFLEDtestRaw.out

    我几乎确定所有段都已复制到目标存储器。 仅计时器0未启用、当我重新启动电路板时、在 CCS 中手动启用计时器0、然后引导加载程序可以从 ROM 运行、并跳转到我的烧录程序。

    /*读取引导映像*/
    entry_point = secBoot (read_n_words、write_n_words、index、rom_seed、BootFlags);

    /*清除引导设备上的条件*/
    Done ();

    //如果 EBSR 已更改,则将其恢复
    if (emifAddrGPIOFlag=0)

    //将 EBSR[5:0]设置为1 (为 GPIO 设置这些引脚)
    CSL_SYSCTRL_REGS->EBSR |= 0x003F;
    //将 emifAddrGPIOFlag 设置为1
    emifAddrGPIOFlag = 1;

    /*如果代码加载成功、禁用 PROM 并开始代码执行*/
    如果(entry_point)

    /*在重新启用低压检测之前,确保 Timer-0已减至0。*/
    操作

    /*获取当前 Timer-0计数器*/
    计数器=(((uint32) CSL_TIM_0_regs->TIMCNT2 << 16)| CSL_TIM_0_regs->TIMCNT1;
    } while (计数器!=0);

    EnableLowVoltageDetection();

    /*禁用所有外设时钟*/
    PeripheralClkEnableOnly (CSL_FMK (SYS_PCGCR1_SYSCLKDIS、1L));

    #ifndef QUICKTURN //不是 QuickTurn */
    /*禁用对 PROM 的访问(除非使用 QT)*/
    ioport_REG_SECUREROM_CNTL = 0x0001;
    #endif

    //将 XF 设置为低电平以成功引导加载
    TOGGLE_XF (0);

    /*运行加载的应用程序(这是引导加载程序的末尾--没有返回)*/
    branch_to (entry_point);

     e2e.ti.com/.../XFRAW.zip

    添加项目、请查看调试目录以了解配置和快照。

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

    它由命令文件中的配置计时器解析为脱机:

    -boot
    -v5505
    串行8
    -reg_config 0x1c02 0x0000
    -reg_config 0x1c03、0x0000
    -reg_config 0x1c04 0x0020
    -reg_config 0x1c05、0x0002
    延迟0x20
    -reg_config 0x1812、0x0000
    -reg_config 0x1813、0x0000
    -reg_config 0x1810、0x8001
    -reg_config 0x1c33、0x0000
    -reg_config 0x1060、0x0000
    -reg_config 0x1014、0x0001
    -reg_config 0x1015、0x0000
    延迟0x20
    -b.
    -o xf.bin
    C550xXFLEDtestRaw.out