打印
[ZLG-ARM]

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

[复制链接]
8407|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eyesonyou|  楼主 | 2009-2-6 14:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
eyesonyou|  楼主 | 2009-2-6 15:45 | 只看该作者

解释一下

就是擦除函数的这句:
    (*void(*)())IAP_ENTER_ADDR(paramin,paramout)
SelSector函数和RamtoFlash的都没有问题。
在什么情况下擦除不了?程序不大 256K的FLASH,擦(13)高扇区。

以前IAP升级的时候也没有发现问题。现在是想写些配置信息进去。但擦除不了

使用特权

评论回复
板凳
gooofy| | 2009-2-7 15:12 | 只看该作者

isp

用isp能擦除这个扇区么?

使用特权

评论回复
地板
gooofy| | 2009-2-7 15:17 | 只看该作者

iap

还有,“执行擦除函数里面(IAP)出问题了”是出什么问题
没有擦除动作还是死机?
可不可以用串口把paramout的结果发送出来看看??

使用特权

评论回复
5
heqiaojun| | 2009-2-7 18:49 | 只看该作者

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

是不是用ADS的,在编译器里面的language Setting 里面,关于 C /C++ complier 的ATPCS 中, 要勾选 ARM/THUMB interwork 才能让IAP 指令正常工作, 否则会死机 

使用特权

评论回复
6
eyesonyou|  楼主 | 2009-2-8 01:44 | 只看该作者

Re

1. 烧代码是用ISP全擦的,所以应该是可以擦的;
2.关键  (*void(*)())IAP_ENTER_ADDR(paramin,paramout) 没有返回了啊,死机了? 为什么擦除函数里的这句执行IAP会死?而选择扇区与写扇区没有问题?
3.采用的是Keil. 如果死的话执行这个之前,SelSector函数也有相同语句啊

谢谢各位的关注,谢谢.

请高手或周立功的工程师继续提供可能的问题存在点.谢谢!

附:以前做过IAP 是没有问题的.一切正常的.奇怪

使用特权

评论回复
7
eyesonyou|  楼主 | 2009-2-12 22:54 | 只看该作者

Re

没人遇到过吗?上面几位兄弟提到的问题仔细检查过了  不存在。奇怪的是为什么单单擦除的时候死机

使用特权

评论回复
8
rollin1116| | 2009-2-19 11:06 | 只看该作者

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

我也可能存在同样的问题,我用的是LPC2294HBD144/00,也可能在执行IAP的时候会死机,现在也不知道怎样解决,你的问题解决了吗?交流一下

使用特权

评论回复
9
bin8| | 2009-2-19 19:32 | 只看该作者

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

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

使用特权

评论回复
10
wangyeah| | 2009-2-26 11:05 | 只看该作者

iap一定有问题

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

使用特权

评论回复
11
ZLG_Dengz| | 2009-2-28 10:27 | 只看该作者

RE

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

使用特权

评论回复
12
masonwen| | 2009-3-3 22:36 | 只看该作者

中断问题

我之前也遇过如此问题,是中断没有设置好。你检查一下中断,擦除与写都要关闭中断。

使用特权

评论回复
13
eyesonyou|  楼主 | 2009-3-12 11:55 | 只看该作者

:)

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

使用特权

评论回复
14
stephenyang| | 2009-3-21 19:28 | 只看该作者

cccc

使用特权

评论回复
15
reeper| | 2009-4-3 10:16 | 只看该作者

路过,帮顶一下

使用特权

评论回复
16
胡刚| | 2009-4-6 16:29 | 只看该作者

学习下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

22

帖子

0

粉丝