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.

[参考译文] TMS320F280039C:280039C 定制 SPI 引导加载程序

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1397074/tms320f280039c-280039c-custom-spi-bootloader

器件型号:TMS320F280039C
Thread 中讨论的其他器件:C2000WARE

工具与软件:

我目前正在研究自定义 SPI 引导加载程序、以将 SPI 闪存内核加载到 RAM 中-请参阅先前的问题 - TMS320F280039C:TI 280039C SPI 引导加载程序- C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛

我正在使用此处的 SPI_Boot.c 文件- C:\ti\c2000\C2000Ware_5_02_00_00\libraries\boot_rom\f28003x\rev0\rom_sources\F28003x_rom\bootrom\source

第一个被调用的函数之一是:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//
// SPI_start_Boot - Function to begin transmission and copying of data into
// device memory
//
uint32_t SPI_start_Boot(uint16_t gpioSTEA)
{
uint32_t entryAddress;
//
// Enable EEPROM and send EEPROM Read Command
//
(void)SPIA_Transmit_Receive(0x0300U);
//
// Send Starting Address for Serial EEPROM (16-bit - 0x0000,0000)
// or Serial Flash (24-bit - 0x0000,0000,0000)
// Then check for 0x08AA data header, else go to flash
//
if(SPIA_SetAddress_KeyChk() != BROM_EIGHT_BIT_HEADER)
{
return FLASH_ENTRY_POINT;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

其中返回 RAM 中闪存内核的入口地址(32位)- entryAddress = GetLongData ();

为了测试我的自定义 SPI 引导加载程序 、我使用了 hex2000.exe 为 RAM 之外运行的 led_ex_blinky.application 创建了一个新的二进制 led_ex1_blinky.txt

方法是使用十六进制编辑器查看生成的二进制文件

我正在尝试了解这与 SPI 引导代码通过调用返回的入口地址有何关联-   entryAddress = GetLongData()??

感谢您的任何帮助、

Brent Williams

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

    您好、Brent:

    将您与我们的一位 SPI 引导加载程序专家联系起来、进一步帮助您。

    此致、

    Aishwarya.

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

    谢谢 Aishwarya、

    我一直在查看 SPI 启动代码

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    uint32_t SPI_start_Boot(uint16_t gpioSTEA)
    {
    uint32_t entryAddress;
    //
    // Enable EEPROM and send EEPROM Read Command
    //
    (void)SPIA_Transmit_Receive(0x0300U);
    //
    // Send Starting Address for Serial EEPROM (16-bit - 0x0000,0000)
    // or Serial Flash (24-bit - 0x0000,0000,0000)
    // Then check for 0x08AA data header, else go to flash
    //
    if(SPIA_SetAddress_KeyChk() != BROM_EIGHT_BIT_HEADER)
    {
    return FLASH_ENTRY_POINT;
    }
    //
    // Check for Clock speed change and reserved words
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    下面是使用 hex2000实用程序生成的.txt 文件

    查看 SPI 引导代码、它读取的第一个代码如下:

    Fullscreen
    1
    2
    3
    #define BROM_EIGHT_BIT_HEADER 0x08AAU
    if(SPIA_SetAddress_KeyChk() != BROM_EIGHT_BIT_HEADER)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    我可以在.txt 文件中看到它以红色突出显示的内容。

    接下来、在 SPI 引导代码中、我看到以下内容:

    Fullscreen
    1
    2
    // This function reads 8 reserved words in the header.
    SPIA_ReservedFn(void)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    这将是以蓝色突出显示的词语。

    SPI 引导代码中读入应用程序入口点的下一部分为:

    Fullscreen
    1
    2
    3
    4
    //
    // Get point of entry address after load
    //
    entryAddress = GetLongData();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    那么、这是否意味着入口点是0x00000000 -突出显示紫色?

    此外、为什么没有 SPI 闪存内核?

    谢谢!

    Brent

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

    如果我查看通用 RAM 连接器命令文件-

    Fullscreen
    1
    BEGIN : origin = 0x00000000, length = 0x00000002
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    突出显示的紫色值00 00 00 =>是起始地址。 下面的02是"块大小"。 这些位置的数据遵循此。  

    这一切现在都很有意义。

    我仍然想了解为什么 C2000Ware 中没有 SPI 闪存内核?

    谢谢!

    Brent

x 出现错误。请重试或与管理员联系。