本人应用TI提供的2803x_FlashAPI_BootROMSymbols.lib编写了一个bootloader,是用在TMS320F28033芯片上的。通过CCS连接调试板在线仿真运行时,bootlader能够将程序通过can烧写进flash中,但是当我将bootloader程序烧进flash后独立运行时,can通信都正常,就是flash API 函数运行不正常,没有将程序烧写进flash中,具体就是Flash_Erase()函数不能正确的擦flash扇区,返回的错误是STATUS_FAIL_PRECONDITION,但是经验证Flash并没有坏区。希望有人能够帮我解决这个问题。
10#:
有两点建议可检查:
1. FlashAPI相关函数是否copy到RAM上运行?
2. 中断是否关闭?
本人应用TI提供的2803x_FlashAPI_BootROMSymbols.lib编写了一个bootloader,是用在TMS320F28033芯片上的。通过CCS连接调试板在线仿真运行时,bootlader能够将程序通过can烧写进flash中,但是当我将bootloader程序烧进flash后独立运行时,can通信都正常,就是flash API 函数运行不正常,没有将程序烧写进flash中,具体就是Flash_Erase()函数不能正确的擦flash扇区,返回的错误是STATUS_FAIL_PRECONDITION,但是经验证Flash并没有坏区。希望有人能够帮我解决这个问题。
gang li2:
回复 10#:
我在初始化的时候已经将所有中断关闭,所以第二点不太可能;至于第一点,根据TI的那个flash API的文档,还有例程,28033的ROM中已经固化了flash API library, 不需要再将函数copy到RAM上运行,只需将TI提供的库文件添加到工程当中就可以, 当然还有那些h文件。文档中也只是只言片语,就是不知道是不是还要有其它的设置。而且我调用读API版本的函数Flash_APIVersionHex()都可以正常读出版本的。请高手们多多提些建议啊。
本人应用TI提供的2803x_FlashAPI_BootROMSymbols.lib编写了一个bootloader,是用在TMS320F28033芯片上的。通过CCS连接调试板在线仿真运行时,bootlader能够将程序通过can烧写进flash中,但是当我将bootloader程序烧进flash后独立运行时,can通信都正常,就是flash API 函数运行不正常,没有将程序烧写进flash中,具体就是Flash_Erase()函数不能正确的擦flash扇区,返回的错误是STATUS_FAIL_PRECONDITION,但是经验证Flash并没有坏区。希望有人能够帮我解决这个问题。
gang li2:
回复 gang li2:
请TI工程师给我答复,谢谢,我很着急。另外,ROM中固化的Flash API函数需要被copy到RAM中运行吗?如果需要,将怎样实现呢?如果不需要,那么Flash API 函数在ROM中和在RAM中运行速度不一样,是否会导致对 flash的擦写错误呢?
本人应用TI提供的2803x_FlashAPI_BootROMSymbols.lib编写了一个bootloader,是用在TMS320F28033芯片上的。通过CCS连接调试板在线仿真运行时,bootlader能够将程序通过can烧写进flash中,但是当我将bootloader程序烧进flash后独立运行时,can通信都正常,就是flash API 函数运行不正常,没有将程序烧写进flash中,具体就是Flash_Erase()函数不能正确的擦flash扇区,返回的错误是STATUS_FAIL_PRECONDITION,但是经验证Flash并没有坏区。希望有人能够帮我解决这个问题。
gang li2:
求解答。PICCOLO B 版本的FLASH API真的不好用,还不如其它版本的直接copy到RAM中,不会出错。
本人应用TI提供的2803x_FlashAPI_BootROMSymbols.lib编写了一个bootloader,是用在TMS320F28033芯片上的。通过CCS连接调试板在线仿真运行时,bootlader能够将程序通过can烧写进flash中,但是当我将bootloader程序烧进flash后独立运行时,can通信都正常,就是flash API 函数运行不正常,没有将程序烧写进flash中,具体就是Flash_Erase()函数不能正确的擦flash扇区,返回的错误是STATUS_FAIL_PRECONDITION,但是经验证Flash并没有坏区。希望有人能够帮我解决这个问题。
Johnson Chen1:
楼主你好!
之前有碰到过跟你一样的问题,原因是有部分指令没有加 EALLOW,楼主可以从这个方向去查找一下,或者可以将你的初始化部分贴上来看一下。
本人应用TI提供的2803x_FlashAPI_BootROMSymbols.lib编写了一个bootloader,是用在TMS320F28033芯片上的。通过CCS连接调试板在线仿真运行时,bootlader能够将程序通过can烧写进flash中,但是当我将bootloader程序烧进flash后独立运行时,can通信都正常,就是flash API 函数运行不正常,没有将程序烧写进flash中,具体就是Flash_Erase()函数不能正确的擦flash扇区,返回的错误是STATUS_FAIL_PRECONDITION,但是经验证Flash并没有坏区。希望有人能够帮我解决这个问题。
gang li2:
回复 Johnson Chen1:
真的太感谢了,就是这个原因。我对Flash_CPUScaleFactor 和 Flash_CallbackPtr两个变量初始化时,没有加EALLOW. 不过以前在28016上应用时我也没加, 当时也没出现什么问题,所以从来就没在意这件事.
本人应用TI提供的2803x_FlashAPI_BootROMSymbols.lib编写了一个bootloader,是用在TMS320F28033芯片上的。通过CCS连接调试板在线仿真运行时,bootlader能够将程序通过can烧写进flash中,但是当我将bootloader程序烧进flash后独立运行时,can通信都正常,就是flash API 函数运行不正常,没有将程序烧写进flash中,具体就是Flash_Erase()函数不能正确的擦flash扇区,返回的错误是STATUS_FAIL_PRECONDITION,但是经验证Flash并没有坏区。希望有人能够帮我解决这个问题。
user3900194:
回复 gang li2:
您好,我想向您请教下以下,在线烧写下发程序时,每次都需要对地址和数据都进行解析吗,我现在遇到一个问题,生产的二进制文件格式的不同需要进行的解析也不同,您是用的那种方式生产的二进制文件呢?是ascii格式?
本人应用TI提供的2803x_FlashAPI_BootROMSymbols.lib编写了一个bootloader,是用在TMS320F28033芯片上的。通过CCS连接调试板在线仿真运行时,bootlader能够将程序通过can烧写进flash中,但是当我将bootloader程序烧进flash后独立运行时,can通信都正常,就是flash API 函数运行不正常,没有将程序烧写进flash中,具体就是Flash_Erase()函数不能正确的擦flash扇区,返回的错误是STATUS_FAIL_PRECONDITION,但是经验证Flash并没有坏区。希望有人能够帮我解决这个问题。
user3900194:
回复 Johnson Chen1:
在用can进行在线升级时,需要对out生产的hex进行解析下发数据,而hex2000 转化工具支持多种输出格式,通常是用那种方式比较简单,容易实现在线烧写的解析,能够给大体提供一个思路呢,谢谢!