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.
您好!
我已经在 include 中包含了 API 文件和所有源文件、但一旦调用擦除闪存、就会显示以下错误:
但我没有在任何地方指定任何此类位置。 请支持解决此问题。 如果有人可以支持、也可以在何处编辑此位置。 这将会大有帮助
Needigya、
这不是错误。 看起来您尝试步入闪存 API 函数。 您在应用中包含了闪存 API 库。 您没有源文件(我们不会为闪存 API 发布源文件)。 该消息只是说您的项目中没有可用的源文件。
您可以单步执行闪存 API 函数以避免此消息。
如果您有其他问题、请告诉我。
谢谢、此致、
Vamsi
您好!
感谢您的快速响应。
实际上、闪存 API 初始化本身会将返回值设置为失败、这就是我尝试对其进行调试的原因。
您能告诉我调试它的方法吗? 我也不会获得返回值、只是在将代码包含到"estop"之后。
Needigya、
好的。
我建议您查看 C2000Ware 中的闪存编程示例、网址 为 C2000Ware_3_03_00_00\device_support\f2837xs\examples\cpu1\flash_programming\cpu01
您能否检查是从闪存还是 RAM 执行闪存 API? 如果您在链接器 cmd 文件中将其映射到闪存进行加载、并将 RAM 用于执行、则请确保在应用程序中调用闪存 API 函数之前使用 memcpy ()将闪存 API 复制到 RAM。
此常见问题解答可为您提供帮助: e2e.ti.com/.../951668
请搜索"当闪存 API 无法擦除或编程时、我们可以考虑哪些常见调试提示?" 在上面的常见问题解答中。
如果 C2000Ware 示例和常见问题解答对解决您的问题没有帮助、请告诉我、我可以提供帮助。
谢谢、此致、
Vamsi
尊敬的 Vamsi:
我尝试了示例代码、它工作正常。 当我集成到代码中时、问题仍然存在。 您能告诉我们如何找到问题和根本原因吗?
是的、我要将其复制到 RAM 中。
一旦调用初始化函数、指针就不会向前移动并转到 estop。
API 的返回值也不会返回值
但是、由于我无法访问库、因此我无法调试问题
Needigya、
您不需要闪存 API 源即可对其进行调试。
请发送给我:
(i)链接器 cmd 文件
(二)地图文件
(iii)代码片段、您可以在其中调用闪存初始化例程(用于设置 waitstates)、memcpy ()和 Fapi_initiatizeAPI ()。
我还建议您查看此常见问题解答、以防它为您触发任何调试提示: e2e.ti.com/.../878674
此外、您还可以单步执行示例代码并查看示例工程的链接器 cmd 和编译设置、以了解该代码与您的工程之间的差异。 同样、无需单步执行闪存 API 函数。
谢谢、此致、
Vamsi
您好!
以下是 cmd 文件:
/*
//######################################################################################################################
//文件:flash_programming_cpu1_flash.cmd
//标题:所有 F28X7x 器件的链接器命令文件
//######################################################################################################################
//$TI 版本:F2837xS 支持库 v191 $
//$Release Date:星期五3月11日15:58:35 CST 2016 $
//版权所有:版权所有(C) 2014-2016 Texas Instruments Incorporated -
// http://www.ti.com/保留所有权利$
//######################################################################################################################
*
/*===================================================================
//适用于 Code Composer Studio V2.2和更高版本
//--------------------------------------------------------
//除了该内存链接器命令文件外,
//将头文件链接器命令文件直接添加到工程中。
//链接时需要标头链接器命令文件
//将外设结构设置到内部的适当位置
//存储器映射。
//在中找到了头文件链接器文件 \F2837xS_headers\cmd
//对于 BIOS 应用程序添加:F28X7x_Headers_BIOS.cmd
//对于非 BIOS 应用程序添加:F28X7x_Headers_nonBIOS.cmd
=================================================================================================== *
/*定义 F28X7x 的存储器块开始/长度
PAGE 0将用于组织程序段
第1页将用于组织数据段
注:
F28M3Xx 上的存储器块是一致的(也是相同的
物理存储器)。
不应该是相同的存储器区域
同时为 PAGE 0和 PAGE 1定义。
这样做将导致程序损坏
和/或数据。
可以是连续的 SARAM 存储器块或闪存扇区
组合在一起以创建更大的存储器块。
*
存储器
{
第0页:/*程序内存*/
/*内存(RAM/FLASH)块可移动到 Page1进行数据分配*/
/* begin 用于"引导至闪存"引导加载程序模式*/
开始:origin = 0x080000,length = 0x000002
RAMM0:origin = 0x000122、length = 0x0002DE
RAMD0:origin = 0x00B000、length = 0x000800
RAMLS03:origin = 0x008000、length = 0x002000
/* RAMLS1:origin = 0x008800,length = 0x000800
RAMLS2:origin = 0x009000,length = 0x000800
RAMLS3:origin = 0x009800、length = 0x000800 *
RAMLS4:origin = 0x00A000,length = 0x000800
复位:origin = 0x3FFFC0,length = 0x000002
/*闪存扇区*/
FLASHA:origin = 0x080002,length = 0x001FFE /*片上闪存*/
FLASHB:origin = 0x082000、length = 0x002000 //片上闪存*
FLASHC:origin = 0x084000,length = 0x002000 //片上闪存*/
FLASHD:origin = 0x086000、length = 0x002000 //片上闪存*/
FLASHE:origin = 0x088000、length = 0x008000 //片上闪存*/
FLASHF:origin = 0x090000,length = 0x008000 //片上闪存*
FLASHG:origin = 0x098000、length = 0x008000 //片上闪存*/
FLASHH:origin = 0x0A0000,length = 0x008000 //片上闪存*/
FLASHI:origin = 0x0A8000、length = 0x008000 //片上闪存*/
// FLASHJ:origin = 0x0B0000,length = 0x008000 //片上闪存*/
// FLASHK:origin = 0x0B8000、length = 0x002000 //片上闪存*/
// FLASHL:origin = 0x0BA000、length = 0x002000 //片上闪存*/
// FLASHM:origin = 0x0BC000、length = 0x002000 //片上闪存*/
// FLASHN:origin = 0x0BE000,length = 0x002000 //片上闪存*/
第1页:/*数据存储器*/
/*内存(RAM/FLASH)块可移动到 PAGE0进行程序分配*/
BOOT_RSVD:origin = 0x000002,length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
RAMD1:origin = 0x00B800,length = 0x000800
RAMLS5:origin = 0x00A800,length = 0x000800
RAMGS0:origin = 0x00C000、length = 0x001000
RAMGS1:origin = 0x00D000、length = 0x001000
RAMGS2:origin = 0x00E000、length = 0x001000
RAMGS3:origin = 0x00F000、length = 0x001000
RAMGS4:origin = 0x010000,length = 0x001000
RAMGS5:origin = 0x011000,length = 0x001000
RAMGS6:origin = 0x012000,length = 0x001000
RAMGS7:origin = 0x013000,length = 0x001000
}
部分
{
/*分配计划领域:*/
.cinit:> FLASHD PAGE = 0
.pinit:> FLASHD,page = 0
.text:>> FLASHD | FLASHE PAGE = 0
codestart:> begin page = 0
组
{
ramfuncs
{-l F021_API_F2837xS_FPU32.lib}
.TI.ramfunc
}负载= FLASHD,
运行= RAMLS03、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0
/*分配未初始化的数据段:*/
.stack:>RAMM1 page = 1.
.ebss:>> RAMLS5 | RAMGS0 | RAMGS1 PAGE = 1.
.esysmem:> RAMLS5 PAGE = 1.
/*初始化段进入闪存*/
econst:>> FLASHF | FLASHG PAGE = 0
.switch:> FLASHD PAGE = 0
.reset:> reset,page = 0,type = DSECT //未使用,*/
filter_RegsFile:> RAMGS0,PAGE = 1
SHARERAMGS0:> RAMGS0,PAGE = 1
SHARERAMGS1:>RAMGS1,PAGE = 1.
/*闪存编程缓冲器*/
BufferDataSection:>RAMD1,PAGE = 1,ALIG(4)
}
/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*
Needigya、
在执行擦除命令之后(空白检查之前)、我看不到您检查 FMSTAT 值。 您能否使用 fapi_getFsmStatus()检查 fmstat 值并让我知道该值是什么?
请查看 C2000Ware 示例,了解如何使用 Fapi_getFsmStatus()。
谢谢、此致、
Vamsi
Needigya、
您对此有任何更新吗? 我可以关闭此帖子吗?
谢谢、此致、
Vamsi