搜索
bottom↓
回复: 22

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

[复制链接]

出0入0汤圆

发表于 2013-4-26 15:24:23 | 显示全部楼层 |阅读模式
RT。我是这样定义的,uint32_t const EnCode __attribute__((at(0x1FC))) = 0x87654321;  就是不行。有知道的朋友吧?

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2013-4-27 18:34:07 | 显示全部楼层
在汇编代码里加入

SECTION .encrypt:CODE:ROOT
DC32 0x87654321

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

出0入0汤圆

 楼主| 发表于 2013-5-2 10:46:48 | 显示全部楼层
在汇编代码里加入

SECTION .encrypt:CODE:ROOT
DC32 0x87654321

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

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

出0入0汤圆

发表于 2013-5-16 16:23:25 | 显示全部楼层
楼主找到加密方法了吗?

出0入0汤圆

发表于 2013-5-17 23:00:16 | 显示全部楼层
yphuang2009 发表于 2013-5-2 10:46
在汇编代码里加入

SECTION .encrypt:CODE:ROOT

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

出0入0汤圆

发表于 2013-5-20 10:06:27 | 显示全部楼层
楼主找到加密方法了吗?按照datasheet的说明,有以下几种加密级别:NO_ISP,CRP1,CRP2,CRP3,我也用的是IAR,只是在启动文件中我没找到这几个,楼主怎么解决的?

                                                                                             
                                          

出0入0汤圆

发表于 2013-5-29 15:53:17 | 显示全部楼层
shangdawei 发表于 2013-4-27 18:34
在汇编代码里加入

SECTION .encrypt:CODE:ROOT

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

出0入0汤圆

发表于 2013-5-29 22:59:00 | 显示全部楼层
  1. #ifndef SRAM
  2.         SECTION .crp:CODE:ROOT(2)
  3.         DATA
  4. /* Code Read Protection
  5. CRP1    0x12345678 - Write to RAM command can not access RAM below 0x10000200.
  6.                    - Read Memory command: disabled.
  7.                    - Copy RAM to Flash command: cannot write to Sector 0.
  8.                    - "Go" command: disabled.
  9.                    - Erase sector(s) command: can erase any individual sector except
  10.                             sector 0 only, or can erase all sectors at once.
  11.                    - Compare command: disabled
  12. CRP2    0x87654321 - Write to RAM command: disabled.
  13.                    - Copy RAM to Flash: disabled.
  14.                    - Erase command: only allows erase of all sectors.
  15. CRP3    0x43218765 - Access to chip via the SWD pins is disabled. ISP entry
  16.                      by pulling PIO0_1 LOW is disabled if a valid user code is
  17.                      present in flash sector 0.
  18. Caution: If CRP3 is selected, no future factory testing can be
  19. performed on the device.
  20. */
  21.         DCD        0xFFFFFFFF
  22. #endif
  23.         END
复制代码
define symbol __CRP_start__   = 0x000002FC;
define symbol __CRP_end__     = 0x000002FF;

define region CRP_region   = mem:[from  __CRP_start__ to __CRP_end__];
place in CRP_region   { section .crp };

出0入0汤圆

发表于 2013-5-29 22:59:56 | 显示全部楼层
ln08136207 发表于 2013-5-29 15:53
确定是0x1fc?不是0x2fc吗?
修改icf文件时,是不是iram和irom都要修改?

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

出0入0汤圆

发表于 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

出0入0汤圆

发表于 2013-5-30 16:49:10 | 显示全部楼层
shangdawei 发表于 2013-5-29 23:01
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:[from  __ICFEDIT_region_CRP_start__  to __ICFEDIT_region_CRP_end__];
place in CRP_region   { section .crp };



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

SECTION .encrypt:CODE:ROOT
        DC32 0x87654321



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

出0入0汤圆

发表于 2013-5-31 16:31:32 | 显示全部楼层
richyhuang 发表于 2013-5-17 23:00
肯定是同时加入啊,不过还是在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

出0入0汤圆

发表于 2013-5-31 18:39:07 | 显示全部楼层
ln08136207 发表于 2013-5-31 16:31
为什么我加密后,程序总是跑飞啊

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

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

出0入0汤圆

 楼主| 发表于 2013-6-2 14:48:00 | 显示全部楼层
好久没来了。按照上面朋友的方法的确OK。谢谢!

出0入0汤圆

发表于 2013-6-3 08:37:16 | 显示全部楼层
本帖最后由 ln08136207 于 2013-6-3 08:46 编辑
richyhuang 发表于 2013-5-31 18:39
看情况你是代码插入有问题,你把那个数据改成0xffffffff
看还会不会跑飞


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

出0入0汤圆

发表于 2013-6-3 08:58:21 | 显示全部楼层
shangdawei 发表于 2013-5-29 22:59
0x1FC 可能是 ARM7 的地址吧, 记错了, 不好意思啊

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-3 09:00:16 | 显示全部楼层
yphuang2009 发表于 2013-6-2 14:48
好久没来了。按照上面朋友的方法的确OK。谢谢!

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-3 12:42:22 | 显示全部楼层
先打开过例子测试正常后, 再测试加密

出0入0汤圆

发表于 2013-6-3 15:16:27 | 显示全部楼层
shangdawei 发表于 2013-6-3 12:42
先打开过例子测试正常后, 再测试加密

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

出0入0汤圆

发表于 2013-6-3 20:03:39 | 显示全部楼层
ln08136207 发表于 2013-6-3 15:16
已经解决了,不用改icf和.s文件,只要在.c文件中直接把0x87654321放到0x2fc地址,类似KEIL中的加密方法{: ...

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

出0入0汤圆

发表于 2013-6-4 08:54:18 | 显示全部楼层
shangdawei 发表于 2013-6-3 20:03
请教如何 只要在.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;

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

出40入42汤圆

发表于 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文件里的不匹配

出40入42汤圆

发表于 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
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 02:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表