TI中文支持网
TI专业的中文技术问题搜集分享网站

关于Flash API例程的问题

我从TI官网上下载了一个关于Flash API的例程,编号为:sprc193,  http://www.ti.com.cn/sitesearch/cn/docs/universalsearch.tsp?searchTerm=sprc193&Submit=&linkId=1

我把程序编译后烧写到了我的装置中,在运行中程序执行到

VersionHex = Flash_APIVersionHex();
if(VersionHex != 0x0300)
{
// Unexpected API version
// Make a decision based on this info. asm(" ESTOP0");
}

就出现了问题,我看到VersionHex 变量读到的函数Flash_APIVersionHex()的返回值为0写0x0302,因此程序停到asm(" ESTOP0");了。

我想请问一下各位老师和同仁,是不是需要把判断条件改为if(VersionHex != 0x0302) ?还是库函数的版本有问题???谢谢!

xiansheng qian:

还有个问题,为什么这个函数不能设置断点? 而且全速运行就会进入Fl28x_DelayLoop 中出不来。 之后用仿真器也不能少写程序了,错误出现在擦出阶段。

请问如何解决?

我从TI官网上下载了一个关于Flash API的例程,编号为:sprc193,  http://www.ti.com.cn/sitesearch/cn/docs/universalsearch.tsp?searchTerm=sprc193&Submit=&linkId=1

我把程序编译后烧写到了我的装置中,在运行中程序执行到

VersionHex = Flash_APIVersionHex();
if(VersionHex != 0x0300)
{
// Unexpected API version
// Make a decision based on this info. asm(" ESTOP0");
}

就出现了问题,我看到VersionHex 变量读到的函数Flash_APIVersionHex()的返回值为0写0x0302,因此程序停到asm(" ESTOP0");了。

我想请问一下各位老师和同仁,是不是需要把判断条件改为if(VersionHex != 0x0302) ?还是库函数的版本有问题???谢谢!

xiansheng qian:

回复 xiansheng qian:

最奇怪的就是为什么这个工程中设置断点不管用,一点“全速运行”就直接过去了。

我从TI官网上下载了一个关于Flash API的例程,编号为:sprc193,  http://www.ti.com.cn/sitesearch/cn/docs/universalsearch.tsp?searchTerm=sprc193&Submit=&linkId=1

我把程序编译后烧写到了我的装置中,在运行中程序执行到

VersionHex = Flash_APIVersionHex();
if(VersionHex != 0x0300)
{
// Unexpected API version
// Make a decision based on this info. asm(" ESTOP0");
}

就出现了问题,我看到VersionHex 变量读到的函数Flash_APIVersionHex()的返回值为0写0x0302,因此程序停到asm(" ESTOP0");了。

我想请问一下各位老师和同仁,是不是需要把判断条件改为if(VersionHex != 0x0302) ?还是库函数的版本有问题???谢谢!

xiansheng qian:

回复 Eric Ma:

对!谢谢!

还想问您一下,我做了一个实验,为我以后做在线升级做铺垫。 我在CMD中将

.cinit   .pinit  .text  .econst   .switch都定位到了Flash A中,之后在我的应用程序中把Flash A中的数据考到了一个定位在H0的ram中,之后把这些数据都写到了Flash C中,再把Flash A擦除,把Flash C中的数据放到缓冲后再写到Flash A中。 可以写成功,但是复位后程序无法进入main函数,请问这么做有什么不对的地方? 我暂时还没想明白……

我跟踪了一下,程序复位后首先执行code_start 函数,当执行到LB wd_disable的时候,程序就进入了 000066 0000 ITRAP0  而没有进入到wd_disable 这个函数中。我不知道怎么回事……

我从TI官网上下载了一个关于Flash API的例程,编号为:sprc193,  http://www.ti.com.cn/sitesearch/cn/docs/universalsearch.tsp?searchTerm=sprc193&Submit=&linkId=1

我把程序编译后烧写到了我的装置中,在运行中程序执行到

VersionHex = Flash_APIVersionHex();
if(VersionHex != 0x0300)
{
// Unexpected API version
// Make a decision based on this info. asm(" ESTOP0");
}

就出现了问题,我看到VersionHex 变量读到的函数Flash_APIVersionHex()的返回值为0写0x0302,因此程序停到asm(" ESTOP0");了。

我想请问一下各位老师和同仁,是不是需要把判断条件改为if(VersionHex != 0x0302) ?还是库函数的版本有问题???谢谢!

Eric Ma:

回复 xiansheng qian:

xiansheng,

我认为应该是烧写出现问题,不然不会这样子。你自己对比用CCS烧写以及用Flash API烧写的Flash A 扇区的内容,看是否有不一样的单元。

另外如果仅仅想测试Flash API的擦除以及烧写功能而已,可以直接使用ControlSUITE 中的例程进行测试。对其他扇区进行擦除和烧写。

Eric

我从TI官网上下载了一个关于Flash API的例程,编号为:sprc193,  http://www.ti.com.cn/sitesearch/cn/docs/universalsearch.tsp?searchTerm=sprc193&Submit=&linkId=1

我把程序编译后烧写到了我的装置中,在运行中程序执行到

VersionHex = Flash_APIVersionHex();
if(VersionHex != 0x0300)
{
// Unexpected API version
// Make a decision based on this info. asm(" ESTOP0");
}

就出现了问题,我看到VersionHex 变量读到的函数Flash_APIVersionHex()的返回值为0写0x0302,因此程序停到asm(" ESTOP0");了。

我想请问一下各位老师和同仁,是不是需要把判断条件改为if(VersionHex != 0x0302) ?还是库函数的版本有问题???谢谢!

xiansheng qian:

回复 Eric Ma:

我知道怎么回事了,擦写flash A的时候把 0x3F7FF6和0x3F7FF7也给擦掉了,也就是cmd文件里的BEGIN段里的地址, 因此导致了运行到code_start就出跑飞。

应该在0x3F7FF6 中写入 0x007F, 在0x3F7FF7中写入 DSP280x_CodeStartBranch.obj (.text) 在map文件中地址的低16位。 这样就可以了!

但是如何在程序中获取DSP280x_CodeStartBranch.obj 在map文件中的地址??? 请教一下! 谢谢! 

我从TI官网上下载了一个关于Flash API的例程,编号为:sprc193,  http://www.ti.com.cn/sitesearch/cn/docs/universalsearch.tsp?searchTerm=sprc193&Submit=&linkId=1

我把程序编译后烧写到了我的装置中,在运行中程序执行到

VersionHex = Flash_APIVersionHex();
if(VersionHex != 0x0300)
{
// Unexpected API version
// Make a decision based on this info. asm(" ESTOP0");
}

就出现了问题,我看到VersionHex 变量读到的函数Flash_APIVersionHex()的返回值为0写0x0302,因此程序停到asm(" ESTOP0");了。

我想请问一下各位老师和同仁,是不是需要把判断条件改为if(VersionHex != 0x0302) ?还是库函数的版本有问题???谢谢!

Eric Ma:

回复 xiansheng qian:

xiansheng,

那你就直接在程序中读0X3F7FF6和0X3F7FF7中的内容,不就可以了吗?你所要做的不就是把这两个单元的内容写进去而已嘛。

Eric

我从TI官网上下载了一个关于Flash API的例程,编号为:sprc193,  http://www.ti.com.cn/sitesearch/cn/docs/universalsearch.tsp?searchTerm=sprc193&Submit=&linkId=1

我把程序编译后烧写到了我的装置中,在运行中程序执行到

VersionHex = Flash_APIVersionHex();
if(VersionHex != 0x0300)
{
// Unexpected API version
// Make a decision based on this info. asm(" ESTOP0");
}

就出现了问题,我看到VersionHex 变量读到的函数Flash_APIVersionHex()的返回值为0写0x0302,因此程序停到asm(" ESTOP0");了。

我想请问一下各位老师和同仁,是不是需要把判断条件改为if(VersionHex != 0x0302) ?还是库函数的版本有问题???谢谢!

master man:

回复 xiansheng qian:

你好,我现在也遇到这样的问题了,在API烧录程序中Example_CallFlashAPI函数中设置断点不管用,运行到断点时程序不停止,你是怎么理解的呢?

我从TI官网上下载了一个关于Flash API的例程,编号为:sprc193,  http://www.ti.com.cn/sitesearch/cn/docs/universalsearch.tsp?searchTerm=sprc193&Submit=&linkId=1

我把程序编译后烧写到了我的装置中,在运行中程序执行到

VersionHex = Flash_APIVersionHex();
if(VersionHex != 0x0300)
{
// Unexpected API version
// Make a decision based on this info. asm(" ESTOP0");
}

就出现了问题,我看到VersionHex 变量读到的函数Flash_APIVersionHex()的返回值为0写0x0302,因此程序停到asm(" ESTOP0");了。

我想请问一下各位老师和同仁,是不是需要把判断条件改为if(VersionHex != 0x0302) ?还是库函数的版本有问题???谢谢!

xiansheng qian:

回复 master man:

您好! 我知道为什么了,因为这部分程序是load到ram中运行的程序,所以如果您直接把断点打在“被load在ram中运行的函数”中,程序不能停在断点处。

你需要将断点设在非“被load在ram中运行的函数”,这样能停下来,之后单步跟。

至于原因我也不太清楚,我只发现了现象。

顺便提醒,Example_CallFlashAPI中擦写部分的操作很多,最好是先屏掉之后册那部分开放哪部分。我第一次全速运行把芯片烧坏了。

我从TI官网上下载了一个关于Flash API的例程,编号为:sprc193,  http://www.ti.com.cn/sitesearch/cn/docs/universalsearch.tsp?searchTerm=sprc193&Submit=&linkId=1

我把程序编译后烧写到了我的装置中,在运行中程序执行到

VersionHex = Flash_APIVersionHex();
if(VersionHex != 0x0300)
{
// Unexpected API version
// Make a decision based on this info. asm(" ESTOP0");
}

就出现了问题,我看到VersionHex 变量读到的函数Flash_APIVersionHex()的返回值为0写0x0302,因此程序停到asm(" ESTOP0");了。

我想请问一下各位老师和同仁,是不是需要把判断条件改为if(VersionHex != 0x0302) ?还是库函数的版本有问题???谢谢!

master man:

回复 xiansheng qian:

多谢你的提示

赞(0)
未经允许不得转载:TI中文支持网 » 关于Flash API例程的问题
分享到: 更多 (0)