主题中讨论的其他器件: C2000WARE
工具/软件:Code Composer Studio
您好,
我不熟悉 Code Composer Studio、我需要 CCS 上的项目创建帮助。 我有一个应用代码的输出(.out)文件、我需要 使用 UART 通信将此输出代码闪存到 TMS320F28334控制器。 请任何人在这方面提供帮助以实现这一目标。
谢谢、此致、
Jyoti
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.
工具/软件:Code Composer Studio
您好,
我不熟悉 Code Composer Studio、我需要 CCS 上的项目创建帮助。 我有一个应用代码的输出(.out)文件、我需要 使用 UART 通信将此输出代码闪存到 TMS320F28334控制器。 请任何人在这方面提供帮助以实现这一目标。
谢谢、此致、
Jyoti
e2e.ti.com/.../Working_5F00_1.5VFile.txtHi、Sal、
我希望我们在结束时已经尝试过这一点
正如您所说、我们使用的是启用回声通信的 SCI 内核。
您可以从附加的日志和终端屏幕截图中进行检查。
如果您有更新的 serial_flash_programr.exe、请发送给我。
我们更有兴趣了解以下问题:
1.为什么没有使用不起作用的文件从 MCU 接收校验和?
2.为什么在6个位置发生2个字节的变化会导致上述情况?
如果 您可以通过 WebEx 或任何其他在线远程会话来安排调试会话,那将会很好?
此致、
Bhanu
您好、Sal、
我们正在使用当前的 F28335_flash_kernel 工程、只对 进行了细微更改(器件选择–f28334和时钟选择–30Mhz)。
“引导 ROM 源代码的 SCI_Boot 使用回显。” 您是否在讨论 SCI_BOOT.c? 我们检查了 SCI_BOOT.c 并查看了函数 CopyData()。 它一次将1K 数据写入闪存。
关于回声选项,您能否具体说明:
是否 需要在项目中添加其他文件?
2.需要在回显选项的哪个文件中进行哪些更改?
我们使用 C2000ware 安装文件夹中提供的"F05_DownloadImage.cpp"构建 serial_flash_programmer。 它无法正常工作。 请检查随附的屏幕截图图像以供参考。
您共享的 serial_flash_programr.exe 并非如此。我们可以下载几个文件。 因此、请您共享生成 serial_flash_programmer 的源代码。
此致、
Bhanu
您好、Manoj、
我们没有收到任何错误消息。
我们能够成功地将几个文件下载到闪存中。 下载70%后、有几个文件会被删除。 我们捕获了在主机和器件之间传输的串行数据。 我们看到没有为器件中的这些文件发送校验和。 我们查看了 shared_Boot.c 中的代码 CopyData(),并发现只有当校验和无法发送时,Flash_Program()才不会返回成功。 因此、我们得出结论、Flash_Program 可能不成功。
----------------------------------------------------
状态= Flash_Program (((UINT16 *) BlockHeader.DestAddr、
(uint16 *) progBuf、BlockHeader.blockSize、
FlashStatus (FlashStatus);
if (status!= STATUS_SUCCESS)
{
返回;
}
//
//闪存程序后,将校验和发送到 PC 程序。
//
SendCheckSum();
----------------------------------------------------
我们想知道为什么在加载70%的代码后闪存程序不成功? 为什么它在少数文件中是成功的、而在其他文件中是不成功的? 成功文件和失败文件之间的差异最小。 只有在加载块后、差异所在、我们才会看到校验和不是来自器件。
PFA:正在运行和未运行的串行转储的屏幕截图
谢谢
Bhanu
您好 Sal、
"首先、回波可以在 F05_DownloadKernel.cpp (主机)和 SCI_Boot.c (器件)中找到、位于此处"(我们找不到此文件- F05_DownloadKernel.cpp)
正如您提到的、我们已经在使用 SCI_Boot.c。 那么、对于 ECHO_BAC返回、必须进行什么更改?
我们尝试在内核加载后再加载一些延迟(睡眠10000)、这无助于解决下载问题。 您共享的 serial_flash_programr.exe 并非如此。 我们可以下载一些文件。 因此、请您共享生成 serial_flash_programmer 的源代码。 除了延迟之外、它似乎还有其他更改、例如内核下载会回传到终端。
我们查看了 shared_Boot.c 中的代码 CopyData(),并发现只有当校验和无法发送时,Flash_Program()才不会返回成功。 因此、我们得出结论认为 Flash_Program 可能不成功。 我们无法看到 Flash_Program 的返回值、因为它是通过 USB UART 连接的
此致、
Bhanu
e2e.ti.com/.../4530.f05_5F00_DownloadImage.cppHiSal、
我们介绍了您建议的路径中的代码(SCI_Boot.c 和 shared_Boot.c)。 我们使用这些函数来生成内核、并测试了此内核。 我们观察到应用程序文件发生回显。 加载整个应用程序。 请参阅屏幕截图。 但它似乎没有执行。
我们认为下载的应用程序没有加载到闪存中。 该方案应该做的事情没有发生。
我们还在 shared_Boot.c ( rom_source 文件夹)的 CopyData()函数中观察 到 ,FLASH_ERASE 和 FLASH_program 没有被调用,并且缺少"Flash2833x_API_Library.h"。 它们存在于内核使用的文件中。
我们无法确定 Flash_Program 的返回值、因为它是通过 USB UART 连接的。 (请指导我们如何进一步调试它?)
此致、
Bhanu
e2e.ti.com/.../SCI_5F00_boot_5F00_shared_5F00_boot.zipHiSal & Manoj、
我们集成了两个解决方案并编译了内核文件、支持应用程序映像回显并刷写程序。(请检查随附的修改的 SCI_boot.c 和 shared_boot.c 以供您参考)
我们观察到了相同的行为。 很少文件正常工作,很少文件无法正常工作。 行为与以前完全相同。 不起作用的文件会在与以前相同的位置停止。 请查看随附的屏幕截图。
此外、当 应用程序加载暂停时、我们还检查了"Flash_Program"状态。 它将返回(1F),表示错误代码:31。
(错误:STATUS_FAIL_ZERO 位错误)
您能帮助我们了解 STATUS_FAIL_ZERO 位错误并解决它吗?
Flash28334_Program (a、b、c、d)是否存在一些问题、这些问题会反映在特定的数据块中?
此致、
Bhanu
Manoj & Sal、您好!
我们使用 shared_Boot.c 的 CopyData()函数,从中调用 Flash_Erase 和 Flash_Program 函数。 如果此函数适用于 F82335的文件(F82334的工作文件和非工作文件)、则只能怀疑 Flash_28334擦除和 Flash_28334Program 存在问题。
您能否查看您的结尾代码、了解导致此问题的原因? 我要附加文件。
如前所述、我们能够成功下载一些文件。 未成功下载的文件在文件内容上有一些很小的差异。
a:两个文件的大小相同、只有几个字节不同(例如:工作文件中为0x0800 /0x555、不工作文件中为0x0FFF)
B.代码在存在差异的块中停止。
c. 检查随附的工作文件和 NotWorking 文件的比较屏幕截图。
我们在使用3-4块电路板进行测试时也有同样的观察结果。
我们需要您的帮助、以便
1.重新编写您的终端代码,并说明导致此问题的原因是什么?
2、为什么闪存擦除/闪存编程不能仅针对其中包含0xFFF 的块正常进行? 为什么只有在文件中有“0x0FFF”的块才会变得明显。
3. 您是否认为此部件的内部闪存存在问题,从而 导致出现此问题?
等待您的回复。
此致、
Bhanu
您好、Manoj、
您好!
非常感谢您的支持。 为了逐步进行,让我给你一个清晰的图片。
在我们的应用中、
DAC 输出必须是应用文件中配置的值。 例如、如果应用将 DAC 配置为1V、则在加载此应用后、我们期望 DAC 输出为1V。 此 DAC 输出配置范围为0V 至3.3V
当应用将 DAC 输出配置为0V 至1.5V 时、TI 工具生成的输出文件成功加载到闪存中。
当 DAC 输出配置为1.5V 至3.3时、TI 工具生成的输出文件无法加载到闪存中。
如需了解相关信息、
如果输出文件格式为.hex 文件、对于 DAC 输出0V 至3.3V、它正在成功加载到闪存中。 但是、如果输出文件格式为.txt 文件、则 DAC 输出0V 至1.5V 时输出文件正在成功加载、如果 DAC 输出为1.5V 至3.3V、则输出文件未成功加载到闪存中。
为了刷写两种输出文件格式的.hex 和.txt、我们使用了相同的擦除算法。
请帮助我们了解问题吗? 是使用转换工具吗? 我们对此有疑问、因为.hex 文件输出格式能够成功加载、但无法使用.txt 文件格式。
此致、
Rajkumar
您好、Manoj、
当文件下载失败时、我们观察到 STATUS_FAIL_ZERO 位错误。 当在写入前该位未被正确擦除时、就会发生该错误。 由此得出的结论是闪存擦除没有正确发生。 它与我们能够下载几个文件的工具相同(DAC 需要1.0V、1.2V、1.5V 输出电压)、在某些情况下不成功(DAC 需要大于1.5V 的输出电压)
成功的文件和失败的文件之间存在微小的差异。 仅在十六进制以下的内容在8个位置不同。
DAC 所需的输出电压 |
十六进制值 |
二进制值 |
1.0V |
0x0555 |
0000 0101 0101 0101 |
1.2V |
0x0666 |
0000 0110 0110 0110 |
1.5V |
0x0800 |
0000 1000 0000 0000 |
3.3V |
0x0FFF |
0000 1111 1111 1111 |
当包含这个不同的块被传输时、闪存程序将显示错误。
您能否说出闪存擦除失败的原因、 这会导致闪存程序出现 STATUS_FAIL_ZERO 位错误?
谢谢你。
-Rajkumar
您好 Sal、
当 Flash_Program()返回错误时,我们在 shared_Boot.c 中的 CopyData()函数中添加了 Flash_Verify()。 请参阅以下代码。 我们观察到 Flash_Verify 函数返回0x28值。 这用于 STATUS_FAIL_VERIFY 错误。 这种情况发生在块中、其中工作块和非工作块存在字节差异。
Flash_Program ()返回 STATUS_FAIL_zero_bit_error。 当闪存未被正确擦除时,Flash_Program()返回此错误。
您能否加快确定此行为的根本原因? 我们可以有一个用于调试的 WebEx 会话。
//
//对尽可能多的完整缓冲区进行编程
//
for (j = 0;j <(BlockHeader.blocksize / PROG_buffer_length);j++)
{
BlockHeader.ProgBuffAddr =(uint32) progBuf;
for (i = 1;i <= PROG_buffer_length;i++)
{
wordData =(* GetOnlyWordData)();
*(uint16 *) BlockHeader.ProgBuffAddr++= wordData;
}
状态= Flash_Program (((UINT16 *) BlockHeader.DestAddr、
(uint16 *) progBuf、PROG_buffer_length、
FlashStatus (FlashStatus);
if (status!= STATUS_SUCCESS)
{
check=1;
Check = Flash_Verify (((UINT16 *) BlockHeader.DestAddr、//用于调试
(uint16 *) progBuf、PROG_buffer_length、
FlashStatus (FlashStatus);
SendFlashNotSuccessValue (状态、检查);
返回;
}
BlockHeader.DestAddr += PROG_Buffer_length;
//
//闪存程序后,将校验和发送到 PC 程序。
//
//SendCheckSum();
}
谢谢
-Rajkumar
您好、Manoj
由于 会发生 STATUS_FAIL_zero_bit_error,因此我们怀疑 Flash_Eras()函数只能从开始。
我们验证了闪存模块、 我们在写入该模块时检查它是否具有0xFFFF。 我们看到 Flash_Verify 返回40。
为什么 Flash_eras()不成功?
Flash_Eras()的工作原理是什么?
我们在哪里可以找到它的代码?
我搜索了扇区 A、扇区 B、扇区 C、扇区 D 的大小、但我发现了
#define SECTORA (UINT16) 0x0001
#define SECTORB (UINT16) 0x0002
#define SECTORC (UINT16) 0x0004
#define SECTORD (UINT16) 0x0008
#define SECTORE (UINT16) 0x0010
#define SECTORF (UINT16) 0x0020
#define SECTORG (UINT16) 0x0040
#define SECTORH (UINT16) 0x0080
在哪里可以找到扇区的大小?
您能帮助解决问题吗?
谢谢你。
Rajkumar