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.

关于Flash API例程的问题

Other Parts Discussed in Thread: SPRC193, CONTROLSUITE

我从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) ?还是库函数的版本有问题???谢谢!

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

    请问如何解决?

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

  • xiansheng,

    if(VersionHex != 0x0302)  即可。

    应该是库版本升级成3.02,但是代码没改过来。

    Eric

    • 对!谢谢!

    还想问您一下,我做了一个实验,为我以后做在线升级做铺垫。 我在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 这个函数中。我不知道怎么回事……

  • xiansheng,

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

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

    Eric

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

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

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

  • xiansheng,

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

    Eric

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

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

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

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

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

  • 你好,我刚刚接触flash在线烧写这块,我将例程中的Example_CallFlashAPI基本拷贝到自己的程序中,只用的擦除功能,发现程序擦除不了,被擦除的空间的全部为0,而不是1,你是否遇到过这样的情况呢?还有Example_CallFlashAPI定义的固定flash空间和main固定的flash空间需要特定的分开吗,可以在一个固定的区间内?期待你的答复,谢谢

  • 你好,api函数只能erase、program、vertify等,没有读的功能啊

  • 请问,出现以上情况,就只能换芯片吗,还有其他补救的方法吗?