gdmgb520 发表于 2012-11-7 09:15:54

MSP430使用BSL方式,读取不到正确代码,但是烧录正常

MSP430F2252使用BSL烧录方式(熔丝未烧断)可以正常烧写程序,但是读取不到正确的代码。请大家帮忙分析可能的原因。

目前的现象:
读取时密码设置为全0xFF,则可以读取,但是读到的内容全为0xff,如果密码设置为中断向量,则显示获取版本号失败!
而且,如果密码设置为中断向量,则擦除也会失败,失败提示“获取BSL版本号失败!”,设为全FF就可以正常烧录。

查数据手册看到BSL版本V2.x的读取版本号也需要密码。看来烧录玩程序后密码并没有更新,是什么原因呢?
难道要烧断熔丝密码才有效吗?

gdmgb520 发表于 2012-11-7 14:37:21

本帖最后由 gdmgb520 于 2012-11-7 14:40 编辑

qiuchen 发表于 2012-11-7 14:00 static/image/common/back.gif
这是密码验证失效,原来的代码被芯片自动清除了。

谢谢 qiuchen

确实发现烧录软件显示烧录成功,但是程序没有运行。
使用FET-Pro430 通过JTAG读取Flash,发现程序已经烧入,中断向量也是正常的,
但是,DCO constant部分被擦除了。
再使用FET-Pro430烧录:
=====================================
Reading Code File ...........................       done
-- Code size = 0x2628 ( 9768 ) bytes
JTAG communication initialization....       OK
Verifying Security Fuse ....................       OK
Reading Retain Data .............       done
Erasing memory ...............................       done
Verifying Retain Data ......................       done
JTAG communication initialization....       OK
All memory Blank checking.............       OK
Flash programming ....................       done
Verifying check sum .........................       OK
DCO constants verification.......       failed
--------------- FAILED !!! -----------------

看来可能是使用BSL编程时把DCO constant部分的数据破坏了,是不是没有办法恢复了?
另外,就算DCO constant被破坏,应该不影响我使用BSL方式读取代码啊?

是不是这样呢?
BSL的运行时依赖于DCO时钟的,DCO constant破坏后DCO无法工作导致BSL也无法工作?貌似有道理!那为什么还可以用BSL方式写入代码呢?

gdmgb520 发表于 2012-11-7 15:45:25

qiuchen 发表于 2012-11-7 15:23 static/image/common/back.gif
其实BSL写入的时候,也会验证密码的。只是验证密码失败擦除了FLASH的数据,而这个过程又和擦除FLASH的效果 ...

谢谢!

问题已解决。
分析原因是DCO constant被破坏!由于使用一个BSL烧录软件烧入时去掉了保护信息段选项,导致DCO constant(0x10f8--0x10ff)内容被清除,该段被清除后MCU无法工作。
该段与BSL的关系:我好像看到过BSL的运行也是基于DCO时钟源的,可能DCO constant 破坏后会导致BSL运行不正常。

解决的过程:
1.使用JTAG从另一块板读出了DCO constant
2.把读出的代码烧入到DCO constant被破坏的板(FET-Pro430烧录选项现在擦除(包含info 菲拉斯)并去掉保护DCO constant)
3.再使用BSL读取数据。

另外:我使用MSP430F2252,BSL密码错误时芯片并没有自动擦除Flash。

gdmgb520 发表于 2012-11-7 10:03:41

自己顶一个

qiuchen 发表于 2012-11-7 14:00:12

这是密码验证失效,原来的代码被芯片自动清除了。

qiuchen 发表于 2012-11-7 09:15:55

本帖最后由 qiuchen 于 2012-11-7 15:24 编辑

其实BSL写入的时候,也会验证密码的。只是验证密码失败擦除了FLASH的数据,而这个过程又和擦除FLASH的效果相同,所以用户一般觉察不到。你说的DCO被擦除的事情,一般的工具在用户不选择的时候,是不会对信息段做操作的;我猜你可能不小心选择了擦除信息段的选项。另外DCO是否和BSL有关我不清楚,个人感觉是不会影响或者影响不大。

qiuchen 发表于 2012-11-7 16:05:01

这比较奇怪,看看你芯片的BSL版本把。现在密码验证失败的时候,是默认全部清除mian flash的。

qiuchen 发表于 2012-11-7 16:05:47

另外你从其他芯片拷贝的DCO信息是有偏差的,偏差一般不大。

gdmgb520 发表于 2012-11-8 11:04:14

qiuchen 发表于 2012-11-7 16:05 static/image/common/back.gif
另外你从其他芯片拷贝的DCO信息是有偏差的,偏差一般不大。

恩,知道的。这个DCO校准值应该是出厂时烧入的。
DCO不准肯定会影响程序运行。
所以,这块板不拿出去安装,只在家里用了。

谢谢

qiuchen 发表于 2012-11-8 11:17:40

{:handshake:}

chenwan67 发表于 2012-11-9 14:41:01

前期调试时先不要加密
软件稳定后 在发布加密

gdmgb520 发表于 2012-11-9 16:57:11

chenwan67 发表于 2012-11-9 14:41 static/image/common/back.gif
前期调试时先不要加密
软件稳定后 在发布加密

恩,目前开始要考虑这个问题了
页: [1]
查看完整版本: MSP430使用BSL方式,读取不到正确代码,但是烧录正常