0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

第三十二章 MPU——内存保护单元

W55MH32 来源:W55MH32 作者:W55MH32 2025-07-01 15:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

单芯片解决方案,开启全新体验——W55MH32高性能以太网单片机

W55MH32是WIZnet重磅推出的高性能以太网单片机,它为用户带来前所未有的集成化体验。这颗芯片将强大的组件集于一身,具体来说,一颗W55MH32内置高性能Arm® Cortex-M3核心,其主频最高可达216MHz;配备1024KB FLASH与96KB SRAM,满足存储与数据处理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP协议栈、内置MAC以及PHY,拥有独立的32KB以太网收发缓存,可供8个独立硬件socket使用。如此配置,真正实现了All-in-One解决方案,为开发者提供极大便利。

在封装规格上,W55MH32提供了两种选择:QFN100和QFN68。

W55MH32L采用QFN100封装版本,尺寸为12x12mm,其资源丰富,专为各种复杂工控场景设计。它拥有66个GPIO、3个ADC、12通道DMA、17个定时器、2个I2C、5个串口、2个SPI接口(其中1个带I2S接口复用)、1个CAN、1个USB2.0以及1个SDIO接口。如此丰富的外设资源,能够轻松应对工业控制中多样化的连接需求,无论是与各类传感器、执行器的通信,还是对复杂工业协议的支持,都能游刃有余,成为复杂工控领域的理想选择。同系列还有QFN68封装的W55MH32Q版本,该版本体积更小,仅为8x8mm,成本低,适合集成度高的网关模组等场景,软件使用方法一致。更多信息和资料请进入http://www.w5500.com/网站或者私信获取。

此外,本W55MH32支持硬件加密算法单元,WIZnet还推出TOE+SSL应用,涵盖TCP SSL、HTTP SSL以及 MQTT SSL等,为网络通信安全再添保障。

为助力开发者快速上手与深入开发,基于W55MH32L这颗芯片,WIZnet精心打造了配套开发板。开发板集成WIZ-Link芯片,借助一根USB C口数据线,就能轻松实现调试、下载以及串口打印日志等功能。开发板将所有外设全部引出,拓展功能也大幅提升,便于开发者全面评估芯片性能。

若您想获取芯片和开发板的更多详细信息,包括产品特性、技术参数以及价格等,欢迎访问官方网页:http://www.w5500.com/,我们期待与您共同探索W55MH32的无限可能。

wKgZPGhjkceAQighABA5X7BENG0290.png

第三十二章 MPU——内存保护单元

MPU(Memory Protection Unit,内存保护单元)是W55MH32中用于管理内存区域访问权限与属性的关键模块。它通过划分内存区域并设置访问规则(如读/写/执行权限、缓存策略),增强系统的安全性和稳定性,尤其适用于多任务系统(如RTOS)或需要隔离关键资源的场景。

1MPU功能概述

1.1基本概念

MPU是W55MH32内置的硬件模块,不支持虚拟内存(与MMU不同),但能通过物理内存区域划分实现以下功能:

限制任务/程序对特定内存区域的访问(如禁止写、禁止执行)。

定义内存区域的属性(如缓存策略、共享性),优化系统性能。

检测非法内存访问(如越界、权限违规),触发异常(如 MemManage Fault),避免系统崩溃。

1.2关键术语

内存区域(Region):MPU将内存划分为多个独立区域,每个区域需配置基地址、大小、权限等参数。

访问权限(Access Permission):定义区域的读(R)、写(W)、执行(X)权限(如仅读、可读可写、不可执行)。

内存属性(Memory Attribute:包括缓存策略(如无缓存、写通、写回)、共享性(是否被多处理器共享)等,影响数据访问效率。

2MPU核心功能

2.1内存区域划分

MPU通过配置区域基地址(Base Address)和区域大小(Size),将物理内存划分为多个独立区域。

大小限制:区域大小必须是2的幂次(如32B、64B、1KB、64KB等),且基地址需对齐到区域大小(例如 64KB区域的基地址必须是 64KB的整数倍)。

区域重叠:若多个区域重叠,编号大的区域优先级更高(覆盖小编号区域的配置)。

2.2访问权限控制

每个区域可独立设置特权级(Privileged)和用户级(Unprivileged)的访问权限(如 RTOS中内核运行在特权级,任务运行在用户级)。常见权限组合如下:

权限类型 说明
PRIV_RW 特权级可读可写,用户级无权限
PRIV_RW_USER_RO 特权级可读可写,用户级仅可读
PRIV_RO 特权级仅可读,用户级无权限
NO_ACCESS 任何级别均不可访问(用于标记非法区域)

2.3内存属性配置

通过设置内存类型(Memory Type)和缓存策略(Cache Policy),优化数据访问效率:

内存类型:如普通内存(Normal)、设备内存(Device)。

普通内存:支持缓存(如SRAM中的变量)。

设备内存:通常为外设寄存器(如 GPIO、UART),需禁用缓存(避免缓存导致的读写延迟)。

缓存策略:

无缓存(Non-Cacheable):直接访问物理内存(如设备寄存器)。

写通(Write-Through):写数据时同时更新缓存和内存(适合需要实时性的场景)。

写回(Write-Back):写数据时仅更新缓存,后续统一写入内存(适合高频读写场景,提升效率)。

3应用场景

MPU的核心价值在于内存安全防护和资源隔离,以下是其典型应用场景,结合核心功能说明其实际意义:

RTOS任务隔离(多任务系统核心需求):在RTOS(实时操作系统)中,多个任务共享同一内存空间,若未隔离可能因任务异常(如栈溢出、野指针)导致系统崩溃。MPU通过区域划分与权限控制实现任务隔离。

关键数据/代码保护(防篡改与误操作):系统中某些数据或代码(如固件、校准参数、加密密钥)一旦被修改,可能导致功能失效或安全漏洞。MPU通过只读或禁止访问权限保护这些资源。

外设寄存器访问控制(防止误操作外设):外设寄存器(如GPIO、UART的控制寄存器)的错误修改可能导致外设异常。MPU限制仅特权级代码(如内核)可修改关键寄存器。

内存越界检测(开发调试辅助):开发阶段,程序可能因数组越界、野指针等错误访问未分配内存。MPU将未使用的内存区域配置为NO_ACCESS(无访问权限),触发异常以快速定位问题。

安全启动与固件保护(系统级安全需求):在需要安全启动的系统中(如医疗设备、工业控制),MPU保护启动代码和安全配置区域,确保系统从可信代码启动。

4注意事项

引脚驱动能力:MCO输出频率不宜过高(需低于GPIO的最大可靠频率,通常建议不超过50MHz),高频时需考虑信号完整性(如阻抗匹配)。

时钟源使能顺序:配置MCO前需确保时钟源已稳定(如HSE起振完成),避免输出无效信号。

5程序设计

MPU的核心配置通过RASR(Region Attribute and Size Register,区域属性与大小寄存器)实现,具体配置步骤如下:

5.1内存区域大小宏(SIZE字段)

#define MPU_DEFS_RASR_SIZE_1KB      (0x09< < MPU_RASR_SIZE_Pos)
#define MPU_DEFS_RASR_SIZE_16KB      (0x0D < < MPU_RASR_SIZE_Pos)
#define MPU_DEFS_RASR_SIZE_64KB      (0x0F < < MPU_RASR_SIZE_Pos)

作用:设置内存区域的大小。

原理:RASR的SIZE字段(位 [5:0])用于定义区域大小,实际大小为2(SIZE+1)字节。

0x09对应SIZE=9,计算得210=1024字节(1KB);

0x0D对应SIZE=13,计算得214=16384字节(16KB);

0x0F对应SIZE=15,计算得216=65536字节(64KB)。

5.2内存类型与缓存策略宏(C和S字段)

#define MPU_DEFS_NORMAL_MEMORY_WT   (MPU_RASR_C_Msk| MPU_RASR_S_Msk)

作用:定义普通内存的直写(Write-Through, WT)缓存策略。

原理:

C_Msk(位 [16]):使能缓存(Cacheable);

S_Msk(位 [18]):标记为共享内存(Sharable),用于多主设备(如 CPU与 DMA)访问时的一致性;

组合后表示“可缓存、共享的直写内存”(写操作直接更新内存,不经过缓存)。

5.3访问权限宏(AP字段)

#define MPU_DEFS_RASE_AP_FULL_ACCESS (0x3 < < MPU_RASR_AP_Pos)

作用:设置内存区域的完全访问权限(无限制)。

原理:RASR的AP字段(位 [23:21])定义访问权限,0x3表示:

特权模式(Privileged)允许读/写;

用户模式(User)允许读/写(无限制访问)。

5.4设置内存保护规则

内存保护规则由MPU_Set()函数实现,函数内容如下:

{
    SCB->SHCSR|= SCB_SHCSR_MEMFAULTENA_Msk;
 
    mpu_disable();
    mpu_region_config(0,0x8000000, MPU_DEFS_RASR_SIZE_64KB,
                      MPU_DEFS_NORMAL_MEMORY_WT | MPU_DEFS_RASE_AP_FULL_ACCESS| MPU_RASR_ENABLE_Msk);
    mpu_region_config(1,0x20000000, MPU_DEFS_RASR_SIZE_16KB,
                      MPU_DEFS_NORMAL_MEMORY_WT | MPU_DEFS_RASE_AP_FULL_ACCESS| MPU_RASR_ENABLE_Msk);
    mpu_region_config(2, USART1_BASE, MPU_DEFS_RASR_SIZE_1KB,
                      MPU_DEFS_NORMAL_MEMORY_WT | MPU_DEFS_RASE_AP_FULL_ACCESS| MPU_RASR_ENABLE_Msk);
    mpu_region_disable(3);
    mpu_region_disable(4);
    mpu_region_disable(5);
    mpu_region_disable(6);
    mpu_region_disable(7);
 
    mpu_enable();
}

该函数首先使能了内存错误(MemFault)异常,以便检测非法内存访问;随后禁用MPU(配置前需禁用以避免冲突),依次配置3个内存区域:

区域0(起始地址0x8000000,64KB,对应Flash)

区域1(起始地址0x20000000,16KB,对应RAM)

区域2(起始地址USART1_BASE,1KB,对应串口1外设寄存器)

这3个区域均设置为“直写缓存+完全访问权限”并启用;接着禁用未使用的区域3~7(MPU通常支持8个区域,未使用的需禁用以防意外访问);最后启用MPU,使所有配置的内存保护规则生效,确保Flash、RAM及串口外设的访问受限于预设的大小、权限和缓存策略,提升系统内存访问的安全性与稳定性。

5.5主函数main()

主函数main()的内容如下:

int main(void)
{
    RCC_ClocksTypeDef clocks;
 
    delay_init();
    UART_Configuration(115200);
    RCC_GetClocksFreq(&clocks);
 
    printf("n");
    printf("SYSCLK: %3.1fMhz, HCLK: %3.1fMhz, PCLK1: %3.1fMhz, PCLK2: %3.1fMhz, ADCCLK: %3.1fMhzn",
           (float)clocks.SYSCLK_Frequency /1000000,(float)clocks.HCLK_Frequency/1000000,
           (float)clocks.PCLK1_Frequency /1000000,(float)clocks.PCLK2_Frequency/1000000,(float)clocks.ADCCLK_Frequency/1000000);
    printf("MPU Test.n");
 
    printf("MPU->TYPE, Value: 0x%xn", MPU->TYPE);
    printf("MPU->CTRL, Value: 0x%xn", MPU->CTRL);
    printf("MPU->RNR, Value: 0x%xn", MPU->RNR);
    printf("MPU->RBAR, Value: 0x%xn", MPU->RBAR);
    printf("MPU->RASR, Value: 0x%xn", MPU->RASR);
    printf("MPU->RBAR_A1;, Value: 0x%xn", MPU->RBAR_A1);
    printf("MPU->RASR_A1, Value: 0x%xn", MPU->RASR_A1);
    printf("MPU->RBAR_A2, Value: 0x%xn", MPU->RBAR_A2);
    printf("MPU->RASR_A2, Value: 0x%xn", MPU->RASR_A2);
    printf("MPU->RBAR_A3, Value: 0x%xn", MPU->RBAR_A3);
    printf("MPU->RASR_A3, Value: 0x%xnn", MPU->RASR_A3);
 
    printf("LimiteToPrivilege Accessn");
    SHOW_PrintFlash(0x08000000,64);
 
    MPU_Set();
 
    printf("LimiteToUser Accessn");
    SHOW_PrintFlash(0x08000000,64);
    while(1);
}

main()函数是MPU功能测试的主程序:首先初始化延时函数和串口(波特率115200),调用标准库获取系统各时钟域频率(SYSCLK、HCLK等)并打印;接着打印MPU核心寄存器(TYPE、CTRL等)的初始状态用于调试;

随后调用MPU_Set配置内存保护规则,对比配置前后对Flash起始地址(0x08000000)前64字节的访问结果(特权模式与用户模式),验证MPU对内存访问权限的限制效果;最后进入无限循环保持运行。

6下载验证

程序下载运行之后,首先打印了时钟信息,接着是MPU的相关寄存器初始状态信息,然后用特权限制访问内存成功,之后设置为用户访问,再次访问则无法读取内容:

wKgZO2hjk9mAG2msAAS5JCifZR8071.pngwKgZPGhjk9qASh6cAAUAcQQVxjI260.png

7总结

MCO功能通过灵活配置时钟源和分频系数,为W55MH32提供了对外输出时钟的能力,简化了系统设计中的时钟同步问题。先理解其应用场景(如多芯片同步、调试测量),再掌握配置步骤(时钟源选择、GPIO设置、分频配置),可更高效地应用于实际项目中。

WIZnet是一家无晶圆厂半导体公司,成立于1998年。产品包括互联网处理器iMCU™,它采用TOE(TCP/IP卸载引擎)技术,基于独特的专利全硬连线TCP/IP。iMCU™面向各种应用中的嵌入式互联网设备。

WIZnet在全球拥有70多家分销商,在香港、韩国、美国设有办事处,提供技术支持和产品营销。

香港办事处管理的区域包括:澳大利亚、印度、土耳其、亚洲(韩国和日本除外)。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45333

    浏览量

    663280
  • 以太网
    +关注

    关注

    41

    文章

    5923

    浏览量

    179470
  • 封装
    +关注

    关注

    128

    文章

    9136

    浏览量

    147859
  • WIZnet
    +关注

    关注

    3

    文章

    20

    浏览量

    42742
  • MPU
    MPU
    +关注

    关注

    0

    文章

    442

    浏览量

    51032
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    大立科技邀您共赴2025中国国际电力设备及技术展览会

    电力人的年度狂欢——第三十二届中国国际电力设备及技术展览会 (EP Shanghai 2025)(以下简称EP电力展) 将于2025年11月18-20日,在上海新国际博览中心举办。
    的头像 发表于 11-19 17:39 1007次阅读

    FreeRTOS和uC/OS-II的功能特性

    。 多核支持 (FreeRTOS SMP): 有官方对称多处理 (SMP) 版本,支持多核处理器。 MPU 支持: 支持内存保护单元 (MPU),用于任务隔离和提升可靠性/安全性。 P
    发表于 11-17 08:17

    CW32A系列(车规级 MCU)介绍

    加密、内存保护单元MPU)、看门狗定时器。 典型应用:车身控制模块(BCM)、车载传感器、动力电池管理(BMS)、ADAS 辅助驾驶。
    发表于 11-17 06:30

    芯驰科技亮相2025中国汽车工程学会年会暨展览会

    近日,第三十二届中国汽车工程学会年会暨展览会(SAECCE 2025)和汽车创新技术展(AITX)在重庆盛大开幕。作为全场景智能车芯引领企业,芯驰科技受邀参加,与来自汽车政产学研各界嘉宾共议产业创新需求,共绘智能网联新蓝图。
    的头像 发表于 10-30 14:08 1359次阅读

    UT斯达康亮相第三十届AI赋能视听媒体融合活动

    第三十届AI赋能视听媒体融合活动(ICTC 2025)近日在杭州举办,成功汇聚业界领袖,共同探讨人工智能、网络和媒体的融合。
    的头像 发表于 10-30 13:52 157次阅读

    黑芝麻智能斩获AITX热点创新技术奖

    近日,在第三十二届中国汽车工程学会年会暨展览会(SAECCE 2025)与汽车创新技术展(AITX)举办期间,备受行业瞩目的AITX热点创新技术奖评选结果正式揭晓。黑芝麻智能自主研发的安全智能底座,凭借在智能汽车跨域融合领域的突破性技术创新成功斩获该奖项,充分彰显其在全球汽车科技创新领域的领先地位。
    的头像 发表于 10-28 17:07 560次阅读

    长安汽车斩获SAECCE 2025多项荣誉

    10月22日,第三十二届中国汽车工程学会年会暨展览会(SAECCE)在重庆科学会堂盛大启幕,中国长安汽车集团有限公司荣获11项荣誉,充分展现了在中国汽车工业转型升级中的技术实力与行业影响力。
    的头像 发表于 10-24 10:33 414次阅读

    RTThread支持内存保护功能吗?

    以前在其他视频里看过说单片机可以实现线程崩溃不会影响系统运行, 我一直不知道怎么实现的, 最近了解到 MPU和Zephyr的内存保护, 这些在RTthread中可以实现吗
    发表于 10-14 07:14

    边聊安全 | 功能安全开发之MPU

    上海磐时PANSHI“磐时,做汽车企业的安全智库”功能安全开发之MPU写在前面:在与从事功能安全开发行业的同事以及SASETECH社区的成员讨论时,笔者经常被问及有关芯片内存保护单元MPU
    的头像 发表于 09-05 16:21 2015次阅读
    边聊安全 | 功能安全开发之<b class='flag-5'>MPU</b>

    RK3568驱动指南|第十二篇 GPIO子系统-第130 GPIO的调试方法

    RK3568驱动指南|第十二篇 GPIO子系统-第130 GPIO的调试方法
    的头像 发表于 06-03 11:32 984次阅读
    RK3568驱动指南|第<b class='flag-5'>十二</b>篇 GPIO子系统-第130<b class='flag-5'>章</b> GPIO的调试方法

    MPU的性能评估方法

    MPU(Microprocessor Unit,微处理器单元)的性能评估是确保其在实际应用中能够满足需求的重要环节。以下是一些常用的MPU性能评估方法: 一、基准测试(Benchmark
    的头像 发表于 01-08 09:39 1269次阅读

    MPU与数字信号处理的关系

    ,特别是在音频、视频和通信领域。 MPU的定义与功能 微处理器单元MPU)是一种集成电路,它集成了中央处理单元(CPU)、内存、输入/输出
    的头像 发表于 01-08 09:29 1025次阅读

    MPU与MCU的区别

    和应用上存在显著差异。 MPU与MCU的定义 微处理器单元MPU) : MPU是一种通用的中央处理单元,它主要设计用于执行复杂的计算任务。
    的头像 发表于 01-08 09:25 2624次阅读

    《DNESP32S3使用指南-IDF版_V1.6》第三十二章 IIC_QMA6100P实验

    第三十二章 IIC_QMA6100P实验 前面,我们介绍了IIC驱动XL9555、AP3216C、AT24C02等器件,本章我们将向大家介绍如何使用IIC来驱动QMA6100P三轴加速度计,获取X
    发表于 12-26 09:45

    上能电气亮相2024上海国际电力设备及技术展览会

    近日,第三十二届上海国际电力设备及技术展览会(EP Shanghai 2024)暨上海国际储能技术应用展览会(ES Shanghai 2024)在上海新国际博览中心正式落下帷幕。上能电气携全球领先的电能质量解决方案重磅亮相,助推电力系统建设迈向新时代。
    的头像 发表于 12-10 13:47 840次阅读