STM32 防火墙例程
一个 STM32 防火墙的实例可在 CubeMX 固件包里找到。 例如:
STM32Cube\Repository\STM32Cube_FW_L4_V1.6.0\Projects\STM32L476RG-Nucleo\Examples\FIREWALL
工程文件支持 IAR 和 Keil 开发环境,含有两个目录:
FIREWALL_VolatileData_Executable
FIREWALL_VolatileData_Shared
读者可使用 IAR 或者 Keil 打开这两个例子进行编译以及运行。
例程防火墙配置引出的疑问
例程在激活防火墙时使用了不同的配置, 演示了防火墙外设的灵活性与不同的安全性, 具有很好的学习用途,但是在实际应
用中,为最大化安全考虑,我们究竟应该去应用哪一种配置 呢?
配置一: 仅配置保护 SRAM1 中的数据,且将 SRAM1 的数据配置成可执行且非共享。 注意没有对 Flash 的任何地
方配置保护。
/* No protected code segment (length set to 0) */
fw_init.CodeSegmentStartAddress = 0x0;
fw_init.CodeSegmentLength = 0;
/* No protected non-volatile data segment (length set to 0) */
fw_init.NonVDataSegmentStartAddress = 0x0;
fw_init.NonVDataSegmentLength = 0;
/* Protected volatile data segment (in SRAM1 memory) start address and length */
fw_init.VDataSegmentStartAddress = 0x2000F100;
fw_init.VDataSegmentLength = 3840; /* 0xF00 bytes */
/* The protected volatile data segment can be executed */
fw_init.VolatileDataExecution = FIREWALL_VOLATILEDATA_EXECUTABLE;
/* The protected volatile data segment is not shared with non-protected
application code */
fw_init.VolatileDataShared = FIREWALL_VOLATILEDATA_NOT_SHARED;
配置二: 保护 Flash 里的代码和数据,以及 SRAM1 中的数据。 SRAM1 中的数据被配置为不可执行,但可共享。
/* Protected code segment start address and length */
fw_init.CodeSegmentStartAddress = 0x08010000;
fw_init.CodeSegmentLength = 512; /* 0x200 bytes */
/* Protected non-volatile data segment (in FLASH memory) start address and length */
fw_init.NonVDataSegmentStartAddress = 0x080FF000;
fw_init.NonVDataSegmentLength = 256; /* 0x100 bytes */
/* Protected volatile data segment (in SRAM1 memory) start address and length */
fw_init.VDataSegmentStartAddress = 0x20000000;
fw_init.VDataSegmentLength = 576; /* 0x240 bytes */
/* The protected volatile data segment can't be executed */
fw_init.VolatileDataExecution = FIREWALL_VOLATILEDATA_NOT_EXECUTABLE;
/* The protected volatile data segment is shared with non-protected
application code */
fw_init.VolatileDataShared = FIREWALL_VOLATILEDATA_SHARED;
|