完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 1009109508 于 2013-9-23 11:36 编辑 DSP锁死解决办法 相信有很多人都遇到过这样的问题:编了很久的项目终于在ram中运行通过了,但在往flash中烧写的过程中却出现了很多的问题。于是乎,我们各种上网查资料,各种修改cmd文件。结果一不小心,就把dsp锁死了。这时候你可能会纳闷,我并没有给dsp加密啊,为什么dsp会锁死呢?于是你又换了一片dsp,小心翼翼的重新下载。结果dsp又锁死了……后续的内容我就不再假设了。出现上述问题的原因,主要是因为对dsp的cmd文件和memory map不了解。言归正传,本文提供了一种dsp解锁的办法。其实相关的解决办法网上已经有了许多。我这里只是对其进行了补充和总结。并以我在做项目中遇到的问题为例进行具体说明。 首先,要想解锁你的dsp必须要有的两个文件:1.下载到dsp中的.out文件。2.工程项目debug文件夹下的.map文件。如果下载完之后你把工程项目修改并编译了。那么再将文件修改回来重新编译就行了。不用和之前的项目完全一样,只要cmd文件改回来基本就没问题。但是如果你将工程文件改的乱七八糟,而且还改不回来了。那这篇文章帮不到你了,估计除了ti以外也没人能帮得到你。由上面的两个条件,也可以看出,这里的解锁dsp是必须要已知dsp的工程项目。并不是随便拿一块dsp就能解锁的。所以如果你想解锁他人的dsp并盗取别人的程序,那这篇文章也帮不到你。 能看到这里的人,应该就是我真正能帮到的人了。首先声明我用到的芯片是2812,这里也已2812为例。众所周知,2812中有一个代码安全模块(CSM)。它就像一个保险箱,保护我们的知识产权。但是如果没有用好就会给我们带来麻烦,比如开篇提到的问题。CSM模块由8个16位的单元组成,默认的各位全是1.当128位全为1的时候,说明器件时不安全的,并未受到密码保护。正常我们在调试固化的时候,应该是这种状态。通过查看dsp的memory map 我们可以看的,这128位密匙的起始地址为0x3F7FF8。也就是说正常情况下,从这一地址开始的128位应该为1才对。 这里我先介绍一下.map文件。MAP文件是dsp开发软件编译后产生的有关DSP用到所有程序、数据及IO空间的一种映射文件。有很多时候,我们仅靠错误和警告的提示信息并不能解决我们所遇到的问题。而这时候如果我们多关注一下.map文件往往能有意想不到的收获。不只是dsp,只要是程序运行的地方都会涉及的地址的映射问题。只要我们多多关注.map文件,往往都能找到程序运行错误的原因。没错!.map文件就是这么神奇。 好了,既然.map文件这么神奇。那我们就看一看2812的.map文件吧。这里我找到一个正常没有加密的.map文件打开。什么?你打不开.map文件。那是因为你打开的方式不对。跟着我做:右击.map文件,选择“用记事本打开”。看!这不是打开了嘛! 图(1) 我们可以看的这里明确的dsp的存储空间分为不同的块。上面明确写着各个块的起始地址、长度和使用情况。这里每一个块之所以被使用是因为下面将各个段分配到了这些空间中。下面各个段的分配情况我就不做截图了。大家只要打开自己的.map文件观看就行了。至于各个段和各个空间的分配。是和cmd文件的编写和memory map 是对应的。大家如果在这有什么疑问的话。去网上搜一下cmd文件的编写就行了。这个地方很重要,一定要把这个地方弄懂。这里我们重点看一下我选中的部分,看一下起始地址为0x003f7ff8,长度为8。每一个单元都有16位。也就是说这个空间总共长为16x8 = 128位。也就是说这就是我们前面提到的CSM模块。我们可以看到在正常的cmd文件中。这个区域被使用的单元应为0.如果你的dsp被锁住了。那么这个区域的使用单元肯定不是0.所以我建议在你下载你的程序到flash中时。最好先看一下这个地方是否被使用。如果被使用了,那么你就要注意了,是不是你主动使用的。如果不是的话,我建议你还是不要把文件固化到flash中。以免引起不必要的麻烦。当然了如果你已经将文件固化到flash中了。用我下面的方法,这个问题也能解决。 图(2)是一个不小心将dsp锁死的map文件,可以看的这是对应的CSM区域已经被使用了. 图(2) DSP被锁住的原因有很多,但往往都是因为不小心把别的段存放的CSM区域所致。我就是因为这个原因把dsp锁住的。这里我创建了一个长度为0x00000002的.reset段,但并没有给其指定分配空间。于是它就被自动分配到PASSWDS这个空间了。图(3)是.reset段的分配情况。 图(3) 我们看一下这个段的起始地址就知道它被分配到了CSM模块,导致dsp锁死。这时我在想既然是自动分配空间,会不会是随机的呢?也就是说每次编译都会讲这个段分配到不同的空间。经测试它不是随机将一个段放到任意一个存储空间的,而是遵循了某种原则。为了验证这个原则我创建了一个长度为0x00000002的空间。但是依然没有给.reset段分配空间。结果和我想的一样。这是.reset段被分配到了我创建长度为0x00000002的这个段里。见图(4)图(5),图(4)为我创建的空间,图(5)是将.reset段分配到该空间中。所以dsp分配没有指定段的原则应该是:将没有指定存放空间的段放到能放下该段且存储空间最小的空间里。这也是一种优化原则。 图(4) 图(5) 以上分析了dsp锁住的原因,下面终于到了关键时刻——dsp的解锁。通过上面的分析我们知道,CSM模块的密码肯定存放在从0x3f7ff8开始的空间里。而我们下载到dsp中的.out文件肯定包含这部分的信息。所以我们只要打开.out文件,就一定能找到这一部分的信息。当然.out文件不像.map文件那样这么容易打开。我们需要借助一些工具。这些工具具体就是:1.ccs自带的hex2000.exe。2. windows操作系统。这两样东西我想大家都有吧。hex2000.exe其ccs自带默认路径为:..C2000cgtoolsbinhex2000.exe。更多有关此程序的命令选项请参考相关资料。通过以上两个工具,我们产生build.bat和build.cmd这两个文件。当然这两个文件在下面的附件中都有,大家只要会使用就行。 1. 用记事本打开build.bat批处理文件,内填写hex2000.exe在你电脑中的目录(里面有我电脑中ccs自带的路径,大家只要对应修改就行)。 2. 用记事本打开build.cmd命令文件。对应下面指令修改内容: -memwidth 16 设定存储器格式为16bit ,不用管 -romwidth 16 设定rom格式为16bit&,不用管 -a 设定输出文件格式,填写你的.OUT名如我的是Eva_AD.out -o 设定输出文件名,随便起个名字,是你得到密码的文件名 -map 设定输出映射文件,填写你的.map名 如我的是Eva_AD.map -boot 设定引导数据流,不做操作 3. 然后将文件夹拷贝到ccs安装目录下(不知道不考行不行,没试过) 4. 打开ccs连接目标板 5.双击build.bat会产生一个记事本文件,打开用查找功能(ctrl+f)找到3F 7F F8。 6.再看一遍你的.map文件,看一下PASSWDS这个空间你使用了多少。如我是将这个区域使用了0x00000002.所以我就在3F 7F F8 后面找到8位十六进制数作为解锁密码。从低位到高位填写。其余保持为F不变。 7.恭喜你成功解锁! 下面是部分截图情况: 下面有一个word文档,大家可以下来看看。 |
|
相关推荐
88个回答
|
|
不错不错,楼主厉害
|
|
|
|
说的很清楚,也很详细,对我帮助很大。谢谢。。。。。
|
|
|
|
|
|
|
|
本帖最后由 24不可说 于 2016-8-1 22:38 编辑
DSP锁死了后,你不能往FLASH烧写程序,解锁需要密码, 如果128位密码设置的时候全是0,那就是永久锁死,无法开锁。 只是普通密码的话,你可以烧写进RAM进行调试。 对于供电不会有影响。就像一个成品器件里的DSP芯片, 为了保密和知识产权,肯定是上锁的,但不会影响使用。 |
|
|
|
必须要链接CCS?
|
|
|
|
收藏学习学习。。。
|
|
|
|
好文!!!顶楼主
|
|
|
|
nicholas1233 发表于 2014-3-25 10:40 什么原因,你给指点一下啊! |
|
|
|
nicholas1233 发表于 2014-3-25 10:40 什么原因,你给指点一下啊! |
|
|
|
nicholas1233 发表于 2014-3-25 10:40 什么原因,你给指点一下啊! |
|
|
|
nicholas1233 发表于 2014-3-25 10:40 什么原因,你给指点一下啊! |
|
|
|
nicholas1233 发表于 2014-3-25 10:40 什么原因,你给指点一下啊! |
|
|
|
nicholas1233 发表于 2014-3-25 10:40 什么原因,你给指点一下啊!!!!!!!!!!!!!!!!!!11 |
|
|
|
nicholas1233 发表于 2014-3-25 10:40 什么原因,你给指点一下啊!!!!!!!!!!!!!!!!!!啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊。。。 |
|
|
|
nicholas1233 发表于 2014-3-25 10:40 什么原因,给指点一下啊 |
|
|
|
楼主辛苦了,顶!
|
|
|
|
楼主,你这个解锁的是适合2000系列的DSP吧,5000系列的怎么办呢?5000系列的也会遇到锁死的情况吗?
我这有一块5000系列的PCB,之前一模一样的PCB图,一样的仿真器,是可以用的。但是我现在重新用同样的PCB图,同样的仿真器,Debug的时候总是灰色的,之前连Debug的红色停止键都没有。 后来我把EMU0和EMU1两个引脚给断开了(之前是拉高的,参考给点标准的处理EMU0和EMU1脚的方法),断开了之后Debug的时候红色的停止键出现了,但是其他的如单步运行等键都是灰色的,也就是不能在线调试。 我用的是CCS5.4.0,没有On-Chip Flash Programmer,芯片是TMS320C5502,仿真器是XDS100v2USB(仿真器的Test connection是没问题的),我试过很多次,而且重新焊接了两块板子,都是同样的问题。但是用之前的老板子(之前焊接的板子)却是可以Debug,同时可以在线调试的。 这里有个小插曲,我现在焊接的这些板子用的是我最近新买的一批5502的芯片,在同一个厂家买的,我觉得新的芯片出问题的可能性比较小,所以我怀疑DSP芯片已经因为我的某些误操作而被锁死了。 请问您知道怎么解锁5000系列的DSP吗,我试过您的方法,但是没有On-Chip Flash Programmer,表示很无奈啊!希望能够得到您的回复,谢谢。
|
|
|
|
全零是不是就永久锁死了?还能有解吗?
|
|
|
|
楼主很是用心啊,给楼主个赞,不知道能不能行,试试先
|
|
|
|
请问您这个生成了hex文件么?我的问题和您的是一样的 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件连接电路图
1044 浏览 0 评论
551 浏览 0 评论
普中科技F28335开发板中,如何使用aic23播放由代码生成的正弦波
1489 浏览 0 评论
2262 浏览 1 评论
983 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-12 14:39 , Processed in 0.940907 second(s), Total 81, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号