單芯片解決方案,開啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來說,一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲(chǔ)與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨(dú)立的32KB以太網(wǎng)收發(fā)緩存,可供8個(gè)獨(dú)立硬件socket使用。如此配置,真正實(shí)現(xiàn)了All-in-One解決方案,為開發(fā)者提供極大便利。
在封裝規(guī)格上,W55MH32 提供了兩種選擇:QFN68和QFN100。
W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、3個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN以及1個(gè)USB2.0。在保持與同系列其他版本一致的核心性能基礎(chǔ)上,僅減少了部分GPIO以及SDIO接口,其他參數(shù)保持一致,性價(jià)比優(yōu)勢(shì)顯著,尤其適合網(wǎng)關(guān)模組等對(duì)空間布局要求較高的場(chǎng)景。緊湊的尺寸和精簡(jiǎn)化外設(shè)配置,使其能夠在有限空間內(nèi)實(shí)現(xiàn)高效的網(wǎng)絡(luò)連接與數(shù)據(jù)交互,成為物聯(lián)網(wǎng)網(wǎng)關(guān)、邊緣計(jì)算節(jié)點(diǎn)等緊湊型設(shè)備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設(shè)資源,適用于需要多接口擴(kuò)展的復(fù)雜工控場(chǎng)景,軟件使用方法一致。更多信息和資料請(qǐng)進(jìn)入http://www.w5500.com/網(wǎng)站或者私信獲取。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32Q這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評(píng)估芯片性能。
若您想獲取芯片和開發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價(jià)格等,歡迎訪問官方網(wǎng)頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。
第二十五章 FLASH
1 W55MH32 FLASH 簡(jiǎn)介
WMH32的閃存模塊由主存儲(chǔ)器、信息塊和閃存存儲(chǔ)器接口寄存器等 3 部分組成。
主存儲(chǔ)器,該部分用來存放代碼和數(shù)據(jù)常數(shù)(如 const 類型的數(shù)據(jù))。對(duì)于大容量產(chǎn)品,其被劃分為 256 頁,每一頁 2K 字節(jié)。注意,小容量和中容量產(chǎn)品則每頁只有 1K 字節(jié)。從上圖可以看出主存儲(chǔ)器的起始地址就是 0x08000000,B0、B1 都接 GND 的時(shí)候,就是從0x08000000 開始運(yùn)行代碼的。
信息塊,該部分分為 2 個(gè)小部分,其中啟動(dòng)程序代碼,用來存儲(chǔ) ST 自帶的啟動(dòng)程序,用來串口下載代碼,當(dāng) B0 接 3V3,B1 接 GND 的時(shí)候,運(yùn)行的就是這部分代碼。用戶選中字節(jié),則一般用于配置寫保護(hù)、讀保護(hù)等功能,本章不作介紹了。
閃存存儲(chǔ)器接口寄存器,該部分用于控制閃存讀寫等,是整個(gè)閃存模塊的控制結(jié)構(gòu)。對(duì)主存儲(chǔ)器和信息塊的寫入由內(nèi)嵌的閃存編程/擦除控制器(FPEC)管理;編程與擦除的高電壓由內(nèi)部產(chǎn)生。在執(zhí)行閃存寫操作時(shí),任何對(duì)閃存的讀操作都會(huì)鎖住總線,在寫操作完成后讀操作才能正確地進(jìn)行。既在進(jìn)行寫或擦除操作時(shí),不能進(jìn)行代碼或數(shù)據(jù)的讀取操作。
型號(hào) | W55MH32L | W55MH32Q |
Flash(KB) | 1024 | 1024 |
SRAM(KB) | 96 | 96 |
高級(jí)定時(shí)器 | 2 | 2 |
通用定時(shí)器 | 10 | 10 |
基本定時(shí)器 | 2 | 2 |
SPI | 2 | 2 |
I2C | 2 | 2 |
USART/UART | 5 | 3 |
USB | 1 | 1 |
CAN | 1 | 1 |
SDIO | 1 | - |
Ethernet | 1 | 1 |
GPIO 端口 | 66 | 36 |
12 位 ADC(通道數(shù)) | 3(12 個(gè)通道) | 3(12 個(gè)通道) |
12 位 DAC(通道數(shù)) | 2(2 個(gè)通道) | 2(2 個(gè)通道) |
隨機(jī)數(shù)模塊 | 支持 | 支持 |
硬件加密算法單元 | 支持 | 支持 |
頁大小(K 字節(jié)) | 4 | 4 |
CPU 頻率 | 216M | 216M |
工作電壓 | 2.0 - 3.6V | 2.0 - 3.6V |
工作溫度 | -40 - +85℃ | -40 - +85℃ |
2 閃存的讀取
內(nèi)置閃存模塊可以在通用地址空間直接尋址,任何 32 位數(shù)據(jù)的讀操作都能訪問閃存模塊的內(nèi)容并得到相應(yīng)的數(shù)據(jù)。讀接口在閃存端包含一個(gè)讀控制器,還包含一個(gè) AHB 接口與 CPU銜接。這個(gè)接口的主要工作是產(chǎn)生讀內(nèi)存的控制信號(hào)并預(yù)取 CPU 要求的指令塊,預(yù)取指令塊僅用于在 I-Code 總線上的取指操作,數(shù)據(jù)常量是通過 D-Code 總線訪問的。這兩條總線的訪問目標(biāo)是相同的閃存模塊,訪問 D-Code 將比預(yù)取指令優(yōu)先級(jí)高。
這里要特別留意一個(gè)閃存等待時(shí)間,因?yàn)?CPU 運(yùn)行速度比 FLASH 快得多,W55MH32的 FLASH 最快訪問速度≤24Mhz,如果 CPU 頻率超過這個(gè)速度,那么必須加入等待時(shí)間,比如我們一般使用 72Mhz 的主頻,那么 FLASH 等待周期就必須設(shè)置為 2,該設(shè)置通過FLASH_ACR 寄存器設(shè)置。
例如,我們要從地址 addr,讀取一個(gè)半字(半字為 16 位,字為 32 位),可以通過如下的
語句讀取:
data = *(vu16*)addr;
將 addr 強(qiáng)制轉(zhuǎn)換為 vu16 指針,然后取該指針?biāo)赶虻牡刂返闹担吹玫搅?addr 地址的值。類似的,將上面的 vu16 改為 vu8,即可讀取指定地址的一個(gè)字節(jié)。相對(duì) FLASH 讀取來說,W55MH32 FLASH 的寫就復(fù)雜一點(diǎn)了。
3 閃存的編程和擦除
W55MH32 的閃存編程是由 FPEC(閃存編程和擦除控制器)模塊處理的,這個(gè)模塊包含 7 個(gè) 32位寄存器,它們分別是:
?FPEC 鍵寄存器(FLASH_KEYR)
?選擇字節(jié)鍵寄存器(FLASH_OPTKEYR)
?閃存控制寄存器(FLASH_CR)
?閃存狀態(tài)寄存器(FLASH_SR)
?閃存地址寄存器(FLASH_AR)
? 選擇字節(jié)寄存器(FLASH_WRPR)
其中 FPEC 鍵寄存器總共有 3 個(gè)鍵值:
?RDPRT 鍵 = 0X0000 00A5
?KEY1 = 0X4567 0123
?KEY2 = 0XCDEF 89AB
W55MH32 復(fù)位后,F(xiàn)PEC 模塊是被保護(hù)的,不能寫入 FLASH_CR 寄存器;通過寫入特定的序列到 FLASH_KEYR 寄存器可以打開 FPEC 模塊(即寫入 KEY1 和 KEY2),只有在寫保護(hù)被解除后,我們才能操作相關(guān)寄存器。
W55MH32 閃存的編程每次必須寫入 16 位(不能單純的寫入 8 位數(shù)據(jù)),當(dāng) FLASH_CR 寄存器的 PG 位為‘1’時(shí),在一個(gè)閃存地址寫入一個(gè)半字將啟動(dòng)一次編程;寫入任何非半字的數(shù)據(jù),F(xiàn)PEC 都會(huì)產(chǎn)生總線錯(cuò)誤。在編程過程中(BSY 位為’1’),任何讀寫內(nèi)存的操作都會(huì)使CPU 暫停,直到此次閃存編程結(jié)束。同樣,W55MH32 的 FLASH 在編程的時(shí)候,也必須要求其寫入地址的 FLASH 是被擦除了的(其值必須是 0xFFFF),否則無法寫入,在 FLASH_SR 寄存器的 PGERR 位將得到一個(gè)警告。W55MH32 的 FLASH 編程過程如圖所示:
閃存編程過程
從上圖可以得到閃存的編程順序如下:
1)檢查 FLASH_CR 的 LOCK 是否解鎖,如果沒有則先解鎖
2)檢查 FLASH_SR 寄存器的 BSY 位,以確認(rèn)沒有其他正在進(jìn)行的編程操作
3)設(shè)置 FLASH_CR 寄存器的 PG 位為‘1’
4)在指定的地址寫入要編程的半字
5)等待 BSY 位變?yōu)椤?’
6)讀出寫入地址并驗(yàn)證數(shù)據(jù)
前面提到,我們?cè)?W55MH32 的 FLASH 編程的時(shí)候,要先判斷縮寫地址是否被擦出了,所以,我們有必要再介紹一下 W55MH32 的閃存擦除,W55MH32 的閃存擦除分為兩種:頁擦除和整片擦除。頁擦除過程如圖 所示:
閃存頁擦除過程
從上圖可以看出,W55MH32 的頁擦除順序?yàn)椋?/p>
1)檢查 FLASH_CR 和 LOCK 是否解鎖,如果沒有則先解鎖
2)檢查 FLASH_SR 寄存器的 BSY 位,以確認(rèn)沒有其他正在進(jìn)行的閃存操作
3)設(shè)置 FLASH_CR 寄存器的 PER 位為‘1’
4)用 FLASH_AR 寄存器選擇要擦除的頁
5)設(shè)置 FLASH_CR 寄存器的 STRT 位為‘1’
6)等待 BSY 位變?yōu)椤?’
7)讀出被擦除的頁并做驗(yàn)證
本章我們只用到了 W55MH32 頁擦除功能,整片擦除功能我們?cè)谶@里就不介紹了。
4 FLASH 寄存器
通過上面的講解,我們基本對(duì) W55MH32 閃存的讀寫執(zhí)行步驟有所了解。接下來,我們介紹本實(shí)驗(yàn)需要用到的一些 FLASH 寄存器。
4.1 FPEC 鍵寄存器(FLASH_KEYR)
FPEC 鍵寄存器描述如圖 所示:
FLASH_KEYR 寄存器
該寄存器主要用來解鎖 FPEC,必須在該寄存器寫入特定的序列(KEY1 和 KEY2)解鎖后,才能對(duì) FLASH_CR 寄存器進(jìn)行寫操作。
4.2 FLASH 控制寄存器(FLASH_CR)
FLASH 控制寄存器描述如圖所示:
圖 FLASH_CR 寄存器
該寄存器我們本章只用到了它的 LOCK、STRT、PER 和 PG 等 4 個(gè)位。LOCK 位,該位用于指示 FLASH_CR 寄存器是否被鎖住,該位在檢測(cè)到正確的解鎖序列后,硬件將其清零。在一次不成功的解鎖操作后,在下次系統(tǒng)復(fù)位之前,該位將不再改變。
STRT 位,該位用于開始一次擦除操作。在該位寫入 1,將執(zhí)行一次擦除操作。
PER 位,該位用于選擇頁擦除操作,在頁擦除的時(shí)候,需要將該位置 1。
PG 位,該位用于選擇編程操作,在往 FLASH 寫數(shù)據(jù)的時(shí)候,該位需要置 1。
其他位,我們就不在這里介紹了,請(qǐng)大家參考《W55MH32xxx參考手冊(cè)》。
4.3 閃存狀態(tài)寄存器(FLASH_SR)
閃存狀態(tài)寄存器描述如圖所示:
圖 FLASH_SR 寄存器
該寄存器主要用來指示當(dāng)前 FPEC 的操作編程狀態(tài)。由于寄存器中描述比較詳細(xì),這里就不重復(fù)了。
4.4 閃存地址寄存器(FLASH_AR)
閃存地址寄存器描述如圖所示:
圖FLASH_AR 寄存器
該寄存器在本章,我們主要用來設(shè)置要擦除的頁。關(guān) 于 W55MH32 FLASH 的 介 紹 , 我 們 就 介 紹 到 這 里 。 更 詳 細(xì) 的 介 紹 , 可 以 參 考《W55MH32參考手冊(cè)》。
5 例程設(shè)計(jì)
5.1 FLASH_Eeprom
該通過例程串口輸出系統(tǒng)時(shí)鐘信息和測(cè)試提示,在無限循環(huán)里不斷對(duì) WIZnet FLASH 進(jìn)行讀寫操作,并且把讀取的數(shù)據(jù)通過串口輸出,以此實(shí)現(xiàn)對(duì) FLASH 的讀寫測(cè)試。
5.1 函數(shù)聲明
聲明了UART_Configuration()函數(shù),其功能是配置串口參數(shù)。
5.2 常量與數(shù)組定義
定義了一個(gè)常量字符串?dāng)?shù)組TEXT_Buffer,內(nèi)容為"WIZnet FLASH TEST"。
借助SIZE宏定義獲取數(shù)組長(zhǎng)度。
設(shè)定了FLASH_SAVE_ADDR常量,此為 FLASH 的保存地址。
5.3 主函數(shù)main()
int main(void) { uint8_t datatemp[SIZE], i; 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("FLASH EEPROM Tset.n"); while (1) { WIZFLASH_Write(FLASH_SAVE_ADDR, (u16 *)TEXT_Buffer, SIZE); WIZFLASH_Read(FLASH_SAVE_ADDR, (u16 *)datatemp, SIZE); for (i = 0; i < SIZE; i++) { printf("%sn", datatemp); } memset(datatemp, 0x00, sizeof(datatemp)); delay_ms(1000); } }
定義了一個(gè)用于存儲(chǔ)從 FLASH 讀取數(shù)據(jù)的數(shù)組datatemp,以及一個(gè)循環(huán)變量i。
初始化延遲函數(shù)、串口配置,并且獲取系統(tǒng)時(shí)鐘頻率。
通過printf()函數(shù)輸出系統(tǒng)時(shí)鐘頻率信息以及測(cè)試提示信息。
進(jìn)入一個(gè)無限循環(huán):調(diào)用WIZFLASH_Write()函數(shù)把TEXT_Buffer數(shù)組內(nèi)容寫入到指定的 FLASH 地址。
?調(diào)用WIZFLASH_Read()函數(shù)從該地址讀取數(shù)據(jù)到datatemp數(shù)組。
?運(yùn)用for循環(huán)遍歷datatemp數(shù)組,然后通過printf()函數(shù)輸出數(shù)組內(nèi)容。
?調(diào)用memset()函數(shù)把datatemp數(shù)組清零。
?調(diào)用delay_ms()函數(shù)延遲 1 秒。
5.4 串口配置函數(shù)UART_Coniguration()
void UART_Configuration(uint32_t bound) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = bound; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART_TEST, &USART_InitStructure); USART_Cmd(USART_TEST, ENABLE); }
對(duì) GPIO 和 USART 的初始化結(jié)構(gòu)體進(jìn)行定義。
使能 USART1 和 GPIOA 的時(shí)鐘。
配置 GPIOA 的引腳 9 為復(fù)用推挽輸出模式,引腳 10 為浮空輸入模式。
對(duì) USART 的波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)等參數(shù)進(jìn)行配置。
初始化 USART 并使能。
5.5 字符發(fā)送函數(shù)SER_PutChar()
int SER_PutChar(int ch) { while (!USART_GetFlagStatus(USART_TEST, USART_FLAG_TC)); USART_SendData(USART_TEST, (uint8_t)ch); return ch; }
等待串口發(fā)送完成標(biāo)志位USART_FLAG_TC置位。
把字符發(fā)送到串口。
5.6 重定向函數(shù)fputc()
若要發(fā)送的字符是換行符n,則先發(fā)送回車符r。
調(diào)用SER_PutChar()函數(shù)發(fā)送字符。
6 下載驗(yàn)證
6.1 FLASH_Eeprom
進(jìn)入主循環(huán)后,程序會(huì)不斷執(zhí)行以下操作:
把TEXT_Buffer數(shù)組中的字符串 "WIZnet FLASH TEST" 寫入到指定的 FLASH 地址。
從該 FLASH 地址讀取數(shù)據(jù)到datatemp數(shù)組。
借助printf()函數(shù)將datatemp數(shù)組的內(nèi)容通過串口輸出。
由于for循環(huán)的存在,每次讀取到的數(shù)據(jù)會(huì)被重復(fù)輸出SIZE次。不過,原代碼里printf("%sn", datatemp);存在錯(cuò)誤,它會(huì)把整個(gè)datatemp數(shù)組當(dāng)作字符串輸出,而不是逐個(gè)字符輸出。正確的做法應(yīng)該是printf("%c", datatemp[i]);。修正后,串口會(huì)每隔 1 秒輸出一次 "WIZnet FLASH TEST"。
WIZnet 是一家無晶圓廠半導(dǎo)體公司,成立于 1998 年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術(shù),基于獨(dú)特的專利全硬連線 TCP/IP。iMCU? 面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。
WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營銷。
香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。
審核編輯 黃宇
-
寄存器
+關(guān)注
關(guān)注
31文章
5430瀏覽量
123939 -
FlaSh
+關(guān)注
關(guān)注
10文章
1673瀏覽量
151337 -
閃存編程
+關(guān)注
關(guān)注
0文章
12瀏覽量
6761
發(fā)布評(píng)論請(qǐng)先 登錄
《DNK210使用指南 -CanMV版 V1.0》第二十五章 LCD圖片顯示實(shí)驗(yàn)
【正點(diǎn)原子FPGA連載】第二十七章gpio子系統(tǒng)下的LED驅(qū)動(dòng)實(shí)驗(yàn)-領(lǐng)航者ZYNQ之linux開發(fā)指南
在顯示器上顯示出了靜態(tài)的彩條圖案
第二十五講 同步計(jì)數(shù)器

模擬電路網(wǎng)絡(luò)課件 第二十五節(jié):集成運(yùn)算放大器中的電流源

【正點(diǎn)原子FPGA連載】第二十五章HDMI方塊移動(dòng)實(shí)驗(yàn) -摘自【正點(diǎn)原子】新起點(diǎn)之FPGA開發(fā)指南_V2.1

2023高交會(huì)|第二十五屆中國國際高新技術(shù)交易會(huì)·招商工作全面啟動(dòng)

火熱預(yù)定中2023第二十五屆中國國際高新技術(shù)交易會(huì)11.15-11.19日
火熱招商--2023第二十五屆中國國際高新技術(shù)交易會(huì)11.15-11.19日
中軟國際與深開鴻邀您相約第二十五屆中國國際軟件博覽會(huì)
上海貝嶺榮獲“第二十五屆上市公司金信披獎(jiǎng)”
鐳神智能榮獲第二十五屆高交會(huì)優(yōu)秀產(chǎn)品獎(jiǎng)

評(píng)論