[ZLG-ARM] [已解决]关于IAP的一个奇怪问题,有人遇到吗?或分析一下

[复制链接]
 楼主| eyesonyou 发表于 2009-2-6 14:44 | 显示全部楼层 |阅读模式
selSector-&gtEraseSector-&gtSelSector-&gtRamToFlash的时候在擦除的时候"卡"住了...执行擦除函数里面(IAP)出问题了 ,(程序不方便JTAG调试)函数不能返回。直接SelSector-&gtRamToFlash没有问题。但这样只能就只能第一次写的数据对了。谢谢
 楼主| eyesonyou 发表于 2009-2-6 15:45 | 显示全部楼层

解释一下

就是擦除函数的这句:<br />&nbsp;&nbsp;&nbsp;&nbsp;(*void(*)())IAP_ENTER_ADDR(paramin,paramout)<br />SelSector函数和RamtoFlash的都没有问题。<br />在什么情况下擦除不了?程序不大&nbsp;256K的FLASH,擦(13)高扇区。<br /><br />以前IAP升级的时候也没有发现问题。现在是想写些配置信息进去。但擦除不了
gooofy 发表于 2009-2-7 15:12 | 显示全部楼层

isp

用isp能擦除这个扇区么?
gooofy 发表于 2009-2-7 15:17 | 显示全部楼层

iap

还有,“执行擦除函数里面(IAP)出问题了”是出什么问题<br />没有擦除动作还是死机?<br />可不可以用串口把paramout的结果发送出来看看??
heqiaojun 发表于 2009-2-7 18:49 | 显示全部楼层

是不是编译器里面没有设置好

是不是用ADS的,在编译器里面的language&nbsp;Setting&nbsp;里面,关于&nbsp;C&nbsp;/C++&nbsp;complier&nbsp;的ATPCS&nbsp;中,&nbsp;要勾选&nbsp;ARM/THUMB&nbsp;interwork&nbsp;才能让IAP&nbsp;指令正常工作,&nbsp;否则会死机&nbsp;
 楼主| eyesonyou 发表于 2009-2-8 01:44 | 显示全部楼层

Re

1.&nbsp;烧代码是用ISP全擦的,所以应该是可以擦的;<br />2.关键 &nbsp;(*void(*)())IAP_ENTER_ADDR(paramin,paramout) 没有返回了啊,死机了? 为什么擦除函数里的这句执行IAP会死?而选择扇区与写扇区没有问题?<br />3.采用的是Keil. 如果死的话执行这个之前,SelSector函数也有相同语句啊<br /><br />谢谢各位的关注,谢谢.<br /><br />请高手或周立功的工程师继续提供可能的问题存在点.谢谢!<br /><br />附:以前做过IAP 是没有问题的.一切正常的.奇怪
 楼主| eyesonyou 发表于 2009-2-12 22:54 | 显示全部楼层

Re

没人遇到过吗?上面几位兄弟提到的问题仔细检查过了&nbsp;&nbsp;不存在。奇怪的是为什么单单擦除的时候死机
rollin1116 发表于 2009-2-19 11:06 | 显示全部楼层

关于IAP的一个奇怪问题,有人遇到吗?或分析一下

我也可能存在同样的问题,我用的是LPC2294HBD144/00,也可能在执行IAP的时候会死机,现在也不知道怎样解决,你的问题解决了吗?交流一下
bin8 发表于 2009-2-19 19:32 | 显示全部楼层

我以前也遇到这个问题,后来不知道怎么解决了,晕

我以前也遇到这个问题,后来不知道怎么解决了,晕
wangyeah 发表于 2009-2-26 11:05 | 显示全部楼层

iap一定有问题

我用过2292的iap,也发生了iap保存的数据丢失的情况。后来我写了一个程序测试,流程是这样的:上电后先将iap中的数据通过窜口发出了,在写入一个新的参数,等待几秒钟,下电。这样反复测试,成功率90%,总有1,2次会有问题,读出全是FF。各种方法都测试过(例如:在个个函数间加延时,可以提高可靠新),但是不能100%可靠。NXP的片子有很多的BUG,不然不会给zlg代理的。
ZLG_Dengz 发表于 2009-2-28 10:27 | 显示全部楼层

RE

&nbsp;&nbsp;&nbsp;&nbsp;出于安全性的考虑,在执行Flash编程/擦除操作命令之前必须执行“Unlock(解锁)”命令。其它命令不需要解锁命令。<br />&nbsp;&nbsp;&nbsp;&nbsp;要使自动波特率正确工作,晶振频率应当大于等于10MHz。对于LPC2100/LPC2200系列ARM的Boot代码没有使用片内PLL,而且外部晶振的频率必须大于10MHz;而对于LPC2300系列ARM,Boot将片内RC振荡器作为PLL的输入时钟源,并产生14.748MHz系统时钟,对外部时钟无要求.
masonwen 发表于 2009-3-3 22:36 | 显示全部楼层

中断问题

我之前也遇过如此问题,是中断没有设置好。你检查一下中断,擦除与写都要关闭中断。
 楼主| eyesonyou 发表于 2009-3-12 11:55 | 显示全部楼层

:)

好久没上来.12楼说的对.其实这个问题考虑过.<br />我关中断用的是<br />__inline&nbsp;void&nbsp;disable_IRQ<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;__asm<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MRS&nbsp;tmp,CPSR;//读CPSR的值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....0x80....<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.......<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />问题在于此:跟踪调试发现,执行此句之后,操作根本没有改写CPSR中对应的位.仿真应该也可以看到的啊<br />而我的程序中定时器开着的,在擦的过程中(时间相对较长),中断,导致程序出错.<br />MRS&nbsp;tmp,CPSR;//读CPSR的值&nbsp;<br />这个好多书上都是这么写&nbsp;也没注意...有问题么?<br />11楼的回答好像外交部的发言人,哈
stephenyang 发表于 2009-3-21 19:28 | 显示全部楼层
reeper 发表于 2009-4-3 10:16 | 显示全部楼层

路过,帮顶一下

  
胡刚 发表于 2009-4-6 16:29 | 显示全部楼层

学习下

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

22

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

7

主题

22

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部