Board logo

标题: 擦写Flash在BDM模式下操作正常,到NS下就飞了。 [打印本页]

作者: rdboy    时间: 2010-4-22 16:53     标题: 擦写Flash在BDM模式下操作正常,到NS下就飞了。

本帖最后由 rdboy 于 2010-4-22 17:41 编辑

我的擦除和编程flash程序在BDM环境下是正常的,但是让板子Reset后在正常模式运行时就不正常了。请问高手是不是在normal mode下不能对flash进行操作?谢
作者: rdboy    时间: 2010-4-22 17:27

本帖最后由 rdboy 于 2010-4-23 08:27 编辑

请版主和高位大侠指点。急,在线等。
作者: strongchen    时间: 2010-4-23 09:36

FLASH在normal mode下肯定也是可以操作的。要注意的是有些寄存器在BDM模式下可以多次写入,但是在normal mode下只能单次写入。仔细检查一下问题到底出在哪里。
作者: rdboy    时间: 2010-4-25 16:16

ok,THANKS for your help.
作者: rdboy    时间: 2010-4-25 18:31

本帖最后由 rdboy 于 2010-4-26 09:10 编辑

Hi,Sir
     Thanks for your help.
   
     在正常模式下,我必须用下面的代码,但是不能成功写flash(重新连上BDM,查看对应地址的数据不对).如果我用机器码:PrgOfRam:dc.b $1C,$01,$06,$80,$1F,$01,$06,$80,$FB,$3D,程序会crash。困惑啊。
bset FSTAT,#mFSTAT_CCIF
Wait_CCIF:
brclr FSTAT,#mFSTAT_CCIF,Wait_CCIF;if this bit is 0x0,wait here. Wait a while for CCIF to be set

     在BDM下,用机器码PrgOfRam:dc.b $1C,$01,$06,$80,$1F,$01,$06,$80,$FB,$3D,能够成功写Flash。

    请指点,多谢。急。




LaunchFlashCommand: equ *

  leax LaunchComBuff,pcr

  ;check FCLKDIV&0x80

  brset FCLKDIV,#mFCLKDIV_FDIVLD,Wait_CCIF0 ;if set ,jump// if((temp & 0x80) == 0x80)
                                      ;else,run here
  ldaa #FCLK_DIV_4M                                      
  staa FCLKDIV   ;FCLKDIV = FCLK_DIV;            
  
  oraa  #$80
  cmpa FCLKDIV;check FCLKDIV is FCLK_DIV | 0x80 // if(FCLKDIV != (FCLK_DIV | 0x80))//Check to make sure value is written.
  jmp ret_Launch;if not equ,return
  

  
Wait_CCIF0:
  brclr FSTAT,#mFSTAT_CCIF,Wait_CCIF0;if this bit is 0x0,wait here. Wait a while for CCIF to be set

  brclr FSTAT,#mFSTAT_CCIF,ret_Launch;
  
  ;BDM,must use these 2 lines. or CAN not write into flash.
  ;ldab #48
  ;stab FSTAT;Use store instruction to clear ACCERR, FPVIOL.
  
  ;NS,must use these 2 lines.or crash.
  bset FSTAT,#mFSTAT_ACCERR
  bset FSTAT,#mFSTAT_FPVIOL

  ;**********SET UP THE FTM COMMAND AND PARAMETERS***********
  
  bclr FCCOBIX,#mFCCOBIX_CCOBIX0
  bclr FCCOBIX,#mFCCOBIX_CCOBIX1
  bclr FCCOBIX,#mFCCOBIX_CCOBIX2
  ;clra
  ldab 1,x
  stab FCCOBHI
  ;inca
  ldab 2,x
  stab FCCOBLO
  ldab 0,x
  beq Con_Oper;if param == 0,return

  ldaa #$03  
  ;jsr Delay32nop,pcr
Write_CCOB:
  nop
  nop
  inc FCCOBIX
  ldy a,x
  sty FCCOB;Write next word parameter to CCOB1 buffer.
  inca
  inca  
  decb     ;because register store param number
  beq Con_Oper;if b is 0,return  
  bra Write_CCOB

Con_Oper:
  ;BMD,use the following code,write ok.
  jmp PrgOfRam,pcr
  
  ;NS,use the following code,CAN communication is okay,but not write ok.
  
  ;bset FSTAT,#mFSTAT_CCIF
;Wait_CCIF:
; brclr FSTAT,#mFSTAT_CCIF,Wait_CCIF;if this bit is 0x0,wait here. Wait a while for CCIF to be set


ret_Launch:
  ;puly
  ;pulx
  ;puld
  rts
;LaunchFlashCommand
;*************************************************************************************************************
作者: strongchen    时间: 2010-4-26 09:33

对FLASH进行操作的代码,应该在RAM中执行。你是如何将代码载入RAM的?
作者: rdboy    时间: 2010-4-27 08:28

ok,搞定了。多谢。
作者: mcuisp    时间: 2010-5-7 18:43

呵呵,难道是SRAM代码加载的问题?




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0