首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

擦写Flash在BDM模式下操作正常,到NS下就飞了。

擦写Flash在BDM模式下操作正常,到NS下就飞了。

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

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

请版主和高位大侠指点。急,在线等。
FLASH在normal mode下肯定也是可以操作的。要注意的是有些寄存器在BDM模式下可以多次写入,但是在normal mode下只能单次写入。仔细检查一下问题到底出在哪里。
海纳百川  有容乃大
ok,THANKS for your help.
本帖最后由 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
;*************************************************************************************************************
对FLASH进行操作的代码,应该在RAM中执行。你是如何将代码载入RAM的?
海纳百川  有容乃大
ok,搞定了。多谢。
呵呵,难道是SRAM代码加载的问题?
www.mcuisp.com
EP868手持烧录器,现场升级/生产线量产
支持FSL HCS08/RS08全系列
返回列表