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/TMS320C5505:USB 记忆棒引导加载程序// EEPROM 编程

Guru**** 2555630 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/591662/ccs-tms320c5505-usb-stick-bootloader-eeprom-programming

器件型号:TMS320C5505

工具/软件:Code Composer Studio

尊敬的团队:

我们的一位客户面临以下问题:

我们购买了一些 C5505 USB 记忆棒评估板、这些评估板是我们首次购买的。 我们成功了
让它们与音频编解码器板配合使用我们从 TI 获得的、到目前为止一切都正常。

但最近、我开始检查我们如何使用引导加载程序在启动时自动加载代码
将其发送至 DSP、而无需使用 JTAG。 我在 google 上搜索了很多内容、以找到如何从 EEPROM 引导的解决方案
它位于评估板上。 我在论坛上找到了此板的演示代码、我还找到了多个版本
首先在 C5505上运行以更新 EEPROM 内容的应用程序的说明。 到目前为止、它也在工作
我设法将 EZ_demo.bin 文件从 TI 下载到 EEPROM、在重新启动电路板后、它启动并正常工作。

我们的问题是、如果我在将二进制文件加载到 EEPROM 时尝试从项目.out 文件中自行创建一个二进制文件
似乎不起作用。 我也使用了 programer.out 文件、spi_writer.out 和一些 USBKey.out 文件进行编程。

它们都适用于 EZ_demo.bin、但不适用于我的文件。 我假设复印部件工作正常、然后
我们在创建.bin 文件时遇到问题。 我还成功下载了 eZ_demo 项目的源代码、
当我自己构建并创建.bin 文件时、它的大小为39KB。 我下载的版本
大小为5KB。 39字节版本完全不起作用。

 

下面是我的编译后处理脚本、我使用它从.out 文件创建.bin 文件:

${CG_TOOL_ROOT}\bin\hex55 -boot -v5505 -serial8 -b -o TestApp.bin ${ProjName}.out

 

我尝试创建一个简单的 LED 闪烁项目、仅用于测试引导加载程序是否正常工作。

它可以使用 JTAG。 我从应用程序中删除了.gel 文件。 我将必要的部分从.gel 文件移到了实际代码中
初始化 PLL 和外设以及除 LED 之外的所有器件、仍然不闪烁。

一旦我设法使它闪烁、但它真的很慢、就像 PLL 不能正确设置、但我认为是这样。

 

请帮助我们找出问题所在。 不幸的是、互联网上的信息实在太少
在本主题中、我阅读了所有相关的 PDF 和文章、但由于某种原因、它似乎仍然不起作用。


我们使用 CCS 6.1、我使用了 hex55工具的4.4.1版本来生成 bin 文件。


谢谢、

Peter

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

    我已通知软件团队。 他们的反馈将在此处发布。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Peter、
    您是否可以尝试使用此处所述的独立 hex55工具来生成.bin?
    processors.wiki.ti.com/.../C5515_Boot-Image_Programr

    请查看它是否起作用。

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

    尊敬的 Lali:

    我们尝试了您在 Wiki 页面上发送的所有内容。 基本上、引导加载程序本身似乎正常工作、因为即使在我们的实际项目中、我也看到 LED 在闪烁、这是可以的、但问题是外设未正确初始化、因为 I2S 和 I2C 接口除了使用 JTAG 之外没有执行任何操作 工作正常。 我尝试执行与前面在论坛中所读的相同的操作、将 GEL 文件的某些部分复制到代码中、以便在代码中进行初始化。 n`t 我在项目中不使用 GEL 文件、那么即使与 JTAG 一起使用、外设也无法正常工作。

    以下是我在代码中首先调用的这个论坛上的某个人的代码:


    #define PLL120MHz 0
    #define PLL100MHz 1.
    #define PLL75MHz 0
    #define PLL60MHz 0
    #define PLL40MHz 0

    #define ESCR 0x1c33

    #define SDTIMR1 *(volatile unsigned ioport *) 0x1020
    #define SDTIMR2 *(volatile unsigned ioport *) 0x1021
    #define SDCR1 *(volatile unsigned ioport *) 0x1008
    #define SDCR2 *(volatile unsigned ioport *) 0x1009
    #define SDSRETR *(volatile unsigned ioport *) 0x103C
    #define SDRCR *(volatile unsigned ioport *) 0x100C

    #define PRCR *(volatile unsigned ioport *) 0x1C05
    #define PCGCR1 *(volatile unsigned ioport *) 0x1c02
    #define PCGCR2 *(volatile unsigned ioport *) 0x1c03
    #define PSRCR *(volatile unsigned ioport *) 0x1c04

    #define CCR2 *(volatile unsigned ioport *) 0x1c1f
    #define CGCR1 *(volatile unsigned ioport *) 0x1c20
    #define CGCR2 *(volatile unsigned ioport *) 0x1c21
    #define CGCR3 *(volatile unsigned ioport *) 0x1c22
    #define CGCR4 *(volatile unsigned ioport *) 0x1c23
    #define CCSSR *(volatile unsigned ioport *) 0x1c24
    define DIEIDR3*(volatile unsigned ioport *) 0x1C43
    #define IVPD *(volatile unsigned ioport *) 0x0049

    空 Peripheral_Reset ()

    int i;

    *(short *) PSRCR= 0x0020;
    *(short *) PRCR= 0x00BB;

    for (i=0;i<0xff;i++);
    *(short *) IVPD = 0x027F;//加载中断向量指针

    空 SetupPLL()

    int i;

    /*启用到所有外设的时钟*/
    *(short *) PCGCR1 = 0x0;
    *(short *) PCGCR2 = 0x0;

    /*旁路 PLL */
    *(short *) CCR2 = 0x0;

    /*设置 CLR_CNTL = 0 */
    *(short *) CGCR1 =*(short *) CGCR1 & 0x7FFF;

    IF (PLL100MHz)

    *(short *) CGCR2 = 0x8000;
    *(short *) CGCR4 = 0x0000;
    *(short *) CGCR3 = 0x0806;
    *(short *) CGCR1 = 0x8BE8;


    /*等待 PLL 锁定*/
    for (i=0;i<0x7fff;i++);

    /*切换到 PLL 时钟*/
    *(short *) CCR2 = 0x1;

    在这两种情况下、LED 以相同的速度闪烁、但使用 JTAG + GEL 文件时、记忆棒上的音频编解码器会产生输出、但从 EEPROM 中、它只是闪烁。

    任何帮助都将被预先提供。

    提前感谢!

    此致

    格尔格利

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

    我做了一些进一步的测量、似乎一切都正常、但 DSP 不会在数据线路上向编解码器发送任何内容。 这似乎是现在唯一的区别、如果我使用它时使用引导加载程序或不使用引导加载程序。 DMA 或 I2S 未使用引导加载程序正确初始化。 我认为上面的脚本应该在启动时初始化所有外设。

    是否有人有相同的问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    同时、我设法解决了这个问题。 在重新启动外设之后、在设置 PLL 之前、我必须添加以下行:

    *(ioport volatile unsigned *) 0x0001 = 0x000E;
    asm (" idle");

    我在某些文档中阅读了该内容、即引导加载程序关闭一些 FFT HWA 和 mport、使用这两行可以再次激活这些代码。 我不知道它们是什么、或者它们与 I2S 有什么关系、但这一变化完全解决了我的问题。