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.

[参考译文] TMS320C6678:C6678多核 TFTP 引导

Guru**** 2614265 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/581494/tms320c6678-c6678-multicore-tftp-boot

器件型号:TMS320C6678

您好!

我正在尝试测试一个简单的多核应用、其中主内核和第一个次级内核都向 UART 打印一些内容。 我使用 MAD 实用程序(预链接器旁路模式)构建了.bin 文件。 我在两个内核上运行相同的应用。 以下是我的代码:  

void main (空 main)()

platform_init_flags init_flags;
platform_init_config init_config;
char version_msg[]="\r\n\r\nEMAC Boot Over I2C 示例版本";
char boot_msg[]="\r\n\r\n 通过 IBL 通过 I2C 0x51从 EMAC 启动 Hello World 映像...";
uint32_t core_num;
int i;


core_num = platform_get_CoreID ();

if (core_num = 0)

printf ("%s%s%s\n"version_msg、version);

//初始化主平台库
memset (init_config、0、sizeof (platform_init_config));
memset (init_flags、1、sizeof (platform_init_flags));
init_flags.pll = 0;
init_FLAGS.DDR = 0;
if (platform_init (&init_flags、&init_config)!= platform_eok)

printf ("平台初始化失败!\n");
print_platform_errno();
返回;

platform_UART_init();
platform_UART_set_baudate (boot_UART_BAUDRATE);

Write_UART ("\n\n 引导内核0...");
WRITE_UART (VERSION_msg);
WRITE_UART (版本);

printf ("%s"、boot_msg);
WRITE_UART (BOOT_msg);


对于(I = 1;I < 2;I++)

WRITE_UART ("正在唤醒内核1...");

//解锁 kicker 寄存器
DEVICE_REG32_W (KICK0、0x83e70b13);
DEVICE_REG32_W (KICK1、0x95a4f1e0);

//device_REG32_W (boot_magic_ADDR (i)、(uint32_t)&_c_int00);
DEVICE_REG32_W (boot_magic_ADDR (i)、(uint32_t) write_boot_magic_number);

platform_delay (1);

DEVICE_REG32_W (IPCGR (I)、1);
platform_delay (1000);


其他

write_boot_magic_number ();

while (1);

void write_boot_magic_number (void)

uint32_t core_num;
core_num = platform_get_CoreID ();
if (core_num = 1)

Write_UART ("\n\nHello World from secondary core 1...");

while (1);

我遇到的问题是、当我为 EVM 通电(使用 TFTP 引导)时、只有主内核将消息输出到 UART。  

正在引导内核0...

通过 I2C 引导 EMAC 示例版本01.00.00.00

通过 I2C 0x51上的 IBL 从 EMAC 启动 Hello World 图像...正在唤醒内核1...

我看不到来自内核1的消息。

我是否遗漏了什么?

感谢你的帮助。

谢谢、

Viney

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

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

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    已尝试将神奇地址设置为
    DEVICE_REG32_W (boot_magic_ADDR (i)、(uint32_t)&write_boot_magic_number);

    检查寄存器存储器中是否正确设置了魔术地址。 还要检查 IPC 中断是否正确发生。

    请参阅此处提供的示例:
    processors.wiki.ti.com/.../KeystoneI_Bootloader_Resources_and_FAQ

    e2e.ti.com/.../1519565

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

    如果我使用.out 文件并将其加载到内核0、则在 CCS 中可以正常工作。 我无法使用由 MAD 实用程序生成的.bin 文件。

    以下是用于编译.bin 文件的.json 文件中的代码:


    “deploymentCfgFile”:“/config-files/deployment_template_C6678_bypass_prelink.json”,
    "LoadImageName":"c678-le.bin",
    "prelinkExe":"prelink6x"、
    "删除线":“strip6x”,
    "ofdTool":"ofd6x"、
    "应用程序错误" :"../mad-loader/bin/C6678/le/mal_app.exe,
    "NmlLoader" :"./mad-loader/bin/C6678/le/nml.exe




    "devicename":"C6678"、

    "分区":[

    "name":"load-partition",
    "vaddr":"0x9e000000"、
    "大小":"0x2000000"、
    "loadPartition":true

    ]、

    "应用程序":[

    “名称”:“app1”,
    "文件名" :"../mad-loader/examples/i2c_boot_tftp_example.out,
    "允许的内核":[0、1]
    }、

    "名称":"App2"、
    "文件名" :"../mad-loader/examples/i2c_boot_tftp_example.out,
    "允许的内核":[0、1]

    ]、

    "appDeployment":[
    "App1"、
    "App2"、
    ""、
    ""、
    ""、
    ""、
    ""、
    ""
    ]


    上述代码是否适合您?

    谢谢、
    Viney