6726|18

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

LPC921的ISP问题 [复制链接]

刚出厂的芯片,可以正常进入ISP并进行程序的下载。程序下载后,可以通过间隔帧检测的办法反复进入ISP,并进行程序的下载。现在如果修改程序(只是增加或减少一条调试信息),下载到921后,重新上电,现象是芯片内部的程序并没有正常跑(程序里有喂狗,通过检测管脚电压可以知道程序是否在执行。),并且下载新程序后,LPC921就再也不能进入ISP了。而如果将这个新程序下载入出厂芯片里(未灌程序),程序下载后,照样可以通过间隔帧检测的办法反复进入ISP,并进行程序的下载。

这个问题困扰了几天了,已经没什么思路,想请教下大家,能否提供一两条思路来查呢。

最新回复

是这个原因,已解决。  详情 回复 发表于 2010-5-5 08:52
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1.ROM溢出
2.未定位代码,越过ISP扇区
3.确认代码启动地址
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
照你上面的描述,问题应该不是出在程序上,也就是改动了调试信息是没影响的,问题是出在芯片上,新旧芯片的区别。是不是你ISP的时候,循环ISP,循环了好几万次,呵呵,FLASH坏了。。。。

楼主你可以这样测试,试试,新的芯片,下载未改动的程序,成功跑了之后,又下载同样的程序,假如不跑了,那就肯定是芯片的问题,看看编程前后,芯片的配置上的区别在哪里。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 peasant_lee 的回复:
照你上面的描述,问题应该不是出在程序上,也就是改动了调试信息是没影响的,问题是出在芯片上,新旧芯片的区别。是不是你ISP的时候,循环ISP,循环了好几万次,呵呵,FLASH坏了。。。。

楼主你可以这样测试,试试,新的芯片,下载未改动的程序,成功跑了之后,又下载同样的程序,假如不跑了,那就肯定是芯片的问题,看看编程前后,芯片的配置上的区别在哪里。

换个新的,可以下载程序A,并且用ISP下载同样的程序A一切正常。如果在有程序A的基础上,用ISP下载程序B,会导致程序跑不起来,ISP也无法再次进入的问题。
程序A和程序B的差别仅是一个调试信息。
颠倒测试的顺序,即如果先用新的芯片下载程序B,现象也是一样的。所以程序的问题还是比较小的。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 1 楼 duojinian 的回复:
1.ROM溢出
2.未定位代码,越过ISP扇区
3.确认代码启动地址

您好,
1。我不知道如何去查ROM溢出,但从编译后的.M51文件来看,堆栈空间没有溢出。
2。不仅无法进ISP,程序也不是正常在跑。
3。这个我需要确认下。
谢谢。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
哦,看你上面的回复,那应该是改动了代码造成的,看看你增加了调试信息和未增加之前的code和data的大小差别。在很多情况下,出厂(发布)的代码是去掉所有的调试信息的,为了节省空间。你现在加入一条调试代码,增加的code并不是单单这行代码,而是是启动了之前的调试段的所有代码,比如调试函数又重新编译链接进去了。那么增加的代码应该不少,至少几百字节。假如你的mcu现在code资源本来紧缺,那么,问题就出现了。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 peasant_lee 的回复:
哦,看你上面的回复,那应该是改动了代码造成的,看看你增加了调试信息和未增加之前的code和data的大小差别。在很多情况下,出厂(发布)的代码是去掉所有的调试信息的,为了节省空间。你现在加入一条调试代码,增加的code并不是单单这行代码,而是是启动了之前的调试段的所有代码,比如调试函数又重新编译链接进去了。那么增加的代码应该不少,至少几百字节。假如你的mcu现在code资源本来紧缺,那么,问题就出……

应该不会是这个问题,我程序的一个主要变量是128字节的一个数组。现在已经将其改成10个字节。问题依旧。。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

8
 
楼主你说的数组是一般变量么?那应该是指ram空间了? 而我指的是代码空间。增加了调试代码,flash rom空间需要更多了。

反正是,编译出来的ram和rom的数据大小是否超出了mcu的ram和rom的实际大小。呵呵
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

9
 
帮你顶
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 peasant_lee 的回复:
楼主你说的数组是一般变量么?那应该是指ram空间了? 而我指的是代码空间。增加了调试代码,flash rom空间需要更多了。

反正是,编译出来的ram和rom的数据大小是否超出了mcu的ram和rom的实际大小。呵呵

你好,我的芯片FLASH是4KB,RAM是256字节。编译完之后,
Program Size: data=46.3 xdata=0 code=1454
代码和数据都小于MCU的最大值喔。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
下面是我编译完之后.M51的DATA MEMORY和CODE MEMORY

  1. TYPE    BASE      LENGTH    RELOCATION   SEGMENT NAME
  2.             -----------------------------------------------------

  3.             * * * * * * *   D A T A   M E M O R Y   * * * * * * *
  4.             REG     0000H     0008H     ABSOLUTE     "REG BANK 0"
  5.             DATA    0008H     000AH     UNIT         ?DT?I2CSLAVE
  6.             DATA    0012H     0005H     UNIT         _DATA_GROUP_
  7.                     0017H     0009H                  *** GAP ***
  8.             BIT     0020H.0   0000H.3   UNIT         ?BI?I2CSLAVE
  9.                     0020H.3   0000H.5                *** GAP ***
  10.             IDATA   0021H     0016H     UNIT         ?ID?I2CSLAVE
  11.             IDATA   0037H     0001H     UNIT         ?STACK

  12.             * * * * * * *   C O D E   M E M O R Y   * * * * * * *
  13.             CODE    0000H     0003H     ABSOLUTE     
  14.             CODE    0003H     001FH     UNIT         ?PR?RCV_ISR?I2CSLAVE
  15.                     0022H     0001H                  *** GAP ***
  16.             CODE    0023H     0003H     ABSOLUTE     
  17.             CODE    0026H     000DH     UNIT         ?PR?CLRWDT?WDT
  18.             CODE    0033H     0003H     ABSOLUTE     
  19.             CODE    0036H     002BH     UNIT         ?C?LIB_CODE
  20.             CODE    0061H     0009H     UNIT         ?PR?_SETBUS?HI2CSLA_C51
  21.                     006AH     0001H                  *** GAP ***
  22.             CODE    006BH     0003H     ABSOLUTE     
  23.             CODE    006EH     0184H     UNIT         ?PR?MAIN?I2CSLAVE
  24.             CODE    01F2H     0155H     UNIT         ?PR?_SET_GPIO?I2CSLAVE
  25.             CODE    0347H     00C0H     UNIT         ?PR?I2C_INT?I2CSLAVE
  26.             CODE    0407H     008CH     UNIT         ?C_C51STARTUP
  27.             CODE    0493H     003DH     UNIT         ?PR?UART_INIT?I2CSLAVE
  28.             CODE    04D0H     003AH     UNIT         ?CO?I2CSLAVE
  29.             CODE    050AH     001EH     UNIT         ?PR?_PRINTSTRING?I2CSLAVE
  30.             CODE    0528H     0018H     UNIT         ?PR?_DELAY?I2CSLAVE
  31.             CODE    0540H     0017H     UNIT         ?PR?_RCVBYTE?HI2CSLA_C51
  32.             CODE    0557H     0016H     UNIT         ?PR?INIT_WDT?WDT
  33.             CODE    056DH     0015H     UNIT         ?PR?ISP_INI?I2CSLAVE
  34.             CODE    0582H     0014H     UNIT         ?PR?_SENDBYTE?HI2CSLA_C51
  35.             CODE    0596H     000EH     UNIT         ?PR?_US_OUTCHAR?I2CSLAVE
  36.             CODE    05A4H     0007H     UNIT         ?C_INITSEG
  37.             CODE    05ABH     0005H     UNIT         ?PR?SEND_ISR?I2CSLAVE
复制代码

应该还是蛮正常的吧。
其中us_outchar里面的代码会产生中断Send_ISR()
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

12
 
那就真的见鬼了,。是不是原理的代码,调试函数是没有编译链接进去?假如真的是这样的话,建议:具体看看调试函数里面,看它怎么实现,是不是开了个很大的buffer,造成堆栈溢出了。。。。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

13
 
重新上电后,程序不跑,ISP也再也进入不了。我曾经怀疑,是否ISP被我刷掉了。我用FLASH MAGIC下载程序,只擦除第0扇区,而921的ISP代码位于第3扇区。我有个疑问,是否应该将第0,1,2全部擦除再下程序?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

14
 
哦,你问到这个,还真的是有问题,因为flash的擦除和编程的最小单位是不一样的,一般来说,擦除是若干个扇区。而编程是一个扇区一个扇区来的。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

15
 
更正,楼主你那应该是nor flash,擦除是以扇区为单位的,编程时以字节地址为单位的。要是nand flash,就是上面那样的。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

16
 
我不知道下载程序时候的细节是如何。
假如一个扇区是03FF,我的程序编译出来是05AE,那0扇区放不下,而1扇区又没擦除。FLASH MAGIC是否会自动去找有05AE大(至少05AE)的可使用的连续地址范围?那如果是这样的话,下载程序将会从2扇区开始,那么就很容易会将位于3扇区0F00的ISP代码给覆盖?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

17
 
既然你的代码放在第0,1,2扇区,那么下载代码(编程)前,肯定要先擦除对应的扇区,再下代码。当然第三扇区就不用擦除了,呵呵。nor falsh在编程前均需要擦除,先擦再写。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 16 楼 areswry 的回复:
我不知道下载程序时候的细节是如何。
假如一个扇区是03FF,我的程序编译出来是05AE,那0扇区放不下,而1扇区又没擦除。FLASH MAGIC是否会自动去找有05AE大(至少05AE)的可使用的连续地址范围?那如果是这样的话,下载程序将会从2扇区开始,那么就很容易会将位于3扇区0F00的ISP代码给覆盖?


你的flash空间是4k,分了0,1,2,3个扇区,每个扇区1k,那么假如你的代码超过了1k,你就肯定需要2个连续的扇区空间。所以,假如你将代码放在0扇区开始,那么你最少擦除0,1两个扇区,再编程。
假如你的代码超过了2k,那么,同理,至少擦除3个扇区再编程,呵呵。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 18 楼 peasant_lee 的回复:
引用 16 楼 areswry 的回复:
我不知道下载程序时候的细节是如何。
假如一个扇区是03FF,我的程序编译出来是05AE,那0扇区放不下,而1扇区又没擦除。FLASH MAGIC是否会自动去找有05AE大(至少05AE)的可使用的连续地址范围?那如果是这样的话,下载程序将会从2扇区开始,那么就很容易会将位于3扇区0F00的ISP代码给覆盖?


你的flash空间是4k,分了0,……


是这个原因,已解决。
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表