[STM32F7] [STM32F7] NUCLEO-F722ZE评测(7)PCROP测试

[复制链接]
2614|17
 楼主| sky.sun.zz 发表于 2017-3-15 13:26 | 显示全部楼层 |阅读模式
本帖最后由 sky.sun.zz 于 2017-3-15 15:12 编辑

[STM32F7] NUCLEO-F722ZE评测(7)PCROP测试
    STM32F722的一个亮点是具有PCROP功能(Proprietary code readout protection ),这是是一个专有代码读出保护的功能。当使用 PCROP时,用户扇区(0--23)Flash 能够阻止D-Bus的读取指令;保护功能选择通过FLASH_OPTCR寄存器的SPRMOD选择位进行选择:与RDP 对整片Flash读保护不同的是,它只是针对Flash 的某些特定区域进行代码的读写保护。它可以被用来保护一些IP代码,方便进行二次开发。
   受PCROP 保护的区域是无法使用D-Code 总线进行读访问的,所以在这片区域中只允许执行代码(通过I-Code 总线取指令),数据读取是被禁止的。因此,受保护的IP代码不能访问存储于同一块区域内的关联数据,比如文字池(literal pools)、分支表(branch tables)以及在执行过程中需要通过D-code总线进行读取的常量数据。所以受PCROP 保护的代码只能是只执行的指令代码,并不包含任何数据。因此,我们在编译受PCROP保护的IP 代码时,必须对其进行配置,以避免生成文字池。
  本次评测参考ST官方的《STM32F4xxPCROP应用》一文, 练习了跑马灯例程在STM32F722ZE上运行PCROP的过程。
1、在IAR7.80.4环境下配置PB0、PB7、PB14为输出,驱动3只LED,跑马灯循环中熄灭3只LED的代码写成一个独立函数Light_Clear(),单独存放在名为Sector_Test.c文件中。这个Light_Clear()函数编译时制定存储位置在PCROP保护区,地址在0x08008000,供主函数调用。
  1. //Sector_Test.c
  2. #include "stm32f7xx_hal.h"

  3. #pragma location = ".CODE_Flash"
  4. void Light_Clear(void)
  5. {
  6. GPIOB->ODR &=~0X4081;
  7. }
  8. //--------------------------------------------------------------------------------
  9. //main.c
  10. #include "main.h"
  11. #include "stm32f7xx_hal.h"
  12. void SystemClock_Config(void);
  13. void Error_Handler(void);
  14. static void MX_GPIO_Init(void);
  15. extern void Light_Clear(void);
  16. int main(void)
  17. {
  18.     uint32_t i;
  19.   HAL_Init();
  20.   SystemClock_Config();
  21.   MX_GPIO_Init();
  22.   while (1)
  23.   {
  24.     Light_Clear();
  25.     i=0X2FFFFF;
  26.     while(i--);
  27.     GPIOB->ODR |=0X4000;
  28.     i=0X2FFFFF;
  29.     while(i--);
  30.     Light_Clear();
  31.      i=0X2FFFFF;
  32.     while(i--);
  33.     GPIOB->ODR |=0X0080;
  34.     i=0X2FFFFF;
  35.     while(i--);
  36.     Light_Clear();
  37.     i=0X2FFFFF;
  38.     while(i--);
  39.    
  40.     GPIOB->ODR |=0X0001;
  41.     i=0X2FFFFF;
  42.     while(i--);
  43.   }


无标题3.png

2、在Options->C++/C Compiler-Code里打勾“No datareads in code memory"

S_FILES.png
3、参照《STM32F4xxPCROP应用》修改Startup_stm32f722zx.s


ICF.png
4、修改stm32f722xxflash.icf


5、先编译下载,试运行,跑马灯可以跑了。

反汇编.png
在反汇编栏里可以读到Light_Clear()函数的反汇编代码和地址,

无保护.png

打开STM32 ST-Link Utility 4.0,在Targwe memory栏的相同地址处同样可以看到到这段代码。

到此为止,我们已经把要保护的代码正确加载到预期的存储区域0x08008000-ox08008014。

option.png
6、点击Target->Option Bytes
rw.png

在Flash protrction mode栏里选择Read/Wrint protrtion,把地址0x08008000的Sector 2选项打勾,点击Apply。

读写保护.png

此时,回到Targwe memory栏,我们已经可以看到这里的数据都看不见了。
退出TM32 ST-Link Utility 4.0,按一下Reset按键,跑马灯又开始运行了。我们的PCROP成功完成配置。跑马灯的视频太平常了,就不上传了。
无标题.png







STM32F722ZE_PCROP.rar

2.48 KB, 下载次数: 3

STM32F4xx PCROP应用.rar

229.17 KB, 下载次数: 2

打赏榜单

21ic小管家 打赏了 8.88 元 2017-04-10
理由:NUCLEO-F722ZE评测领赏

54chenjq 发表于 2017-3-15 13:31 | 显示全部楼层
楼主能分享一下IDE吗?
 楼主| sky.sun.zz 发表于 2017-3-15 13:36 | 显示全部楼层
54chenjq 发表于 2017-3-15 13:31
楼主能分享一下IDE吗?

BIN附件刚上传,代码在1楼,那些STM32CubeMX过程在以前帖子都有,就省略了。确实需要再上传了。
54chenjq 发表于 2017-3-15 19:15 | 显示全部楼层
sky.sun.zz 发表于 2017-3-15 13:36
BIN附件刚上传,代码在1楼,那些STM32CubeMX过程在以前帖子都有,就省略了。确实需要再上传了。 ...

其实我想要IAR,我的IAR版本太低了
 楼主| sky.sun.zz 发表于 2017-3-15 19:19 | 显示全部楼层
本帖最后由 sky.sun.zz 于 2017-3-18 15:59 编辑
54chenjq 发表于 2017-3-15 19:15
其实我想要IAR,我的IAR版本太低了

。。。
 楼主| sky.sun.zz 发表于 2017-3-15 19:30 | 显示全部楼层
本帖最后由 sky.sun.zz 于 2017-3-18 13:14 编辑
54chenjq 发表于 2017-3-15 19:15
其实我想要IAR,我的IAR版本太低了

。。。
天灵灵地灵灵 发表于 2017-3-15 21:36 | 显示全部楼层
功能强大了,用着也复杂了。
54chenjq 发表于 2017-3-17 10:04 | 显示全部楼层
本帖最后由 54chenjq 于 2017-3-17 10:06 编辑

谢谢你哦,有**文件吗?
 楼主| sky.sun.zz 发表于 2017-3-17 12:52 | 显示全部楼层
本帖最后由 sky.sun.zz 于 2017-3-17 20:34 编辑
54chenjq 发表于 2017-3-17 10:04
谢谢你哦,有**文件吗?

54chenjq 发表于 2017-3-17 19:02 | 显示全部楼层

下载完毕,非常感谢!!!
lzmm 发表于 2017-3-17 21:58 | 显示全部楼层
lzmm 发表于 2017-3-17 22:00 | 显示全部楼层
不能保护里面的数据吗?
 楼主| sky.sun.zz 发表于 2017-3-18 07:34 | 显示全部楼层
lzmm 发表于 2017-3-17 22:00
不能保护里面的数据吗?

只能保护代码(指令类)不被读出,数据类不能放在这些Flash地址。
Varus 发表于 2017-3-19 21:08 | 显示全部楼层
求stm32 的IAR,还有**器
 楼主| sky.sun.zz 发表于 2017-3-19 22:20 | 显示全部楼层
本帖最后由 sky.sun.zz 于 2017-3-20 10:20 编辑
Varus 发表于 2017-3-19 21:08
求stm32 的IAR,还有**器
wahahaheihei 发表于 2017-3-20 16:27 | 显示全部楼层
Varus 发表于 2017-3-19 21:08
求stm32 的IAR,还有**器

用Keil啊,Keil可以**,IAR的**难了,我早就不用了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

732

帖子

13

粉丝
快速回复 在线客服 返回列表 返回顶部