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.
如题:
我的烧录方法是:
将ti官方提供的flash_api code工程依据自己的需求做合适的修改,编译并转换成16进制的机器码(这个工程会有一个c _init00地址)。
然后在应用程序cmd文件中定义相关的flash段,将16进制的机器码以一个数组的形式存放到分配的段里。
上位机是sdflash,sdflash向dsp发送烧录命令后,应用程序将16进制的机器码从flash段复制到ram中,然后跳转到flash_api code工程的c _init00地址处开始运行。
flash_api code会与上位机握手并传输数据,同时根据上位机的命令执行擦除、编程、校验操作。
目前我的问题是:烧录开始以后 dsp跳转到flash_api code中运行, 但执行擦除操作时,返回值是24(0x18),根据手册 返回值24表示
STATUS_FAIL_PRECOMPACT
-------------------------------------
Erase operation failed because the pre-
compaction portion failed. The pre-compaction is
applied to all sectors on the device. The
FLASH_ST structure will return a fail address
corresponding to the first sector fails this step.
奇怪的是我用jtag仿真器将flash_api code下载到dsp中单步调试,用串口调试工具发送握手报文和擦除指令时,flash_api code正确调用了擦除函数,且返回值也是正确的0,一旦脱离调试环境,用sdflash软件启动烧录过程,则返回值就成了24,报erase fail
请问这个错误是什么原因?应该如何解决? 期待TI的专家能有解答。
下面这个帖子和我的情况比较类似,似乎也还没有解决。
请问楼主解决了吗?我现在在做28335 Flash 远程升级,想通过远程的网络摄像机串口升级28335 的Flash程序,请问如何做呢?用你们说的Flash api可以么?
我已经搞定了。
你想远程升级,只要上位机与28335的串口之间有通道,理论上都是可行的,但是其他的那些方法都有个缺点,需要修改28335的启动方式
这个需要通过修改dsp相关管脚的电平重新上电,这种要求是远程升级做不到的,实际上就是不能远程升级。
我的这种方法在烧录之前不需要对dsp做任何处理,只要把相关烧录接口集成到应用程序即可。非常适合远程升级或者现场升级----均不需要对待升级机器做额外操作。
对对,我想做的也是你这种方法,不更改28335的启动模式;
请问你工程具体的逻辑是什么样的呢? 还有你的CMD文件时如何分配的呢?
比如用于烧写的程序烧写在FLashA中,运行时API函数调到RAM里面运行; 正常的用户程序烧写在FlashC中,这部分是实际的项目代码,程序一开始先执行烧写,烧写完后请问如何能跳转至FlashC里面运行新程序呢?
我QQ63281485,想更你沟通一下,顺便请看一下我这个帖子
http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/t/78346.aspx
您好!
针对28335在线升级的事,网上这么多人都急切想知道,还是麻烦兄台能写个精华的文章放在论坛里吧。这样大家
都能受益。我也很想知道,麻烦你能告诉我,我的QQ:897299644
我来说两句吧,以前干过类似的事:
#pragma CODE_SECTION(Updata_test, "Code_Updata"); //Flash_H
void Updata_test()
{
//这里做了个很有意思的事:当前程序的内容是空的,带仿真器运行时如果你在watch窗口里将Code_Updata_en
//的值改为1,你会发现电路板上的LED开始闪起来来了,神奇吧!
//这是怎么实现的呢?~~~~偶在User_FlashAPI()里将一个数组a[]写入到了自定义的"Code_Updata"段,
//这个数组是 GpioDatB(RUN)=!GpioDatB(RUN) 的源码!这样,程序再次调用后就不再是运行空函数了...
//怎么得到一段代码的源码呢?ccs安装目录下有一个工具"hex2000",在dos下执行下述命令即可得到:
//hex2000 -memwidth 16 -romwidth 16 -a F28035test.out -map F28035test.map -o aa.txt
//不过事先需要将HEX2000.exe以及程序生成的.out文件.map文件放在一个独立的文件夹中,用dos命令进
//入该文件夹的目录,然后执行...
//可以想象,如果数组a[]是通过通讯上传的,而我的源码是一个程序更新包,那不就能实现在线升级了吗?
}
需要注意的是 flash_api相关函数不能被中断,所以运行时先关闭中断。。。。
快要两年了,兄台,实在不好意思把你帖子挖出来了,小弟最近在研究 F28335 远程升级问题,我自己做了一块板子,与F28335的SCI-A通讯 ,另外一头与上位机
以太网通讯,想要自己把hex文件通讯烧写进去, 不知道兄台的远程升级是怎么实现的?或者是一个怎样的实现过程?多谢了!
QQ:530322882
简单说下我的方法:
Erase与Flash的函数需要定义在RAM区
需要升级的Hex文件通过网络下载到Flash的空白区域后
禁止中断,擦除-->写入-->验证-->重启