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/TMS320F28334:Code Composer Studio/TMS320F28334

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/766558/ccs-tms320f28334-code-composer-studio-tms320f28334

器件型号:TMS320F28334
主题中讨论的其他器件: C2000WARE

工具/软件:Code Composer Studio

您好,

我不熟悉 Code Composer Studio、我需要 CCS 上的项目创建帮助。 我有一个应用代码的输出(.out)文件、我需要 使用 UART 通信将此输出代码闪存到 TMS320F28334控制器。  请任何人在这方面提供帮助以实现这一目标。  

谢谢、此致、

Jyoti

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

    我们提供串行闪存编程器和 SCI 闪存内核来帮助解决此问题。 我们在 E2E 上有许多有关这方面的主题。

    请仔细阅读: www.ti.com/.../sprabv4b.pdf

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

    您好 Sal、

    感谢您的回复

    我们阅读了您共享的文档。 我们计划从 Code Composer Studio 开始、因此、您可以向我们建议更多有关在 Code Composer Studio 上开始的信息。

    谢谢、此致、  

    Jyoti

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在下载页面上、您将找到一些有用的链接、其中包括 Wiki 网站。

    www.ti.com/.../CCSTUDIO

    processors.wiki.ti.com/.../Category:CCS

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

    您好 Sal、

    我们使用 f05_DownloadImage.cpp 代码刷写内核和应用程序代码。  在这里,我们能够将内核加载到我们的控制器,但我们无法将应用程序代码加载到控制器中,您能建议可能出现的问题是什么?

    谢谢、此致、

    Jyoti

    //###################################################################################################################### //文件:  F05_DownloadImage.CPP//标题: 串行闪存编程器所需的下载映像函数。///此函数用于与器件进行通信和下载。  对于 // F05器件,串行闪存编程器加载内核,并以字节/字节回显方式进行字节回显。  将应用程序与内核通信时、IT//工作方式不同。  它发送应用程序的数据块并等待 //该数据的校验和。//########################################################################################## //$TI 发行版:F28X7X 支持库$//$发行 日期:Octobe 23,2014 $//##################################################################################
    #include "../include/f05_DownloadImage.h
    #include "stdafx.h"#include #include #include
    #ifndef __linux__#pragma once #include #include #include #endif
    // Linux 独占#ifdef __linux__
    #include #include #include #include #include #include "linux_macros.h"
    #endif //_Linux__

    // ////根据详细和安静的标志生成输出的有用宏。//********* #define VERBOSEPRINT (...) if (g_BVerbose){_tprintf (__VA_args__);#define QUIETPRINT (...) if (!g_bQuiet){_tprintf (__va_args__);}
    // ////通过命令行参数设置或覆盖其值的全局变量。//********* extern baudg_bVerbose;extern bg_BBinary;extern bool g_Bool;覆盖;extern boog_BUpload;extern bleg_BClear;extern bool g_Bool;extern bool g_bool;extern boop extern _boor;extern *extern _boor 1 + boor 1 + boor 1
    //COM 端口填充#ifdef __linux__extern int fd;#elseextern 句柄文件;extern DCB 端口;#endif

    // ////将图像下载到通过传递句柄标识的设备。  要下载的//图像和与操作相关的其他参数由命令行参数通过全局变量进行控制。////成功返回0或失败返回正错误返回代码。//********* intf05_DownloadImage (void){file *KfH;file *AFH;
    unsigned int rcvData = 0;unsigned int rcvDataH = 0;int txCount = 0;
    uint16_t 校验和;unsigned int fileStatus;DWORD dwRead;  #ifdef __linux__  unsigned char buf[8];int readf;unsigned int sendData[8];#else errno_t error;DWORD dwWritten; unsigned char sendData[8];#endif
    QUIETPRINT (_T ("正在将%s 下载到设备...\n")、g_pszAppFile);
    ////输入文件是否存在? ////打开闪存内核文件  #ifdef __linux__ KfH = fopen (g_pszKernelFile、_T ("rb");#else 错误=_wfopen_s (&KfH、g_pszKernelFile、_QUT ("rb")));  #endif ("%tint inue"(如果打开 t 内核文件) 它是否存在?\n"), g_pszKernelFile);return(10);}
      //打开应用程序文件   #ifdef __linux__AFH  =fopen (g_pszAppFile,_T ("rb");  #else 错误=_wfopen_s(&AFH,g_pszAppFile,"L"rb");#endif (!AFH){IETPRINT("%s 无法打开应用程序文件 它是否存在?\n"), g_pszAppFile);return(10);}
    //内核、应用程序和 COM 端口都打开
    //do AutoBaud  dwRead = 0;sendData[0]='A';#ifdef __linux__ write (fd、&sendData[0]、1);   while (dwRead = 0)  {
      readf =读取(fd、&buf、1);     if (readf ==1)     {     QUIETPRINT (_T ("错误%s\n")、strerror (errno));    }     dwRead = readf;     rcvData = buf[0];  if (readf =0)  {   write (fd、&sendData[0]、1);  }  #else WriteFile (file、&sendData[0]、1、&dwWritten、NULL); while (dwRead =0)ReadFile (file、&rcvData、1、&dwRead、NULL);}   #endif
    if (sendData[0]!= rcvData) return (12);

    VERBOSEPRINT (_T ("\n 内核自动波特成功"));//查找内核数据#ifndef __linux__getc (KfH);getc (KfH);#endif getc (KfH);
    fileStatus = fscanf_s (KfH、"%x"、&sendData[0]);  int i = 0;while (fileStatus = 1)i++;
    //发送下一个字符
    #ifdef __linux__ write (fd、_sendData[0]、1);//usleep (10000);#else WriteFile (file、&S sendData[0]、1、 &dwWritten、NULL);#endif dwRead = 0;//SAL// while (dwRead = 0)//{// ReadFile (file、&rcvData、1、&dwRead、NULL);// if (sendData[0]!= rcvData)//(99)//(return)
    //读取下一个字符文件状态= fscanf_s (KfH、"%x"、&sendData[0]);
    VERBOSEPRINT (_T ("\nkernel loaded"));#ifdef __linux__ sleep (5);#else sleep (5000);#endif VERBOSEPRINT (_T ("\nDone 正在等待内核引导...正在尝试  清除);#ifdef _linux__ if (tcflush (tcflush);{= tctrende=&tre=);#euteRfr (tctrl);#ife= ge= geRfr)
      #endif sleep (5000);
    purgeRet = PurgeComm (file、purep_RXCLEAR);

    //do AutoBaud sendData[0]='A';
    #ifdef __linux__ write (fd、&S sendData[0]、1);buf[0]= 0;  dwRead = 0;  // int 计数器= 0;  while (dwRead = 0)  {  //counter++;   readf = read (fd、&buf、1);     if (readf ==1)     {     QUIETPRINT (_T ("错误%s\n")、strerror (errno));    }     dwRead = readf;     rcvData = buf[0];  }
      #else  WriteFile (file、&sendData[0]、1、&dwWritten、NULL);
    dwRead = 0;while (dwRead = 0)ReadFile (file、&rcvData、1、&dwRead、NULL);}   #endif
    int err = GetLastError();
    if (sendData[0]!= rcvData) return (12);
    VERBOSEPRINT (_T ("\n 应用程序自动波特成功"));//查找应用程序数据的起始值 txCount = 0;校验和= 0;#ifndef __linux__getc (AFH);getc (AFH);#endif getc (AFH);


    while (txCount < 22)txCount++;fscanf_s (AFH、"%x"、&sendData[0]);校验和+= sendData[0]; //发送下一个 char #ifdef __linux__  写入(fd、&sendData[0]、1);#else  WriteFile (file、&sendData[0]、1、&dwWritten、 null);     #endifdwRead = 0;while (dwRead = 0)#ifdef __linux__   readf = read (fd、&buf、1);     if (readf ==1)     {     QUIETPRINT (_T ("错误%s\n")、strerror (errno));    }     dwRead = readf;     rcvData = buf[0];#else ReadFile (file、&rcvData、1、&dwRead、 空);  #endifdwRead = 0;while (dwRead = 0)  #ifdef __linux__   readf = read (fd、&buf、1);     if (readf ==1)     {     QUIETPRINT (_T ("错误%s\n")、strerror (errno));    }     dwRead = readf;     rcvDataH = buf[0];#else ReadFile (file、&rcvDataH、1、&dwRead、 null);  #endif
    //确保校验和匹配(如果(checkSum!=(rcvData |(rcvDataH << 8))))返回(12);

    //Ronnies 代码 int wordData;int byteData;txCount = 0;CHECKSUM = 0;
    int totalCount = 0;wordData = 0x0000;byteData = 0x0000;fileStatus = 1;
    //加载闪存应用程序 while (1){
    fileStatus = fscanf_s (AFH、"%x "、&sendData[0]);if (fileStatus = 0) break;#ifdef __linux__     写入(fd、&sendData[0]、1);#else WriteFile (file、&sendData[0]、1、&dwWritten、 null);#endif checksum += sendData[0];
    //如果(txCount == 0x00)wordcata = sendData[0];否则(txCount == 0x01)byteData = sendData[0];//从 MSB:LSB wordData |=(byteData <<8)形成 wordData;}则获取块大小
    txCount++;totalCount++;
    //如果下一个块大小为0,则退出 while 循环。  if (wordData = 0x00 && txCount > 1)
    wordData = 0x0000;字节数据= 0x0000;
    break;//将在以下情况下执行:(txCount == 2 *(wordcount + 3)){dwRead = 0;while (dwRead ==0)#ifdef __linux__ readf = read (fd、&buf、1);if (readf =-1){#ifdef _linux_readt (#rint)}(%prrint);if (#ref"(#def_trint)(#def_error)) dwRead = readf;rcvData = buf[0];#else ReadFile (file、&rcvData、1、 dwRead、NULL);#endifdwRead = 0;while (dwRead = 0)#ifdef __linux__ readf = read (fd、&buf、1);if (readf =-1)QUIETPRINT (_T ("Error %s\n")、readstrerror (fd、&buf、1);if (readif =-1){&r)}{&r DataTrr、readt = 1}、readr、readr 文件= 1、readmf (vrf); dwRead、NULL);#endif//确保校验和匹配(如果(CHECKSUM!=(rcvData |(rcvDataH << 8)))返回(12);否则校验和= 0;
    wordData = 0x0000;字节数据= 0x0000;txCount = 0x00;//将在闪存内核缓冲区已满(0x400字= 0x800字节)时执行、否则(txCount - 6)% 0x800 = 0 && txCount > 6)dwRead = 0; while (dwRead =0)  #ifdef __linux__   readf = read (fd、&buf、1);     if (readf ==1)     {     QUIETPRINT (_T ("错误%s\n")、strerror (errno));    }     dwRead = readf;     rcvData = buf[0];     #else ReadFile (file、&rcvData、1、&dwRead、NULL); #endifdwRead = 0;while (dwRead = 0)#ifdef __linux__   readf = read (fd、&buf、1);     if (readf ==1)     {     QUIETPRINT (_T ("错误%s\n")、strerror (errno));    }     dwRead = readf;     rcvDataH = buf[0];#else ReadFile (file、&rcvDataH、1、&dwRead、 空);  #endif//确保校验和匹配(如果(CHECKSUM!=(rcvData |(rcvDataH << 8)))返回(12);否则校验和= 0;}VERBOSEPRINT (_T ("\n 应用程序加载成功")));
    //不确定是否应该添加?   返回0;}

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

    我成功使用了内核、串行闪存编程器和闪烁示例。

    请使用我在 ZIP 中提供的文件执行以下命令以进行确认。 使用正确的 COM 端口进行设置。

    serial_flash_programr.exe -d F2833x -v -k f28335_flash_kernel.txt -a Example_2833xLEDBlink.txt -p COM13

    此致、

    SAL

    e2e.ti.com/.../f2833.zip

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

    您好 Sal、

    Code Composer Studio (无需 MS Visual Studio 的帮助)也能实现同样的功能吗?

    我们在 C2000套件上找到了 MS Visual Studio 项目文件、但找不到 code composer studio。您能不能建议从何处获取此 CCS 项目文件?

    谢谢、此致、

    Jyoti

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    主机代码串行闪存编程器使用 C++程序构建、并针对目标 PC 构建。 为此、我们内置了 VS。

    我不知道 CCS 能够为主机 PC 构建 C++代码。

    因此、您可以使用 Visual Studio 或使用命令行工具、如 gcc 等

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

    您好 Sal、

    我们测试了由您提供的二进制代码(针对 LEDBlink 示例的串行闪存编程器的内核、应用代码和可执行文件)、它在我们的定制板上不起作用。

    我在这里附加了包含日志的屏幕截图、您可以看到它在下载应用程序映像时停止、并且不会从该循环中退出。

    请提供相同的解决方案。

    谢谢、此致、

    Jyoti

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

    由于我在 F2833x contorlCARD 上运行了内核、我必须建议您在电路板上开始对此进行调试。

    我们提供内核和串行闪存编程器、以帮助客户。 您可以使用内核并对其进行调试以使其与您的板协同工作、或者您也可以创建定制解决方案。

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

    您好 Sal、

    您能否在 F2833x 控制卡上刷写我们的应用文件?如果 您不能刷写到控制器卡、请告知我们。 我们在将以下代码刷写到电路板时遇到问题。

    我在下面给出了附加的2个应用文件和串行闪存路径


    文件名:PQCR_DAC_1.5V.out

    C:\ti\c2000Ware_1_00_06_00\utilities\flash_programmers\serial_flash_programmer>serial_flash_programr.exe -d F2803x -k kernel.txt -a PQCR_DAC_1.5V.txt -p COM5 -b 9600 -v  

    文件名: PQCR_DAC_3V.out

    C:\ti\c2000Ware_1_00_06_00\utilities\flash_programmers\serial_flash_programmer>serial_flash_programr.exe -d F2803x -k kernel.txt -a PQCR_DAC_3V.txt -p COM5 -b 9600 -v  

    请告知我们您是否能够进行刷写。

    谢谢、此致、

    Jyoti

    e2e.ti.com/.../PQCR_5F00_DAC.zip

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

    您好 Sal、

    您是否检查了电路板上应用程序代码的刷写?

    我们需要您的帮助来解决项目上的问题。现在我们正在调试相同的代码、我们能够将内核加载到控制器、但我们在将应用程序代码刷写到控制器时遇到了问题。  

       

    在上面、我们可以将应用程序代码写入 COM 端口文件、但当我们尝试从 COM 端口文件读取相同代码时、它会卡住、控制不会进一步。 您能不能向我们建议可能出现的问题吗?

    谢谢、此致、

    Jyoti  

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

    我尚未尝试使用您的代码。

    您可能需要为器件提供更多时间来完成闪存擦除。 闪存擦除操作可能需要相当长的时间。

    请在发送自动波特率锁定字符后、发送标头信息后、发送块大小、块地址和数据之前添加延迟。

    一些数据显然会丢失、这可能会导致时序问题。 您将需要调试此竞态条件。

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

    根据您的建议、我们选择 F2803x 器件以在串行闪存命令下对 F2833x 器件进行偏置(供您参考-d F2803x -k D:\Bhanu\f2833\f28335_flash_kernel.txt -a D:\Bhanu\f2833\PQCR_DAC_3V.txt -p COM7 -b 9600)。

    对于 F2803x 器件、它正在调用 f05_DownloadImage.cpp 文件内的 F05_DownloadImage()函数。 我们在 f05_DownloadImage.cpp 和 serial_flash_programr.cpp 文件中找不到任何擦除函数调用。

    Serial_flash_programr.cpp 具有除 F2803x 器件以外的不同器件的擦除功能。因此、请提供用于在 F05文件中擦除 F2803x 器件的擦除功能信息、或提供支持 F2833x 器件的更新的.cpp 文件。

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

    擦除发生在器件内核中。 执行自动波特率锁定并接收到十六进制标头信息后、内核会擦除闪存扇区。 在这个器件上、擦除操作花费了大量的时间。 请在发送头文件信息后在串行闪存编程器中添加延迟。

    这可能是通信同步问题。 您将需要调试发生这种情况的位置、并通过延迟或握手提供纠正措施。

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

    您好 Sal、

    您建议在发送头文件信息后在串行闪存编程器之后添加延迟、我们尝试添加多个延迟、但并不幸运。

    如需参考、请查看以下屏幕截图。

    您能不能建议问题出在哪?

    谢谢、此致、

    Jyoti

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

    问题在于器件和 PC 之间的时序。

    请调试您的系统并确定数据丢失的位置、并通过添加一些额外的延迟来纠正这种情况。

    一种帮助您自己调试的方法是通过 CCS 将内核加载到器件上、并使用串行闪存编程器发送闪存映像。 您可以在发送内核的串行闪存编程器中注释掉代码、因为您已经通过 CCS 加载并运行了该代码。

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

    e2e.ti.com/.../f05_5F00_DownloadImage_5F00_new.cppHiSal、

    我们使用的是 F28335、但正如您建议的、我们将参数传递为 F2803x。

    我们使一个内核项目和一个集成的应用程序项目无法正常工作。

     首先、我们尝试在 Visual Studio 中运行内核代码并重置硬件。  似乎正在加载内核代码。

    然后、只在 Visual Studio 中运行应用程序代码 、然后控制从以下代码返回到 main。

    if (校验和!=(rcvData |(rcvDataH << 8)))

    退货(12);

    其他

    校验和= 0;

    此处 rcvData 为8、rcvDataH 为0、因此条件不匹配、控制返回到主系统、根本不加载应用程序文件。

    我们也增加了延迟,但这对我们没有帮助。

    我有一些查询、如所示

    1) 1)是否需要进行喀尼尔负载复位?

    2)对于 F2803x、我们没有找到任何擦除函数、 所以代码中不需要擦除?

    3) 3) rcvData 和 rcvDataH 之间有何区别?

    4) 4)您能否提供 F28335的整个项目文件?

    附加了工程文件副本。 请查看此信息并告知我们问题。

    谢谢、

    Jyoti

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否说校验和不符合预期? 如果是这种情况、则连接或 SCI 通信可能存在一些问题。 可能较低的波特率会有所帮助。 您还可以使用示波器或其他部分模拟器检查通信、以确保 PC 发送和接收的内容正确且符合预期。

    1) 1)内核加载后没有复位。 内核加载后、ROM 分支到内核并执行内核。

    2) 2)这位于内核代码的 SCI_Boot.c 中。 PC 代码中没有擦除功能。 内核在对闪存进行编程之前擦除闪存。 请再次阅读应用报告以更好地理解。

    3) rcsData 和 rcvDataH 是校验和的两个字节。 第一个是低字节。 第二个是高字节。

    4) 4)我们为您提供 C2000Ware 中所需的一切。 内核和串行闪存编程器。

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

    e2e.ti.com/.../f05_5F00_DownloadImage_2800_1_2900_.cppHiSal、

    今天我安装了 controlSUIT 4.9,正如 C2000Tm微控制器串行闪存编程数据表中所建议的那样,我在 Visual Studio 中开始了串行闪存编程器文件夹的工作。

    我观察到内核加载成功。

    匹配应用自动波特率时出错。

    在中、我发现 sendData 和 rcvData 不匹配。

    我尝试了不同的波特率、我观察到了 rcvData 的不同值。

    我尝试发送'A'以返回 不同波特率的31、0、172值

    我尝试在加载内核后将延迟从10秒增加到1分钟、但我没有成功。

    我尝试了一件事。 当我在发送每个字符后在内核中添加以下代码行时、应用程序自动波特率成功。

            dwRead = 0;

    while (dwRead = 0)

    ReadFile (file、&rcvData、1、&dwRead、NULL);

    睡眠(1);

    printf (("=%lx\n")、rcvData);  

    但后来我坚持在 ReadFile (file、&rcvDataH、1、&dwRead、NULL);  在下面的环路中。

      while (dwRead = 0)

      #ifdef __linux__

      readf =读取(fd、&buf、1);

        if (readf ==1)

        {

        QUIETPRINT (_T ("错误%s\n")、strerror (errno));

        }

        dwRead = readf;

        rcvDataH = buf[0];

    其他

    ReadFile (file、&rcvDataH、1、&dwRead、NULL);

    睡眠(50);

      #endif

    您能给我们提供一些解决此问题的建议吗?

    1) 1)在加载内核时添加读取函数后、为什么自动波特对于应用来说是成功的?

    2)为什么控件粘在 ReadFile 中(file、&rcvDataH、1、&dwRead、NULL);  在上面的代码中?

    3) 3)我们为什么需要修改 F28335的项目 、正如您所说的那样、它将直接工作?

    3)您能否提供 F28335的项目文件。  

    我们使用的是 F28335、但正如您建议的、我们将参数传递为 F2803x。

    attache F05_DownloadImage (1).cpp 文件。 您能查看此代码吗?

    谢谢、

    Jyoti

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Sal、
    请尽快回复我们有关上述问题的信息。

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

    我不知道在调试的这一点上还有什么要说的。 我无法重现此问题、我无法让它在我的身边工作。

    我不确定为什么不同波特率的数据返回不同。 自动波特率锁定功能应该正常工作。

    PC 正在等待 ReadFile、因为它需要来自未接收的器件的一些数据。 器件可能接收到一些错误的数据、并且在未接收到0x08AA 后分支到闪存。 请通读我们提供的源代码以了解这一点、并通读 TRM 的 ROM 引导加载程序部分。

    PC 和器件之间的电路板时序存在问题。 如果您愿意、您可以提供更多同步。 您还可以删除校验和功能并恢复到 SCI 引导加载程序使用的回显通信。 这可能会有所帮助、因为您的电路板/连接似乎发送和接收不一致。

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

    您好 Sal、

    serial_flash_programr.exe -d F2833x -v -k f28335_flash_kernel.txt -a Example_2833xLEDBlink.txt -p COM13

    您建议命令行使用  F2833x 作为器件 ID、但对于我们的项目、我们使用 F2803x 、因为我们的项目不支持 F2833x 器件。因此、如果您有支持 F2833x 器件的项目、请与我们分享。

    问. 您能否告诉我们您将哪个 GPIO 引脚用于此 LEDBLinking 示例?

    谢谢、此致、

    Jyoti

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您使用 F2803x 选项、串行闪存编程器没有区别。 它将调用 F2833x 器件所需的下载函数。

    使用您可以监控的 GPIO。

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

    在将应用程序加载到器件时是否存在地址不匹配的可能性?
    我们将如何了解写入的位置以及从器件读取的位置?

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

    我的问题很少、因为:

    1) 1)我们在何处使用内核和应用程序的起始地址和结束地址?
    2)为什么我们在应用中不会得到回波?
    3)为什么要同时为内核和应用程序发送自动波特率字符?
    4)为什么我们需要单独为内核和应用程序执行自动波特?
    5) 5)是否需要在将应用程序文件写入器件之前关闭内核文件?
    6) 6)是否需要在为应用程序加载内核后关闭 COM 端口?

    请尽快回复我们。 情况紧急。

    谢谢
    Jyoti
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请阅读这份非常详细的应用报告 :www.ti.com/.../sprabv4b.pdf

    请参阅 TRM 的引导 ROM 一章。

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们已将此信息发布在文档中、因此我们无需在每个 E2E 帖子上回答相同的问题。

    此外、您还可以观察串行闪存编程器和 SCI 闪存内核的源代码。 我们提供源代码来帮助客户阅读和理解代码、还使客户能够修改和自定义代码。

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

    尊敬的 Sal:

     我们有2个应用文件(1.txt 和2.txt)。 我们能够在其中加载1.txt 应用程序文件、但无法加载2.txt。 您能不能向我们建议可能存在的问题。 两个文件大小相同、但内容变化很小。 已附加这两个应用程序文件供您参考。

    e2e.ti.com/.../5123.1.txte2e.ti.com/.../6175.2.txt

    谢谢、

    Jyoti

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

    在使用“serial_flash_programmer.exe”下载应用程序映像时,我们遇到了另一个问题。

    我们可以下载我们自己的从 CCS4生成的示例代码。

    我们还能够下载提供的一些.out 文件、然后将它们转换为十六进制。 使用 CCS8提供的工具“hex2000.exe”将这些文件从“*.out”转换为“*.txt”。

    问题:

    部分“*.out”文件未下载,在应用程序自动波特成功后停止。 它不会从环路中产生。

    我们想知道原因,为什么某些应用程序十六进制文件在 其他文件下载时未成功下载?

    请优先帮助我们解决此问题。

    谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用哪种操作系统来转换十六进制文件?

    是否在文本编辑器中打开文本文件?

    有时、操作系统会在十六进制文件行的末尾附加字符。

    请确保您重建.txt 文件、并且不要在文本文件中打开它们。

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

    Sal 提到的线结束问题的调试示例: e2e.ti.com/.../2902135

    谢谢、此致、
    Vamsi

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

    e2e.ti.com/.../Application_5F00_Image_5F00_Not_5F00_working.txte2e.ti.com/.../Application_5F00_Image_5F00_Working.txtHi、Vamsi & Sal、

    正如 Vamsi 建议的那样 我们将继续在此处发布新问题。

    我们可以下载我们自己的从 CCS4生成的示例代码。

    我们还能够下载提供的一些.out 文件、然后将它们转换为十六进制。 使用 CCS8提供的工具“hex2000.exe”将这些文件从“*.out”转换为“*.txt”。

    问题:

    部分“*.out”文件未下载,在应用程序自动波特成功后停止。 它不会从环路中产生。

    我们想知道原因,为什么某些应用程序十六进制文件在 其他文件下载时未成功下载?

    PFA:正在工作和不工作的应用程序映像文件。

    我们已经在 Windows 10和7操作系统上进行了测试。  我们不会使用记事本打开转换后的.txt 文件、以避免附加字符出现任何问题。

    请您检查您的最终优先级并提供解决方案。

    等待您的回复

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

    我们无法自行检查差异。 不过、我们可以帮助您进行调试。

    不同十六进制文件之间有何差异? 它们的创建是否相同? 应用程序(.outs)之间有何差异? 所有这些都完全链接到闪存中吗? 在这些十六进制文件中、是否有任何段链接到 RAM?

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

    如果您需要进一步帮助查找失败和通过映像之间的差异、我们的编译器团队可能会帮助您对其进行分析。
    您需要提供所有详细信息(链接器 cmd、用于生成映像的命令、它是独立映像还是同一应用程序的多个映像的一部分等)以及用于发生故障和通过案例的示例映像。

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

    e2e.ti.com/.../Working_5F00_NotWorking.zipe2e.ti.com/.../F28334_5F00_cmd_5F00_linker.txt

    大家好、Vamsi & Sal、

    我们使用的是独立应用程序映像。 我们将使用以下命令从".out"转换为".txt"
    (hex2000.exe -boot -sci8 -a -o application.txt application.out)

    然后使用"serial_flash_programmer.exe"并使用以下参数进行刷写:
    (serial_flash_programr.exe -d F2803x -k kernel.txt -a application.txt -p COM3 -b 9600 -v)

    我们将从项目默认重建选项生成.out 文件

    附件:cmd 链接器文件。(文件扩展名更改为.txt)
    附加的图像:工作中和不工作

    附加的.out 文件  :工作中和不工作中
    所附的.txt 文件:工作中和不工作中

    正在等待您的快速 resolution.e2e.ti.com/.../8524.Application_5F00_Image_5F00_Working.txte2e.ti.com/.../1234.Application_5F00_Image_5F00_Not_5F00_working.txt

    谢谢你

    此致、
    Bhanu

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

    您好 Bhanu、

    感谢您对我们团队的澄清:

    -您对两个.out 文件使用相同的 linker.cmd?

    -您在 Windows 计算机上构建和转换文件?

    -什么导致.out 文件中的更改(#define changes、manual edit、...)?

    只是尝试了解导致此问题的原因、因为生成的.txt 在某些字节中仅有细微差异。 我假设您在多个电路板上尝试过多次? 也有不同的顺序?

    您是否有更多使用其他源代码或构建选项的工作/非工作示例?

    此致、

    弗兰克

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

    您好、Frank、

    请查看以下信息:

    -您对两个.out 文件使用相同的 linker.cmd?

    (是...我们使用相同的链接器文件)

    -您在 Windows 计算机上构建和转换文件?

    (是的。我们使用 Windows 10环境)

    -什么导致.out 文件中的更改(#define changes、manual edit、...)?

    (更改一些通过 SPI 发送以配置 DAC 的变量)

    检查所附图像显示了哪些更改使其正常工作、哪些更改不起作用。

    只需尝试了解可能导致此问题的原因,因为生成的.txt 在某些字节中只有细微的差异。 我假设您在多个电路板上尝试过多次? 也有不同的顺序?

    (是的。。。我们在两个板上尝试了多次)

    附件

    工作&不工作 Image2e.ti.com/.../Working_5F00_1v.txte2e.ti.com/.../Not_5F00_Working2.txtes(set-2)-使用了相同的链接器文件

    谢谢、

    Bhanu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "(更改通过 SPI 发送以配置 DAC 的某些变量)"是什么意思?

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

    您已请求共享生成.out 文件的代码中的更改内容。
    如前面的屏幕截图所示、这些是我们在代码中所做的更改、用于反映通过 SPI 接口在定制设计板中连接的 DAC 输出。
    希望您能清楚地理解并提供解决方案。

    谢谢、

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

    请尝试这个东西。 在闪存内核中、添加这一行代码。 我不确定这是否会纠正它、但值得一试。

    在 SCI 自动波特率锁定函数中、添加 SciaRegs.SCIHBAUD.bit.baud = 0;

    然后重建内核并重新生成内核的 hex 文件。

    //
    // SCIA_AutoaudLock -使用主机执行自动波特率锁定。
    // 请注意、如果自动波特率永远不会发生
    // 程序将在此例程中挂起
    // 不包括超时机制。
    //
    void SCIA_AutobaudLock (void)

    uint16字节数据;

    //
    //必须使用大于1的主波特率寄存器
    //
    SciaRegs.SCILBAUD.bit.波特= 1;

    SciaRegs.SCIHBAUD.bit.baud = 0;//添加此行代码

    //
    //准备自动波特率检测
    //设置 CDC 位以启用自动波特检测
    //并清除 Abd 位
    //
    SciaRegs.SCIFFCT.bit.CDC = 1;
    SciaRegs.SCIFFCT.bit.ABDCLR = 1;


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

    e2e.ti.com/.../SCI_5F00_Boot.cHi、Sal、

    我们已尝试您的建议更改,并在下面添加了。

    (SciaRegs.SCIHBAUD = 1;)

    它没有解决问题、

    供参考:在此处附加"SCI_Boot.c"文件。

    请检查并告知我们您是否会建议进行任何其他更改。

    等待您的回复。

    此致、

    Bhanu

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

    您需要提供一些更多信息、因为我们正在处理此问题。

    您可以使用 CCS 和 VS 来帮助您进行调试。

    当器件被卡住时、您可以使用 CCS 加载内核的符号、以查看 CPU 在何处挂起或被阻止。 您也可以对 PC 的 Visual stdio 执行相同的操作。

    这可能是一个时序问题、您需要解决两个处理器之间的相关性。

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

    我们已经多次使用 CCS 调试完成此操作、我们观察到内核正在正确加载、直到最后一个字节为止没有任何问题。
    当涉及到应用程序下载时、它挂起、如之前所附的屏幕截图图像中所示。

    您是否尝试加载了我们在前一个线程中共享的应用程序映像(.out 和.txt)文件?
    等待您的结果相同。

    此致、
    Bhanu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否、我没有尝试过您的应用程序。

    由于您使用 CCS 来帮助调试、因此器件在该过程挂起时会执行什么操作? CPU 在何处执行? 此外、当进程挂起时、主机会执行什么操作?

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

    您好、Jyoti、

    我已经检查了您的 SCI_Boot.c 文件。

    您进行了以下更改:

    //
    //必须使用大于1的主波特率寄存器
    //
    SciaRegs.SCILBAUD = 1;
    SciaRegs.SCIHBAUD = 1;// TI 建议使用此行

    文件中有一个小错误。 TI 建议使 HBAUD = 0而不是 HBAUD = 1。

    请检查 Sal 的帖子。

    如 Sal 所述、请将其修改为

    //
    //必须使用大于1的主波特率寄存器
    //
    SciaRegs.SCILBAUD.bit.波特= 1;

    SciaRegs.SCIHBAUD.bit.baud = 0;//添加此行代码

    通过此更改、重建内核并重新生成内核的 hex 文件。

    谢谢、

    Katta

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

    e2e.ti.com/.../DSP2833x_5F00_Sci.hHi Sal & Katta、

    不像您建议的那样工作。

    正如您所提到的、我们已经测试了以下行、但进行了一些微小的更改、因为确切行会给出屏幕截图中所附的编译错误。

    此外、我们还使用"DSP2833x_Sci.h"头文件。 我随函附上供您参考。

    //

      //必须使用大于1的主波特率寄存器

      //

      //SciaRegs.SCILBAUD = 1;

      SciaRegs.SCILBAUD = 1;

      SciaRegs.SCIHBAUD = 0; //添加了 TI 建议的此行

      //

      //准备自动波特率检测。 设置 CDC 位以启用自动波特

      //检测并清除 Abd 位

      //

    请检查并提供解决方案。

    谢谢、

    此致、

    Bhanu

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

    e2e.ti.com/.../0216.Application_5F00_Image_5F00_Working.txte2e.ti.com/.../6153.Application_5F00_Image_5F00_Not_5F00_working.txte2e.ti.com/.../Serial_5F00_Data_5F00_Capture_5F00_Working_5F00_NotWorking.zipHiSal & Katta

    除了 上述回复外、我们还可以观察到通过 USB UART 串行端口下载时的情况。

    我们正在使用主机端的串行端口分析器在下载到电路板时调试此问题、以验证下载步骤的确切顺序。

    PFA    :工作文件和不工作文件,为您参考而捕获的串行数据。

            还随附了工作和不工作(.txt)文件供您参考。

    观察结果:

    1:多次使用不起作用的文件捕获。

    答:下载应用程序映像时,它总是在相同的特定位置停止。 (订单编号:104491)

    b.在发送应用程序映像的每个块(主要是4094字节)后、它将接收2个字节的数据(即校验和)、

    c.发送最后一个块后,我们不会接收校验和(按顺序停止:104491)。 它在工作文件中接收

    2.我们看到工作文件和非工作文件中只有3个字节的代码更改。

    a:这些更改属于最后一个不工作文件块的区域、我们不会接收校验和。

    为什么我们没有收到校验和、原因可能是什么? (我们已经观察到、在完成大约70%后、它会停止下载)

    此致、

    Bhanu

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

    您好 Bhanu、

    我测试了您发送的两个.txt。 并且两个都已成功加载。

    我不确定问题可能是什么。

    首先、您能否尝试使用我附加的 ZIP 中的内容。 可能有一些细微的差异、但我不确定可能会是什么。

    其次、您能否使用编译器或链接器标志来生成代码的子段。 我看到您的十六进制文件中有非常大的数据块。 也许将这些细分为更小的块会有所帮助。 尽管我不是肯定的、但-gen_func_subsections 标志可能有助于将其分解。

    此致、

    SAL

    e2e.ti.com/.../bhanu.zip

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

     e2e.ti.com/.../Kernel_5F00_Header.zipHiSal、

    我们已使用您的共享内核 文件和 serial_flash_programmer 进行了测试 、我们也发现这些文件具有相同的观察结果。

    实际上、我们使用的是 TMS320F28334 MCU、我假设您在不同的 MCU 上进行测试、即28335。

    我们请求您检查我们正在使用的确切器件。

    我正在附加闪存内核和用于生成相同内容的头文件。

    1.为什么没有使用不起作用的文件从 MCU 接收校验和?

    2.为什么在6个位置发生2个字节的变化会导致上述情况?

    附加比较屏幕截图图像也可供参考。

    此致、

    Bhanu

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

    我无法访问确切的器件型号。 此外、这两者之间没有差异、这将导致此问题。

    这是我的建议、因为我们无法重现此问题。

    与 SCI 引导加载程序相比、SCI 内核已得到增强、可使用校验和功能而不是回送功能来确保数据完整性。

    我建议您恢复并修改 SCI 内核以使用回声通信。 对于接收到的每个字节、将其发送回主机。 这简化了通信并在主机和器件之间提供更多握手。

    然后、您还需要修改主机串行闪存编程器以使用回声通信。 此函数已存在于工程中、当前用于与引导加载程序进行通信。 修改代码以使用相同的函数与将使用回显的已修改内核进行通信。

    请尝试此更改以使您的解决方案正常工作。 显然、回声通信与引导加载程序一起工作。 使用内核复制此内容。 我们为主机和器件程序提供源代码、以便您可以根据需要对其进行修改和调试。

    如果您对如何执行此操作有具体问题、请随时咨询。

    希望这对您有所帮助、
    SAL
1 2