IAR环境,LPC1114 MCU,怎么加密?
RT。我是这样定义的,uint32_t const EnCode __attribute__((at(0x1FC))) = 0x87654321;就是不行。有知道的朋友吧? 在汇编代码里加入SECTION .encrypt:CODE:ROOT
DC32 0x87654321
在分散加载文件ICF里加入
place at address mem:0x1FC { section .encrypt };
在汇编代码里加入
SECTION .encrypt:CODE:ROOT
DC32 0x87654321
在分散加载文件ICF里加入
place at address mem:0x1FC { section .encrypt };
上面2个部分同时加入?? 都要加入? 楼主找到加密方法了吗? yphuang2009 发表于 2013-5-2 10:46 static/image/common/back.gif
在汇编代码里加入
SECTION .encrypt:CODE:ROOT
肯定是同时加入啊,不过还是在MDK中比较方便哈 楼主找到加密方法了吗?按照datasheet的说明,有以下几种加密级别:NO_ISP,CRP1,CRP2,CRP3,我也用的是IAR,只是在启动文件中我没找到这几个,楼主怎么解决的?
shangdawei 发表于 2013-4-27 18:34 static/image/common/back.gif
在汇编代码里加入
SECTION .encrypt:CODE:ROOT
确定是0x1fc?不是0x2fc吗?
修改icf文件时,是不是iram和irom都要修改? #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 }; ln08136207 发表于 2013-5-29 15:53 static/image/common/back.gif
确定是0x1fc?不是0x2fc吗?
修改icf文件时,是不是iram和irom都要修改?
0x1FC 可能是 ARM7 的地址吧, 记错了, 不好意思啊 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
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读出来。
这是怎么回事? 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 ln08136207 发表于 2013-5-31 16:31 static/image/common/back.gif
为什么我加密后,程序总是跑飞啊
现在在我的idscript.irom_iar.icf文件中添加以下内容:
看情况你是代码插入有问题,你把那个数据改成0xffffffff
看还会不会跑飞 好久没来了。按照上面朋友的方法的确OK。谢谢! 本帖最后由 ln08136207 于 2013-6-3 08:46 编辑
richyhuang 发表于 2013-5-31 18:39 static/image/common/back.gif
看情况你是代码插入有问题,你把那个数据改成0xffffffff
看还会不会跑飞
你说的对,把0x87654321改成0xffffffff之后,仍然跑飞,只是不知道到底是哪里弄错了 shangdawei 发表于 2013-5-29 22:59 static/image/common/back.gif
0x1FC 可能是 ARM7 的地址吧, 记错了, 不好意思啊
你好,这是我的启动文件和icf文件,里面有一些我的改动,不清楚为什么,程序总是跑飞 yphuang2009 发表于 2013-6-2 14:48 static/image/common/back.gif
好久没来了。按照上面朋友的方法的确OK。谢谢!
你好。我也按照上面的方法,加密后程序总是跑飞,不知是那里设置错了。 先打开过例子测试正常后, 再测试加密 shangdawei 发表于 2013-6-3 12:42 static/image/common/back.gif
先打开过例子测试正常后, 再测试加密
已经解决了,不用改icf和.s文件,只要在.c文件中直接把0x87654321放到0x2fc地址,类似KEIL中的加密方法{:smile:}
谢谢你们 ln08136207 发表于 2013-6-3 15:16 static/image/common/back.gif
已经解决了,不用改icf和.s文件,只要在.c文件中直接把0x87654321放到0x2fc地址,类似KEIL中的加密方法{: ...
请教如何 只要在.c文件中直接把0x87654321放到0x2fc地址 ? 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:} 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: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]