共2条
1/1 1 跳转至页
F1121,FLASH 用F1121对信息FLASH写出错

问
程序如下:
DINT
MOV #0A500H,&FCTL3
MOV #0A502H,&FCTL1
MOV #0,&1002H ;擦除FLASH
WAIT_ BIT #01H,&FCTL3
JNZ WAIT_
MOV #0A540H,&FCTL1
RAM2FLASH BIT #BUSY,&FCTL3 ;将RAM中的数据COPY至FLASH
JNZ RAM2FLASH
CMP #64,R10
JZ R2F_OVER ;COPY完了,退出COPY
MOV R11,0(R9) ;R11为RAM地址,R9为FLASH地址
DECD R11 ;COPY下一个字
DECD R9
INC R10
JMP RAM2FLASH
R2F_OVER MOV #0A510H,&FCTL3 ;写数据完毕
MOV #0A500H,&FCTL1
EINT
上面的程序有时对FLASH写不会出错,有时候会不正确的写入,有时候干脆就没有写(所有的数据为FF)。
对FLASH操作的时钟速度应设定为多少?开始我以为是时钟不对,但通过FCTL2设了几种时钟,仍工作不正常。 答 1: 设一下时钟,257-476K之间。另外注意一下供电,不能低于2.7V。 答 2: 将时钟设成了370K。问题依旧。电源也是是没有问题的。不知道是什么原因,哪位大侠给指点一下。程序我修改了一下,如下:
;将COPY_ORIG地址开头128字节COPY入信息FLASH
DINT
MOV #0A500H,&FCTL3
MOV #0A502H,&FCTL1
MOV #0,0(R13) ;将信息FLASH擦除,R13指向信息FLASH
WAIT_R_F1 BIT #01H,&FCTL3 ;测试BUSY位
JNZ WAIT_R_F1
CALL #DEL1MS ;延时1MS
MOV #0A540H,&FCTL1 ;写FLASH
MOV #COPY_ORIG,R9 ;RAM的首地址
MOV R13,R10
DECD R10 ;RAM的首地址
MOV #64,R11 ;共有64个字要从RAM中COPY至INFO FLASH
WAIT_R_F2 BIT #BUSY,&FCTL3 ;TEST BUSY
JNZ WAIT_R_F2
MOV R9+,0(R10) ;RAM COPY TO FLASH
INCD R10
DEC R11
JNZ WAIT_R_F2 ;RAM TO FLASH NOT OVER
MOV #0A510H,&FCTL3
MOV #0A500H,&FCTL1
EINT 答 3: 大家给看看为什么老是会出错。FLASH经常会写出错 答 4: 没有对FCTL2的设置。所有时序严格按照例程的。
擦写过程中不要设断点不要单步运行,不要开中断。
flash很可靠,我们还没发现过给定条件下擦写失败的。 答 5: FCTL2在主程序初始化时有设置,频率为300多K。我一开始是完全按例程写的程序,后来发现相当的不可靠。于是在擦除之后就检测BUSY位。如果BUSY位为1就等待。如果BUSY为0就进行写FLASH。这样做了之后要比原先可靠一些。另外,在对FLASH操作时是没有设断点的。断点设在FLASH擦写完成之后,运行到断点时检查发现FLASH值不对。不知为什么会出错。 ??????????
DINT
MOV #0A500H,&FCTL3
MOV #0A502H,&FCTL1
MOV #0,&1002H ;擦除FLASH
WAIT_ BIT #01H,&FCTL3
JNZ WAIT_
MOV #0A540H,&FCTL1
RAM2FLASH BIT #BUSY,&FCTL3 ;将RAM中的数据COPY至FLASH
JNZ RAM2FLASH
CMP #64,R10
JZ R2F_OVER ;COPY完了,退出COPY
MOV R11,0(R9) ;R11为RAM地址,R9为FLASH地址
DECD R11 ;COPY下一个字
DECD R9
INC R10
JMP RAM2FLASH
R2F_OVER MOV #0A510H,&FCTL3 ;写数据完毕
MOV #0A500H,&FCTL1
EINT
上面的程序有时对FLASH写不会出错,有时候会不正确的写入,有时候干脆就没有写(所有的数据为FF)。
对FLASH操作的时钟速度应设定为多少?开始我以为是时钟不对,但通过FCTL2设了几种时钟,仍工作不正常。 答 1: 设一下时钟,257-476K之间。另外注意一下供电,不能低于2.7V。 答 2: 将时钟设成了370K。问题依旧。电源也是是没有问题的。不知道是什么原因,哪位大侠给指点一下。程序我修改了一下,如下:
;将COPY_ORIG地址开头128字节COPY入信息FLASH
DINT
MOV #0A500H,&FCTL3
MOV #0A502H,&FCTL1
MOV #0,0(R13) ;将信息FLASH擦除,R13指向信息FLASH
WAIT_R_F1 BIT #01H,&FCTL3 ;测试BUSY位
JNZ WAIT_R_F1
CALL #DEL1MS ;延时1MS
MOV #0A540H,&FCTL1 ;写FLASH
MOV #COPY_ORIG,R9 ;RAM的首地址
MOV R13,R10
DECD R10 ;RAM的首地址
MOV #64,R11 ;共有64个字要从RAM中COPY至INFO FLASH
WAIT_R_F2 BIT #BUSY,&FCTL3 ;TEST BUSY
JNZ WAIT_R_F2
MOV R9+,0(R10) ;RAM COPY TO FLASH
INCD R10
DEC R11
JNZ WAIT_R_F2 ;RAM TO FLASH NOT OVER
MOV #0A510H,&FCTL3
MOV #0A500H,&FCTL1
EINT 答 3: 大家给看看为什么老是会出错。FLASH经常会写出错 答 4: 没有对FCTL2的设置。所有时序严格按照例程的。
擦写过程中不要设断点不要单步运行,不要开中断。
flash很可靠,我们还没发现过给定条件下擦写失败的。 答 5: FCTL2在主程序初始化时有设置,频率为300多K。我一开始是完全按例程写的程序,后来发现相当的不可靠。于是在擦除之后就检测BUSY位。如果BUSY位为1就等待。如果BUSY为0就进行写FLASH。这样做了之后要比原先可靠一些。另外,在对FLASH操作时是没有设断点的。断点设在FLASH擦写完成之后,运行到断点时检查发现FLASH值不对。不知为什么会出错。 ??????????
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 |