This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

如何在程序内部用程序擦除自己设置的密码?

Other Parts Discussed in Thread: CONTROLSUITE

    请教各位大神一个现在正在做的功能。    

    我的一个控制程序中加了密码,然后每次更新程序后都需要重新输入密码才能擦写新的程序。

    现在想做的就是,在程序内部加入一段可以擦除密码的代码(或函数),以后要更新程序后,通过按键或者指令,启动那一段擦除密码的功能,程序内部自己清除掉密码和之前的程序。    

    现在尝试了在不带密码的程序中调用flash_erash( )函数,可以擦除sectorA至sectorH范围的内容,测试了下,应该程序是已经被擦除了。     但是,在有密码的程序如何使用呢?查看了TI的例程,貌似前提就是需要程序没有密码。    

    是不是直接在有密码的程序中也调用flash_erash( )函数,但是擦除范围为存密码的那段flash呢?这样可以擦除程序中的密码吗?或者DSP的密码会被弄坏,再也解不了锁了?    

     希望各位大神指点迷津啊!!

  • sysctrl.c中有个CsmUnlock用于CSM模块的解锁。

  • 可以调用DSP2803x_CSMPasswords.asm,你下载controlsuite后,以下地址有:

    C:\controlSUITE\device_support\f2803x\v130\DSP2803x_common\source

  •     我把程序添加密码的方法就是这样的,在工程中添加DSP2803x_CSMPasswords.asm文件,然后在这个文件中填写密码。

        但是,现在我想要做的是,在工程中添加了写有密码的DSP2803x_CSMPasswords.asm的文件,如何通过程序自动取消掉密码?

  • CsmUnlock函数中事先填入正确的密码,然后在程序中调用这个函数就可以解锁。

  • “Hank Zhao 于 2015-11-4 9:02 发表了以下帖子 :

    sysctrl.c中有个CsmUnlock用于CSM模块的解锁。

    CsmUnlock函数中事先填入正确的密码,然后在程序中调用这个函数就可以解锁。

    嗯,这样是可以解锁,这样解锁之后,调用flash_erash()函数擦除flash中的程序。但是密码还是存在啊(因为工程中那个.asm密码文件一直都写有密码),我的目的是把密码和程序全部擦除(就像新的DSP一样),下次烧写程序时不需要烧写员填写密码,直接烧写。

  • 解锁后你用flash_erash()把FlashA擦除后,密码就没了,然后下次烧写程序时不要带password.asm,或者password.asm中的密码全填F就可以了。

  • “Hank Zhao 于 2015-11-5 2:10 发表了以下帖子 :

    解锁后你用flash_erash()把FlashA擦除后,密码就没了,然后下次烧写程序时不要带password.asm,或者password.asm中的密码全填F就可以了。”

    呃,下次烧写不带password.asm,那岂不是程序就没密码了?

    我要做的功能,在程序中有没有方法可以选择是否自己擦除程序和密码(类似程序自毁,芯片里面密码和程序都没有了);如果不选择自毁,还是保持原有程序和密码。

  • 不带password.asm,肯定就没有密码,你的要求不是不写密码吗。程序自行选择是否擦除,需要你自己设计程序来判断是否擦除Flash。

  • Help Me 说:

    “Hank Zhao 于 2015-11-5 2:10 发表了以下帖子 :

    解锁后你用flash_erash()把FlashA擦除后,密码就没了,然后下次烧写程序时不要带password.asm,或者password.asm中的密码全填F就可以了。”

    呃,下次烧写不带password.asm,那岂不是程序就没密码了?

    我要做的功能,在程序中有没有方法可以选择是否自己擦除程序和密码(类似程序自毁,芯片里面密码和程序都没有了);如果不选择自毁,还是保持原有程序和密码。

    既然能烧全F,那烧写带密码也是没有问题的,主要是要保持密码的一致性

  • Hank Zhao 说:

    不带password.asm,肯定就没有密码,你的要求不是不写密码吗。程序自行选择是否擦除,需要你自己设计程序来判断是否擦除Flash。

    程序中,首先解锁,用flash_erash()把FlashA擦除,密码没了。但是工程文件中包含有带密码的password.asm文件,那下次用仿真器连接电脑后还需要再输入密码吗?

  • 不需要,擦除后就没了,除非你再次把带密码的out文件烧写进去。

  • Hank Zhao 说:

    不需要,擦除后就没了,除非你再次把带密码的out文件烧写进去。

    嗯,这个是的。

    关键是,我就是需要把带密码的out文件烧写进去,同时这个带密码的out文件又能自己擦除程序,并且保证通过指令选择后使得下次连接烧写不需要密码(如果不选择自毁指令,别人连接仿真器还是需要密码)。

    密码out文件-----自毁指令------->没密码、没程序

                       |------没自毁指令----->有密码、有程序

    所以,解锁,用flash_erash()把FlashA擦除,密码没了。但是如果工程文件中包含有带密码的password.asm文件,1:那下次用仿真器连接电脑后还需要再输入密码吗?(这个我调试了下,好像还是要密码。(不知道是不是方法不对))

             2:  或者,加密有没有其他方法,不添加password.asm文件?

  • 那你自己设置条件选择解锁擦除,就会没密码,没程序,如果条件不满足,那就什么也不执行。"但是如果工程文件中包含有带密码的password.asm文件"并且没有擦除的话,再次连接电脑肯定还是要输入密码才能解锁的。

    加密还可以使用CCS上自带的on-chip flash tool来加密,不用添加password文件。

  • Hank Zhao 说:

    那你自己设置条件选择解锁擦除,就会没密码,没程序,如果条件不满足,那就什么也不执行。"但是如果工程文件中包含有带密码的password.asm文件"并且没有擦除的话,再次连接电脑肯定还是要输入密码才能解锁的。

    加密还可以使用CCS上自带的on-chip flash tool来加密,不用添加password文件。

    工程文件中包含有带密码的password.asm文件,但是有擦除,再次连接就不需要密码就能解锁了吗?

  • 应该是原来的代码有加密,使用CsmUnlock解锁后,可以烧写代码,而要被烧写的代码也同样要有密码,注意的是要烧写的代码关于密码部分CsmUnlock和password文件中密码要一致,否则下次就解不了锁

  • 工程文件中包含有带密码的password.asm文件,但是有擦除,再次连接就不需要密码就能解锁

    Hank Zhao 说:

    是的

    谢谢Hank Zhao的指点!非常感谢!!已经实现了预期的功能。

    在带密码的程序(工程中有password.asm文件)中,首先调用CsmUnlock( )函数(该函数中的密码要与password.asm文件设置的密码一致)来解锁,解锁后,再调用Flash_Erase( )函数擦除flashA——H的程序。生成.out的工程文件中即便有password.asm文件,通过解锁、擦除后,重新上电后,连接电脑也不再需要密码,程序也被擦除了。