yphuang2009 发表于 2013-4-26 15:24:23

IAR环境,LPC1114 MCU,怎么加密?

RT。我是这样定义的,uint32_t const EnCode __attribute__((at(0x1FC))) = 0x87654321;就是不行。有知道的朋友吧?

shangdawei 发表于 2013-4-27 18:34:07

在汇编代码里加入

SECTION .encrypt:CODE:ROOT
DC32 0x87654321

在分散加载文件ICF里加入
place at address mem:0x1FC { section .encrypt };

yphuang2009 发表于 2013-5-2 10:46:48

在汇编代码里加入

SECTION .encrypt:CODE:ROOT
DC32 0x87654321

在分散加载文件ICF里加入
place at address mem:0x1FC { section .encrypt };

上面2个部分同时加入?? 都要加入?

ln08136207 发表于 2013-5-16 16:23:25

楼主找到加密方法了吗?

richyhuang 发表于 2013-5-17 23:00:16

yphuang2009 发表于 2013-5-2 10:46 static/image/common/back.gif
在汇编代码里加入

SECTION .encrypt:CODE:ROOT


肯定是同时加入啊,不过还是在MDK中比较方便哈

ln08136207 发表于 2013-5-20 10:06:27

楼主找到加密方法了吗?按照datasheet的说明,有以下几种加密级别:NO_ISP,CRP1,CRP2,CRP3,我也用的是IAR,只是在启动文件中我没找到这几个,楼主怎么解决的?

                                                                                             
                                          

ln08136207 发表于 2013-5-29 15:53:17

shangdawei 发表于 2013-4-27 18:34 static/image/common/back.gif
在汇编代码里加入

SECTION .encrypt:CODE:ROOT


确定是0x1fc?不是0x2fc吗?
修改icf文件时,是不是iram和irom都要修改?

shangdawei 发表于 2013-5-29 22:59:00

#ifndef SRAM
      SECTION .crp:CODE:ROOT(2)
      DATA
/* Code Read Protection
CRP1    0x12345678 - Write to RAM command can not access RAM below 0x10000200.
                   - Read Memory command: disabled.
                   - Copy RAM to Flash command: cannot write to Sector 0.
                   - "Go" command: disabled.
                   - Erase sector(s) command: can erase any individual sector except
                          sector 0 only, or can erase all sectors at once.
                   - Compare command: disabled
CRP2    0x87654321 - Write to RAM command: disabled.
                   - Copy RAM to Flash: disabled.
                   - Erase command: only allows erase of all sectors.
CRP3    0x43218765 - Access to chip via the SWD pins is disabled. ISP entry
                     by pulling PIO0_1 LOW is disabled if a valid user code is
                     present in flash sector 0.
Caution: If CRP3 is selected, no future factory testing can be
performed on the device.
*/
        DCD        0xFFFFFFFF
#endif
      ENDdefine symbol __CRP_start__   = 0x000002FC;
define symbol __CRP_end__   = 0x000002FF;

define region CRP_region   = mem:;
place in CRP_region   { section .crp };

shangdawei 发表于 2013-5-29 22:59:56

ln08136207 发表于 2013-5-29 15:53 static/image/common/back.gif
确定是0x1fc?不是0x2fc吗?
修改icf文件时,是不是iram和irom都要修改?

0x1FC 可能是 ARM7 的地址吧, 记错了, 不好意思啊

shangdawei 发表于 2013-5-29 23:01:39

C:\Program Files (x86)\IAR Systems\Embedded Workbench xxxxxx\arm\examples\NXP\LPC11xx\IAR-LPC-1114-SK\Bootloader\LinkerFiles\bootloader.icf

C:\Program Files (x86)\IAR Systems\Embedded Workbench xxxxxx\arm\examples\NXP\LPC11xx\CMSIS\Device\NXP\LPC11xx\Source\IAR\startup_LPC11xx.s

ln08136207 发表于 2013-5-30 16:49:10

shangdawei 发表于 2013-5-29 23:01 static/image/common/back.gif
C:\Program Files (x86)\IAR Systems\Embedded Workbench xxxxxx\arm\examples\NXP\LPC11xx\IAR-LPC-1114-S ...

我用的是相对路径,
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
现在在我的idscript.irom_iar.icf文件中添加以下内容:


define symbol __ICFEDIT_region_CRP_start__   = 0x000002FC;
define symbol __ICFEDIT_region_CRP_end__   = 0x000002FF;
define region CRP_region   = mem:;
place in CRP_region   { section .crp };



在我的启动文件startup_lpc11xx.s文件中添加以下内容:

SECTION .encrypt:CODE:ROOT
      DC32 0x87654321



结果程序不执行了,屏蔽掉SECTION .encrypt:CODE:ROOT即:
;SECTION .encrypt:CODE:ROOT
程序就可以了,但是仍然能用isp读出来。
这是怎么回事?

ln08136207 发表于 2013-5-31 16:31:32

richyhuang 发表于 2013-5-17 23:00 static/image/common/back.gif
肯定是同时加入啊,不过还是在MDK中比较方便哈

为什么我加密后,程序总是跑飞啊

现在在我的idscript.irom_iar.icf文件中添加以下内容:

place at address mem:0x2FC { section .encrypt };



在我的启动文件startup_lpc11xx.s文件中添加以下内容:

SECTION .encrypt:CODE:ROOT
      DC32 0x87654321



加密可以了,但是程序程序不执行了
我用的是IAR 6.30.1

richyhuang 发表于 2013-5-31 18:39:07

ln08136207 发表于 2013-5-31 16:31 static/image/common/back.gif
为什么我加密后,程序总是跑飞啊

现在在我的idscript.irom_iar.icf文件中添加以下内容:


看情况你是代码插入有问题,你把那个数据改成0xffffffff
看还会不会跑飞

yphuang2009 发表于 2013-6-2 14:48:00

好久没来了。按照上面朋友的方法的确OK。谢谢!

ln08136207 发表于 2013-6-3 08:37:16

本帖最后由 ln08136207 于 2013-6-3 08:46 编辑

richyhuang 发表于 2013-5-31 18:39 static/image/common/back.gif
看情况你是代码插入有问题,你把那个数据改成0xffffffff
看还会不会跑飞

你说的对,把0x87654321改成0xffffffff之后,仍然跑飞,只是不知道到底是哪里弄错了

ln08136207 发表于 2013-6-3 08:58:21

shangdawei 发表于 2013-5-29 22:59 static/image/common/back.gif
0x1FC 可能是 ARM7 的地址吧, 记错了, 不好意思啊

你好,这是我的启动文件和icf文件,里面有一些我的改动,不清楚为什么,程序总是跑飞

ln08136207 发表于 2013-6-3 09:00:16

yphuang2009 发表于 2013-6-2 14:48 static/image/common/back.gif
好久没来了。按照上面朋友的方法的确OK。谢谢!

你好。我也按照上面的方法,加密后程序总是跑飞,不知是那里设置错了。

shangdawei 发表于 2013-6-3 12:42:22

先打开过例子测试正常后, 再测试加密

ln08136207 发表于 2013-6-3 15:16:27

shangdawei 发表于 2013-6-3 12:42 static/image/common/back.gif
先打开过例子测试正常后, 再测试加密

已经解决了,不用改icf和.s文件,只要在.c文件中直接把0x87654321放到0x2fc地址,类似KEIL中的加密方法{:smile:}
谢谢你们

shangdawei 发表于 2013-6-3 20:03:39

ln08136207 发表于 2013-6-3 15:16 static/image/common/back.gif
已经解决了,不用改icf和.s文件,只要在.c文件中直接把0x87654321放到0x2fc地址,类似KEIL中的加密方法{: ...

请教如何 只要在.c文件中直接把0x87654321放到0x2fc地址 ?

ln08136207 发表于 2013-6-4 08:54:18

shangdawei 发表于 2013-6-3 20:03 static/image/common/back.gif
请教如何 只要在.c文件中直接把0x87654321放到0x2fc地址 ?

#program location = "CRP_region"
__root const unsigned long int CRPlevel = 0x87654321;
或者最直接的
#program location = 0x2fc
__root const unsigned long int CRPlevel @0x2fc = 0x87654321;

我还是对编译器不熟悉,看来要多看用户手册了{:smile:}

落叶知秋 发表于 2014-2-24 19:49:58

ln08136207 发表于 2013-5-30 16:49
我用的是相对路径,
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
现在在 ...

把 SECTION .encrypt:CODE:ROOT 这句改为:
SECTION .crp:CODE:ROOT
你在.s里定义的SECTION,跟icf文件里的不匹配

落叶知秋 发表于 2014-2-24 19:52:05

本帖最后由 落叶知秋 于 2014-2-24 19:54 编辑

shangdawei 发表于 2013-5-29 22:59
define symbol __CRP_start__   = 0x000002FC;
define symbol __CRP_end__   = 0x000002FF;



谢谢,这个测试过,有用。我是在LPC4357上做的测试。
主要是要修改startup.s文件和.icf文件。
还有就是,CRP的地址要跟芯片的Flash区相匹配。
比如说,4357就是用的0x1A0002FC~0x1A0002FF 和 0x1B0002FC~0x1B0002FF
页: [1]
查看完整版本: IAR环境,LPC1114 MCU,怎么加密?