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/TMS320F2.8069万:从SCI到SPI过程的TMS320F2.8069万启动器

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/666447/ccs-tms320f28069-tms320f28069-bootloader-from-sci-to-spi-procedure

部件号:TMS320F2.8069万
主题:controlSUITE中讨论的其他部件

工具/软件:Code Composer Studio

你(们)好

我正在开发,或者我们可以称之为继续集成F2806X引导加载程序。 (实际上是2.8065万)

我将介绍我理解的获取SCI bootloader的步骤,然后介绍我对SPI bootloader的理解。

我还没有开始。

 

我正在计划使用CCS从   controlSUITE加载flash_f2.8069万示例: C:\TI\controlSUITE\DEVICE_SUPPORT\f2806x\v151\F2806X_Examples_ccsv5</s>2806

这是唯一从闪存工作的示例。所有~20个示例都是从RAM工作。  

如果我理解正确,从RAM工作意味着当我使用JTAG加载固件时, 下次我将执行电源循环时,需要再次下载,位置

从闪存开始工作,这意味着应用程序/固件将在闪存中刻录,即使我执行了电源循环,我也只能开机,应用程序/固件将运行。

如果是,转到SCI引导加载程序,  

我需要:

1.编译 f2.8069万_flash_kernel 示例 (C:\TI\controlSUITE\DEVICE_SUPPORT\f2806x\v151\F2806x_Examples_ccsv5\f28069_flash_kernel)</s>2806 2.8069万

  此示例已在SCI中  ( SCI_BOOT.c)在项目中。

 在输出中执行hex2000以获取十六进制文件

2.在示例 flash_f2.8069万上执行hex2000

当我有这两个十六进制文件时,我需要在  GPIOB中执行make GPIO 34( make it 0)和GPIO 37( make it 1)  

如bootrom来源中所示:   

引导模式= GpioDataRegs.GPBDAT.bit.GPIO37 <<1;
引导模式|= GpioDataRegs.GPBDAT.bit.GPIO34;

关闭并重新打开主板,然后引导加载程序将等待两个文件,这两个文件将使用flash_programmer命令行工具提供:

serial_flash_programr.exe -d f2.8065万 -k flash_kernels_f2.8065万.txt -a flash_2.8065万.txt -p COM7 -b 9600

其中.txt文件是来自hex2000文件的输出。  

按'A'将开始加载。

原始flash_2.8065万已使用JTAG加载,现在它将被serial_flash_programmer取代?

最后,这是引导加载过程。

请确认上述步骤。

 

现在转到SPI bootloader。

这没有很好的记录,因此请在此处确认我的步骤。

我将用在 f2806x的名为bootrom的项目中找到的SPI_Boot. c替换flash_kernel_f2.8065万项目中的SCI_boot. c文件。

如果我理解正确,装备区项目不需要加载,并且在这场启动游戏中没有规则,我们只能使用其来源选择我们想要的启动模式。

因此,在我用SPI_BOOT. c替换SCI_BOOT. c之后,我将借助hex2000  a txt文件重新编译和创建。

现在,我不能再使用serial_flash_programmer了,因为它使用SCI( UART)

我的目标是在Linux下通过SPI进行固件升级。

因此,下一步是了解串行闪存编程器的代码(源代码在Visual Studio中提供),并创建Linux C程序(使用SPI_DEV接口)来执行同样的操作。  (如果SPI Linux中有这样的工具,请告诉我们)

一旦我要这样做,我就应该让引导加载程序从SPI工作。

但是,我不需要 在以下地址对OTP进行编程:

#define GET_MODE  (UINT16 (*)(void)) 0x3D7CC0

要将值设为4 ( SPI )

为此, 我阅读了此线程 https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/167270</s>16.727万 

这说明了如何使用代码执行此操作。  如果有不同的方法(可能使用CCS和JTAG,请告诉我)

GPIO 34和GPIO 37需要为1。

并且在SCI和SPI中TRST都需要为0 (TRST也是GPIO?)  

如果我将OTP编程错误为4,该怎么办?  我是否需要丢弃芯片,因为它是一次性编程?

如果我只想检查SCI bootloader和SPI,该怎么办?

如果我理解正确,确定引导模式(GPIO和OTP)的逻辑已在bootrom中,并且无法更改??

首先,如果您在此处之前阅读,谢谢。

在TI中使用引导加载程序的这一长故事并不是那么容易。  

如果您发现任何问题,请做一些评论,帮助我和其他人。

谢谢!

 

 

 

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

    您对闪存和RAM编程的理解是正确的。

    您的理解基本上是正确的。

    您不需要手动发送'A'。 串行闪存编程器将执行此操作以执行自动波特锁定。

    ROM bootloader将内核加载到RAM中。 然后内核执行并加载闪存应用程序,并将其编程到闪存中,替换闪存内核已擦除并编程的那些扇区中的现有代码。

    您可以用SPI_BOOT.c替换SCI_BOOT.c,并使用相同的SHARD_boot和CopyData()文件和函数。 您需要确认并测试此情况。

    正确。 串行闪存编程器不能用于SPI。 但您可以使用USB到SPI转换器,并使用串行flahs编程器中的大多数代码将其移植到SPI解决方案。

    无法更改引导模式。

    另请参阅www.ti.com/lit/sprabv4

    如果我错过了您的任何问题,请告诉我。 我很乐意为您提供帮助。

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

    请您关注OTP部件:
    如已理解,我们需要对OTP进行编程,使boot_mode地址中的值为4
    #define GET_MODE (UINT16 (*)(void)) 0x3D7CC0
    每个芯片的地址稍有不同,2.8069万具有上述值。

    我发现如何对OTP进行编程的唯一地方是该社区中的链接:
    几个问题:
    1. TI是否有对OTP进行编程的图形方式,也许可以使用CCS IT自身?
    2.让OTP选择启动模式的意义是什么,为什么没有3个GPIO呢?这样,我们就可以在接口之间来回切换,而无需更换芯片。
    3.如果1的答案是没有工具,那么链接器命令的解释是否正确? 是否可以使用任何示例,添加链接器命令并刻录OTP? 您是否有链接器命令可用于OTP编程?
    4.您是否有其他方法建议为SPI编程OTP (值为4)

    这一点很重要,因为这里有一个错误会破坏芯片。
    购买新的主板或更换芯片是一个非常大的问题。

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

    1)是。 CCS中有一个片上闪存编程器。 连接后,单击“Scripts”(脚本),您将看到“On Chip Flash Programmer”(芯片闪存编程器 您可以指定要编程的值。
    2)引导模式选择多年来不断发展。 但在此设备上,确定有3个GPIO用于引导模式选择会限制用户的GPIO可用性。
    3)您也可以使用链接程序命令文件和CCS项目/.out来编程OTP。 在通过JTAG或串行闪存编程器将.OUT图像加载和编程到器件之前,只需确保在正确的位置对正确的值进行编程。
    4)片上闪存编程器是我最喜欢的。

    此致,
    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好
    您说:
    "您可以用SPI_BOOT.c替换SCI_BOOT.c,并使用相同的SHARD_boot和CopyData()文件和函数。 您需要确认并测试此问题。"

    为什么能够做到? 为什么要确认?
    这不是通过SPI获得闪存内核的正确方式吗?
    是否有不同的方法或TI正确的方法?

    世界上是否有任何文档,项目或任何类型的信息显示如何通过SPI使引导加载程序machnisem工作?
    谢谢
    Eli
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Eli,

    必须从SCI闪存内核更改的主要功能是GetWordData函数。 您应该能够将该函数指针指向SPI_boot.c中的SPI函数

    请继续我的建议,并回答您的任何具体问题。 SCI闪存内核和串行闪存编程器是一种实用程序,旨在为客户提供SCI解决方案和将其扩展到SPI或其它串行通信外设所需的工具。

    希望这有所帮助。

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

    您好,Sal,

    首先,我设法使SCI如上所述正常工作。 ( 我 将 trst设置 为 0。 GPIO 34设置为1 , 37设置为 0, 在hex2000后使用闪存内核和我的应用程序,它工作正常!)

    但关于SPI引导加载程序。  

    我想确定如何进入SPI 启动以及如何让芯片从闪存正常启动

    从本文档中:

    http://www.ti.com/lit/ug/sprugo0b/sprugo0b.pdfx

    我们可以看到有两个表格

    独立和仿真。

    独立支持SCI, PARALLEL和WAIT的位置(其中WAIT是调试器, 对吗?)  

    和仿真模式 表。  

    仿真模式是我需要的(我认为)

    以及原因。

    II之后将OTP 启动模式编程 为4  

    我需要 使用trst =1 ( 项目唯一需要的GPIO号)

    GPIO 34和37再也不会出现。

    现在, 我需要将trst设置为1,并更改emukey和emuboot更多,这些是闪存(而不是OTP)存储器位置!

    使用该仿真引导模式时,我需要一次引导至SPI 以升级固件,还需要从闪存正常引导。

    请确认。

    第二项质询。

    它表示我错过了SPI_Boot是一个主设备的事实,它想与SPI从属设备一起读取闪存内核和我的应用程序(使用hex2000实用程序转换为.txt)

    因此我需要写入一个Linux SPI从属设备,该设备将把.txt文件传输到SPI_Boot?

    (如果是这样,当在SPI驱动程序主要是主驱动程序的Linux中工作时,这不是很方便,而是将其用作从驱动程序不是直接的)

    谢谢

    Eli

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

    《技术参考手册》的第2部分和图2-9将对您有所帮助。www.ti.com/lit/spruh18

    您可以使用仿真引导模式设置引导模式。 但我不确定这对您有何帮助,因为您需要连接仿真器,如果您的仿真器已连接,为什么不使用(即 JTAG和CCS)对闪存进行编程。

    对于从独立运行时,需要将Get_mode值编程为SPI bootloader。 但随后您将失去引导至闪存的能力。 或者,您可以始终引导至闪存并设置您的应用程序,使其在收到一些外部命令时分支到SPI引导加载程序或已驻留在闪存中的SPI内核,然后开始使用新映像更新闪存。

    MCU上的SPI是一个主节点。 这可能不适合您尝试使用Linux机器更新设备的应用程序,但在与其他MCU通信时,这是一个很好的方案。

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

    此人在此处:
    e2e.ti.com/.../194.6958万
    说它总是从SPI引导,就像你说的那样,但是当没有连接从属设备时,他回答说它将引导到闪存。
    如果是这样,我们可以接受。

    该项目的想法也如下。

    连接到嵌入式Linux (IMX6)时,我们需要通过SPI更新MCU固件
    为了解决Linux没有SPI从属设备的问题,我正在考虑或编写一个Linux字符设备,该设备执行SPI从属设备和GPIO位冲击,并实施引导加载器MCU所需的协议。

    如果芯片始终引导至SPI而不是闪存,则不会有任何帮助。
    但如果Christopher Chiarella正确,那么我可以模拟SPI从属设备不存在(我不会加载SPI从属驱动程序)

    现在,我知道TI没有考虑从Linux从SPI启动加载的选项,而是只从EEPROM器件启动加载。
    这就是为什么这个线程很长,我需要您的确认,因为它可能需要很多时间才能正常工作。

    谢谢!
    Eli
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Christopher Chiarella是正确的。 如果没有正确连接的从属设备,则当SPI引导加载程序开始时,它将失败并自动引导至闪存。

    我建议您也测试一下。 这样您就可以更好地理解并观察它。

    此致,
    SAL