單芯片解決方案,開啟全新體驗——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的無限可能。
第三十二章 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)和區域大?。⊿ize),將物理內存劃分為多個獨立區域。
大小限制:區域大小必須是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的相關寄存器初始狀態信息,然后用特權限制訪問內存成功,之后設置為用戶訪問,再次訪問則無法讀取內容:
7總結
MCO功能通過靈活配置時鐘源和分頻系數,為W55MH32提供了對外輸出時鐘的能力,簡化了系統設計中的時鐘同步問題。先理解其應用場景(如多芯片同步、調試測量),再掌握配置步驟(時鐘源選擇、GPIO設置、分頻配置),可更高效地應用于實際項目中。
WIZnet是一家無晶圓廠半導體公司,成立于1998年。產品包括互聯網處理器iMCU?,它采用TOE(TCP/IP卸載引擎)技術,基于獨特的專利全硬連線TCP/IP。iMCU?面向各種應用中的嵌入式互聯網設備。
WIZnet在全球擁有70多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。
香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。
審核編輯 黃宇
-
單片機
+關注
關注
6067文章
44969瀏覽量
649177 -
以太網
+關注
關注
40文章
5619瀏覽量
175453 -
封裝
+關注
關注
128文章
8626瀏覽量
145197 -
WIZnet
+關注
關注
3文章
20瀏覽量
42423 -
MPU
+關注
關注
0文章
412瀏覽量
49809
發布評論請先 登錄
第二十二章 TIM——高級定時器

RK3568驅動指南|第十二篇 GPIO子系統-第135章 GPIO子系統與pinctrl子系統相結合實驗

MPU的性能評估方法
MPU與數字信號處理的關系
MPU與MCU的區別
MPU微處理器的工作原理
首頁-2025年第三十二屆上海國際電力設備及技術展覽會 EP Shanghai

評論