女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

第二十三章 IAP

W55MH32 ? 來(lái)源:W55MH32 ? 作者:W55MH32 ? 2025-05-29 15:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開(kāi)啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)

W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶(hù)帶來(lái)前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來(lái)說(shuō),一顆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解決方案,為開(kāi)發(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ù)保持一致,性?xún)r(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ò)通信安全再添保障。

為助力開(kāi)發(fā)者快速上手與深入開(kāi)發(fā),基于W55MH32Q這顆芯片,WIZnet精心打造了配套開(kāi)發(fā)板。開(kāi)發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開(kāi)發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開(kāi)發(fā)者全面評(píng)估芯片性能。

若您想獲取芯片和開(kāi)發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價(jià)格等,歡迎訪問(wèn)官方網(wǎng)頁(yè):http://www.w5500.com/,我們期待與您共同探索W55MH32的無(wú)限可能。

wKgZO2gbOfaAVPzkACJSygzv-rI600.png

第二十三章 IAP

IAP,即在應(yīng)用編程。通俗地說(shuō)法就是“程序升級(jí)”。產(chǎn)品階段設(shè)計(jì)完成后,在脫離實(shí)驗(yàn)室的調(diào)試環(huán)境下,如果想對(duì)產(chǎn)品做功能升級(jí)或 BUG 修復(fù)會(huì)十分麻煩,如果硬件支持,在出廠時(shí)預(yù)留一套升級(jí)固件的流程,就可以很好解決這個(gè)問(wèn)題,IAP 技術(shù)就是為此而生的。在之前的FLASH 模擬 EEPROM 實(shí)驗(yàn)里面,我們學(xué)習(xí)了 W55MH32的 FLASH 自編程,本章我們將結(jié)合 FLASH 自編程的知識(shí),通過(guò) W55MH32的串口實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 IAP 功能。

本章分為如下幾個(gè)小節(jié):

1 IAP 簡(jiǎn)介

2 例程設(shè)計(jì)

3 下載驗(yàn)證

1 IAP 簡(jiǎn)介

IAP(In Application Programming)即在應(yīng)用編程。在講解 W55MH32 的啟動(dòng)模式時(shí)我們已經(jīng)知道 W55MH32 可以通過(guò)設(shè)置 MSP 的方式從不同的地址啟動(dòng):包括 Flash 地址、RAM 地址等,在默認(rèn)方式下,我們的嵌入式程序是以連續(xù)二進(jìn)制的方式燒錄到 W55MH32 的可尋址 Flash 區(qū)域上的。如果我們用的 Flash 容量大到可以存儲(chǔ)兩個(gè)或多個(gè)的完整程序,在保證每個(gè)程序完整的情況下,上電后的程序通過(guò)修改 MSP 的方式,就可以保證一個(gè)單片機(jī)上有多個(gè)有功能差異的嵌入式軟件,這就是我們要講解的 IAP 的設(shè)計(jì)思路。

IAP 是用戶(hù)自己的程序在運(yùn)行過(guò)程中對(duì) User Flash 的部分區(qū)域進(jìn)行燒寫(xiě),目的是為了在產(chǎn)品發(fā)布后可以方便地通過(guò)預(yù)留的通信口對(duì)產(chǎn)品中的固件程序進(jìn)行更新升級(jí),由于用戶(hù)可以自定義通訊方式和自定義加密,使得 IAP 在使用上非常靈活。通常實(shí)現(xiàn) IAP 功能時(shí),即用戶(hù)程序運(yùn)行中作自身的更新操作,需要在設(shè)計(jì)固件程序時(shí)編寫(xiě)兩個(gè)項(xiàng)目代碼,第一個(gè)程序檢查有無(wú)升級(jí)需求,并通過(guò)某種通信方式(如 USB、USART)接收程序或數(shù)據(jù),執(zhí)行對(duì)第二部分代碼的更新;第二個(gè)項(xiàng)目代碼才是真正的功能代碼。這兩部分項(xiàng)目代碼都同時(shí)燒錄在 User Flash 中,當(dāng)芯片上電后,首先是第一個(gè)項(xiàng)目代碼開(kāi)始運(yùn)行,它做如下操作:

1)檢查是否需要對(duì)第二部分代碼進(jìn)行更新

2)如果不需要更新則轉(zhuǎn)到 4)

3)執(zhí)行更新操作

4)跳轉(zhuǎn)到第二部分代碼執(zhí)行

一部分代碼必須通過(guò)其它手段,如 JTAG、ISP 等方式燒錄,常常是燒錄后就不再進(jìn)行更改;第二部分代碼可以使用第一部分代碼 IAP 功能燒入,也可以和第一部分代碼一起燒入,以后需要程序更新時(shí)再通過(guò)第一部分 IAP 代碼更新。

我們將第一個(gè)項(xiàng)目代碼稱(chēng)之為 Bootloader 程序,第二個(gè)項(xiàng)目代碼稱(chēng)之為 APP 程序,他們存放在 W55MH32FLASH 的不同地址范圍,一般從最低地址區(qū)開(kāi)始存放 Bootloader,緊跟其后的就是 APP 程序(注意,如果 FLASH 容量足夠,是可以設(shè)計(jì)很多 APP 程序的,本章我們只討論一個(gè) APP 程序的情況)。這樣我們就是要實(shí)現(xiàn) 2 個(gè)程序:Bootloader 和 APP。W55MH32的 APP 程序不僅可以放到 FLASH 里面運(yùn)行,也可以放到 SRAM 里面運(yùn)行,本章,我們將制作兩個(gè) APP,一個(gè)用于 FLASH 運(yùn)行,一個(gè)用于內(nèi)部 SRAM 運(yùn)行。我們先來(lái)看看 W55MH32正常的程序運(yùn)行流程(為了方便說(shuō)明 IAP 過(guò)程,我們先僅考慮代碼全部存放在內(nèi)部 FLASH 的情況),如圖所示:

wKgZO2g4CrOAagS-AAF0O1mTOn8983.png

W55MH3 正常運(yùn)行流程圖

W55MH32的內(nèi)部閃存(FLASH)地址起始于 0X0800 0000,一般情況下,程序文件就從此地址開(kāi)始寫(xiě)入。此外 W55MH32是基于 Cortex-M3 內(nèi)核的微控制器,其內(nèi)部通過(guò)一張“中斷向量表”來(lái)響應(yīng)中斷,程序啟動(dòng)后,將首先從“中斷向量表”取出復(fù)位中斷向量執(zhí)行復(fù)位中斷程序完成啟動(dòng),而這張“中斷向量表”的起始地址是 0x08000004,當(dāng)中斷來(lái)臨,W55MH32的內(nèi)部硬件機(jī)制亦會(huì)自動(dòng)將 PC 指針定位到“中斷向量表”處,并根據(jù)中斷源取出對(duì)應(yīng)的中斷向量執(zhí)行中斷服務(wù)程序。

W55MH32在復(fù)位后,先從 0X08000004 地址取出復(fù)位中斷向量的地址,并跳轉(zhuǎn)到復(fù)位中斷服務(wù)程序,如圖標(biāo)號(hào)①所示;在復(fù)位中斷服務(wù)程序執(zhí)行完之后,會(huì)跳轉(zhuǎn)到我們的 main 函數(shù),如圖標(biāo)號(hào)②所示;而我們的 main 函數(shù)一般都是一個(gè)死循環(huán),在 main 函數(shù)執(zhí)行過(guò)程中,如果收到中斷請(qǐng)求(發(fā)生了中斷),此時(shí) W55MH32強(qiáng)制將 PC 指針指回中斷向量表處,如圖標(biāo)號(hào)③所示;然后,根據(jù)中斷源進(jìn)入相應(yīng)的中斷服務(wù)程序,如圖標(biāo)號(hào)④所示;在執(zhí)行完中斷服務(wù)程序以后,程序再次返回 main 函數(shù)執(zhí)行,如圖標(biāo)號(hào)⑤所示。

當(dāng)加入 IAP 程序之后,程序運(yùn)行流程如圖所示:

wKgZO2g4CrOAKubaAAIZhdqLjRg429.png

加入 IAP 之后程序運(yùn)行流程圖

W55MH32復(fù)位后,還是從 0X08000004 地址取出復(fù)位中斷向量的地址,并跳轉(zhuǎn)到復(fù)位中斷服務(wù)程序,在運(yùn)行完復(fù)位中斷服務(wù)程序之后跳轉(zhuǎn)到 IAP 的 main 函數(shù),如圖標(biāo)號(hào)①所示,此部分同圖 22.1.1 一樣;在執(zhí)行完 IAP 以后(即將新的 APP 代碼寫(xiě)入W55MH32的 FLASH,灰底部分。新程序的復(fù)位中斷向量起始地址為 0X08000004+N+M),跳轉(zhuǎn)至新寫(xiě)入程序的復(fù)位向量表,取出新程序的復(fù)位中斷向量的地址,并跳轉(zhuǎn)執(zhí)行新程序的復(fù)位中斷服務(wù)程序,隨后跳轉(zhuǎn)至新程序的 main 函數(shù),如圖標(biāo)號(hào)②和③所示,同樣 main 函數(shù)為一個(gè)死循環(huán),并且注意到此時(shí) W55MH32的 FLASH,在不同位置上,共有兩個(gè)中斷向量表。

在 main 函數(shù)執(zhí)行過(guò)程中,如果 CPU 得到一個(gè)中斷請(qǐng)求,PC 指針仍然會(huì)強(qiáng)制跳轉(zhuǎn)到地址0X08000004 中斷向量表處,而不是新程序的中斷向量表,如圖標(biāo)號(hào)④所示;程序再根據(jù)我們?cè)O(shè)置的中斷向量表偏移量,跳轉(zhuǎn)到對(duì)應(yīng)中斷源新的中斷服務(wù)程序中,如圖標(biāo)號(hào)⑤所示;在執(zhí)行完中斷服務(wù)程序后,程序返回 main 函數(shù)繼續(xù)運(yùn)行,如圖標(biāo)號(hào)⑥所示。

通過(guò)以上兩個(gè)過(guò)程的分析,我們知道 IAP 程序必須滿足兩個(gè)要求:

1) 新程序必須在 IAP 程序之后的某個(gè)偏移量為 x 的地址開(kāi)始;

2) 必須將新程序的中斷向量表相應(yīng)的移動(dòng),移動(dòng)的偏移量為 x;

對(duì) W55MH32系列來(lái)說(shuō),閃存編程一次可以寫(xiě)入 16 位(半字)。閃存擦除操作可以按頁(yè)面擦除或完全擦除(全擦除)。全擦除不影響信息塊。根據(jù)類(lèi)別的不同,F(xiàn)lash 有如下區(qū)別:

?小容量產(chǎn)品主存儲(chǔ)塊最大為 4K×64 位,每個(gè)存儲(chǔ)塊劃分為 32 個(gè) 1K 字節(jié)的頁(yè)。

? 中容量產(chǎn)品主存儲(chǔ)塊最大為 16K×64 位,每個(gè)存儲(chǔ)塊劃分為 128 個(gè) 1K 字節(jié)的頁(yè)。

?大容量產(chǎn)品主存儲(chǔ)塊最大為 64K×64 位,每個(gè)存儲(chǔ)塊劃分為 256 個(gè) 2K 字節(jié)的頁(yè)。

?互聯(lián)型產(chǎn)品主存儲(chǔ)塊最大為 32K×64 位,每個(gè)存儲(chǔ)塊劃分為 128 個(gè) 2K 字節(jié)的頁(yè)

使用時(shí)我們需要根據(jù)自己的芯片型號(hào)來(lái)選擇,設(shè)計(jì) IAP 程序時(shí)需要嚴(yán)格避免不同的程序占用相同 Flash 扇區(qū)的情形。本章,我們有 2 個(gè) APP 程序:

1,F(xiàn)LASH APP 程序,即只運(yùn)行在內(nèi)部 FLASH 的 APP 程序。

2,SRAM APP 程序,即只運(yùn)行在內(nèi)部 SRAM 的 APP 程序。

1.APP 程序起始地址設(shè)置方法

APP 我們使用以前的例程即可,不過(guò)需要對(duì)程序進(jìn)行修改,默認(rèn)的條件下,圖中 IROM1 的起始地址(Start)一般為 0X08000000,大小(Size)為0x40000,即從 0X08000000 開(kāi)始的 256K 空間為我們的程序存儲(chǔ)區(qū)。

FLASH APP Target 選項(xiàng)卡設(shè)置

我們?cè)O(shè)置起始地址(Start)為 0X08010000,即偏移量為 0x10000(64K 字節(jié),即留給 BootLoader 的空間),因而,留給 APP 用的 FLASH 空間(Size)為 0x40000-0x10000=0x30000(192K 字節(jié))大小了。設(shè)置好 Start 和 Size,就完成 APP 程序的起始地址設(shè)置。IRAM 是內(nèi)存的地址,APP 可以獨(dú)占這些內(nèi)存,我們不需要修改。

注意:需要確保 APP 起始地址在 Bootloader 程序結(jié)束位置之后,并且偏移量為 0X200 的倍數(shù)即可這是針對(duì) FLASH APP 的起始地址設(shè)置,如果是 SRAM APP,那么起始地址設(shè)置如圖所示:

wKgZPGg4CrOAKUDQAAGNS5rnQRw875.png

SRAM APP Target 選項(xiàng)卡設(shè)置

這里我們將 IROM1 的起始地址(Start)定義為:0X20001000,大小為 0XB000(44K 字節(jié)),即從地址 0X20000000 偏移 0X1000 開(kāi)始,存放 SRAM APP 代碼。這個(gè)分配關(guān)系大家可以根據(jù)自己的實(shí)際情況修改,由于 W55MH32只有一個(gè) 48K 的片內(nèi) SRAM,存放程序的位置與變量的加載位置不能重復(fù),所以我們需要設(shè)置 IRAM1 中的地址到 SRAM 程序空間之外。

關(guān)于 APP 起始地址的設(shè)置方法,我們就介紹到這里,大家可以根據(jù)自己項(xiàng)目的實(shí)際需求進(jìn)行修改。

2.中斷向量表的偏移量設(shè)置方法

VTOR 寄存器存放的是中斷向量表的起始地址。默認(rèn)的情況它由 BOOT 的啟動(dòng)模式?jīng)Q定,對(duì)于來(lái)說(shuō)就是指向 0x0800 0000 這個(gè)位置,也就是從默認(rèn)的啟動(dòng)位置加載中斷向量等信息,不過(guò) ST 允許重定向這個(gè)位置,這樣就可以從 Flash 區(qū)域的任意位置啟動(dòng)我們的代碼了。

我們可以通過(guò)調(diào)用 sys.c 里面的 sys_nvic_set_vector_table 函數(shù)實(shí)現(xiàn),通過(guò)以上兩個(gè)步驟的設(shè)置,我們就可以生成 APP 程序了,只要 APP 程序的 FLASH 和SRAM 大小不超過(guò)我們的設(shè)置即可。不過(guò) MDK 默認(rèn)生成的文件是.hex 文件,并不方便我們用作 IAP 更新,我們希望生成的文件是.bin 文件,這樣可以方便進(jìn)行 IAP 升級(jí)(至于為什么,請(qǐng)大家自行百度 HEX 和 BIN 文件的區(qū)別!)。這里我們通過(guò) MDK 自帶的格式轉(zhuǎn)換工具fromelf.exe ,如果 安 裝 在 C 盤(pán)的默認(rèn)路徑,它的位置是C:Keil_v5ARMARMCCbinfromelf.exe,來(lái)實(shí)現(xiàn).axf 文件到.bin 文件的轉(zhuǎn)換。該工具在 MDK的安裝目錄ARMARMCCbin 文件夾里面。

fromelf.exe 轉(zhuǎn)換工具的語(yǔ)法格式為:fromelf [options] input_file。其中 options 有很多選項(xiàng)可以設(shè)置,詳細(xì)使用請(qǐng)參考光盤(pán)《mdk 如何生成 bin 文件.doc》。

我 們可 以通過(guò) 在 MDK 點(diǎn) 擊 Options for Target→User 選 項(xiàng)卡 ,在 After Build/Rebuild 一欄中,勾選 Run #1,我們推薦使用相對(duì)地址,在勾選的同一行后的輸入框并寫(xiě)入命令行:fromelf --bin -o ....Output@L.bin ....Output%L,如圖 所示:

wKgZO2g4CrOAHFIoAACX-t7miNY510.png

設(shè)置生成編譯結(jié)果文件名

wKgZPGg4CrOANfAgAADzhSYz2xU024.png

MDK 生成.bin 文件設(shè)置方法

通過(guò)這一步設(shè)置,我們就可以在 MDK 編譯成功之后,調(diào)用 fromelf.exe,....Output%L 表示當(dāng)前編譯的鏈接文件(..是相對(duì)路徑,表示上級(jí)目錄,編譯器默認(rèn)從工程文件*.uvprojx 開(kāi)始查找,根據(jù)我的工程文件 Output 的位置就能明白路徑的含義),指令--bin –o ....Output@L.bin表示在 Output 目錄下生成一個(gè).bin 文件,@L 在 Keil 的下表示 Output 選項(xiàng)卡下的 Name of Executable 后面的字符串,即在 Output 文件夾下生成一個(gè) atk_APP.bin 文件。在得到.bin 文件之后,我們只需要將這個(gè) bin 文件傳送給單片機(jī),即可執(zhí)行 IAP 升級(jí)。

最后來(lái)看看 APP 程序的生成步驟:

1) 設(shè)置 APP 程序的起始地址和存儲(chǔ)空間大小

對(duì)于在 FLASH 里面運(yùn)行的 APP 程序,我們只需要設(shè)置 APP 程序的起始地址,和存儲(chǔ)空間大小即可。而對(duì)于在 SRAM 里面運(yùn)行的 APP 程序,我們還需要設(shè)置 SRAM 的起始地址和大小。無(wú)論哪種 APP 程序,都需要確保 APP 程序的大小和所占 SRAM 大小不超過(guò)我們的設(shè)置范圍。

2) 設(shè)置中斷向量表偏移量

此步,通過(guò)調(diào)用 sys_nvic_set_vector_table 函數(shù),實(shí)現(xiàn)對(duì)中斷向量表偏移量的設(shè)置。這個(gè)偏移量的大小,其實(shí)就等于程序起始地址相對(duì)于 0X08000000 或者 0X20000000 的偏移。

3) 設(shè)置編譯后運(yùn)行 fromelf.exe,生成.bin 文件

通過(guò)在 User 選項(xiàng)卡,設(shè)置編譯后調(diào)用 fromelf.exe,根據(jù).axf 文件生成.bin 文件,用于 IAP更新。 以上 3 個(gè)步驟,就可以得到一個(gè).bin 的 APP 程序,通過(guò) Bootlader 程序即可實(shí)現(xiàn)更新。

2 例程設(shè)計(jì)

2.1 IAP_Bootloader

該例程實(shí)現(xiàn)了一個(gè)基礎(chǔ)的W55MH32AP引導(dǎo)加載程序,核心亮點(diǎn)包括中斷驅(qū)動(dòng)數(shù)據(jù)接收、Flash操作安全性校驗(yàn)及靈活的調(diào)試輸出。適用于需遠(yuǎn)程固件更新(FOTA)或工廠批量燒錄的場(chǎng)景。后續(xù)可通過(guò)協(xié)議增強(qiáng)、安全加固和錯(cuò)誤恢復(fù)進(jìn)一步提升可靠性,同時(shí)需注意中斷向量表重映射與內(nèi)存管理等關(guān)鍵細(xì)節(jié)。

1. 系統(tǒng)功能概述

該程序是一個(gè)基于W55MH32的IAP引導(dǎo)加載程序(Bootloader),支持通過(guò)串口接收用戶(hù)應(yīng)用程序(APP)的二進(jìn)制文件,并寫(xiě)入Flash存儲(chǔ)。主要功能包括:

串口通信:接收用戶(hù)程序數(shù)據(jù)(最大32KB)。

固件更新:通過(guò)按鍵觸發(fā)將接收到的數(shù)據(jù)寫(xiě)入Flash指定地址。

應(yīng)用跳轉(zhuǎn):執(zhí)行已燒錄的Flash用戶(hù)程序。

調(diào)試輸出:通過(guò)USART1打印系統(tǒng)信息及操作日志。

2. 核心模塊設(shè)計(jì)

(1)系統(tǒng)初始化:

時(shí)鐘配置:通過(guò)RCC_GetClocksFreq獲取系統(tǒng)時(shí)鐘頻率,并通過(guò)串口輸出SYSCLK、HCLK等參數(shù),驗(yàn)證時(shí)鐘配置正確性。

外設(shè)初始化:延時(shí)模塊:delay_init()初始化系統(tǒng)時(shí)鐘,用于后續(xù)延時(shí)操作。

按鍵模塊:KEY_Init()初始化按鍵輸入,檢測(cè)用戶(hù)操作(KEY1:固件更新,KEY2:跳轉(zhuǎn)APP)。

中斷配置:NVIC_Configuration()使能USART1接收中斷,實(shí)現(xiàn)非阻塞數(shù)據(jù)接收。

(2)串口通信硬件配置:USART1使用PA9(TX)和PA10(RX),波特率115200,8N1格式。接收緩沖區(qū)USART_RX_BUF通過(guò)__attribute__((at(0X20001000)))指定到SRAM地0x20001000,容32KB。

(3)中斷驅(qū)動(dòng)接收:在USART1_IRQHandler中,通過(guò)USART_IT_RXNE中斷接收數(shù)據(jù),逐字節(jié)存入緩沖區(qū),并更新接收計(jì)數(shù)器USART_RX_CNT。主循環(huán)通過(guò)檢測(cè)USART_RX_CNT是否穩(wěn)定(oldcount對(duì)比)判斷數(shù)據(jù)接收完成。

(4)IAP邏輯:

固件更新:按鍵觸發(fā):按下KEY1后,檢查接收緩沖區(qū)長(zhǎng)度applenth。

合法性校驗(yàn):驗(yàn)證應(yīng)用程序起始地址是否為Flash區(qū)域(0x08XXXXXX),防止寫(xiě)入非法地址。

Flash操作:調(diào)用IAP_Write_Appbin將緩沖區(qū)數(shù)據(jù)寫(xiě)入Flash目標(biāo)地址(FLASH_APP1_ADDR)。

應(yīng)用跳轉(zhuǎn):按下KEY2后,檢查目標(biāo)地址合法性,調(diào)用IAP_Load_App跳轉(zhuǎn)執(zhí)行用戶(hù)程序。

關(guān)鍵實(shí)現(xiàn):IAP_Load_App需重置堆棧指針并跳轉(zhuǎn)到用戶(hù)程序復(fù)位中斷向量,通常包含以下操作:

typedef void (*pFunction)(void);
pFunction Jump_To_App;
uint32_t JumpAddress = *(__IO uint32_t*)(FLASH_APP1_ADDR + 4); // 用戶(hù)程序復(fù)位向量
Jump_To_App = (pFunction)JumpAddress;
__set_MSP(*(__IO uint32_t*)FLASH_APP1_ADDR); // 重置主堆棧指針
Jump_To_App(); // 跳轉(zhuǎn)執(zhí)行

(5)調(diào)試輸出:

?重定向機(jī)制:通過(guò)fputc將printf輸出重定向至USART1,支持格式化日志打印。

?關(guān)鍵信息:

······系統(tǒng)啟動(dòng)時(shí)輸出時(shí)鐘配置信息。

······操作提示(如“KEY1:Copy To FLASH”)。

······固件更新進(jìn)度(如“Copy APP Successed!!”)。

3. 關(guān)鍵代碼分析

(1)數(shù)據(jù)接收管理

接收狀態(tài)檢測(cè):

if (USART_RX_CNT) {
    if (oldcount == USART_RX_CNT) { // 數(shù)據(jù)接收完成
        applenth = USART_RX_CNT;
        USART_RX_CNT = 0; // 清空計(jì)數(shù)器
        printf("User program reception complete!rn");
    } else {
        oldcount = USART_RX_CNT; // 更新舊值,繼續(xù)等待
    }
}

通過(guò)對(duì)比oldcount與USART_RX_CNT判斷數(shù)據(jù)是否接收完畢,避免固定超時(shí)等待。

(2)Flash操作校驗(yàn)

地址合法性檢查:

if (((*(vu32 *)(0X20001000 + 4)) & 0xFF000000) == 0x08000000) {
    // 合法Flash地址,執(zhí)行寫(xiě)入
} else {
    printf("Illegal FLASH APP!n");
}

檢查用戶(hù)程序復(fù)位向量的高8位是否為0x08,確保目標(biāo)地址在Flash范圍內(nèi)(W55MH32 Flash起始地址為)。

3 下載驗(yàn)證

3.1 IAP_Bootloader

wKgZPGg4CrOAMWG4AAGkH4ogKXc554.png

發(fā)送文件,按下KEY1后,程序檢查接收緩沖區(qū)數(shù)據(jù):

若數(shù)據(jù)合法(復(fù)位向量地址為0x08XXXXXX),開(kāi)始寫(xiě)入Flash:

wKgZO2g4CrOACxOdAADzhSYz2xU088.png

若數(shù)據(jù)非法(非Flash地址),打印錯(cuò)誤信息:

wKgZPGg4CrOAfrzbAAATLv-RpyA836.png

若未接收到數(shù)據(jù),提示:

wKgZO2g4CrOAMvjYAAAdwLhKVUo642.png

按下KEY2后,程序檢查目標(biāo)地址(FLASH_APP1_ADDR)

若地址合法(復(fù)位向量地址為0x08XXXXXX),跳轉(zhuǎn)執(zhí)行用戶(hù)程序:

wKgZPGg4CrOAS38HAAAWLyy9bBU067.png

WIZnet 是一家無(wú)晶圓廠半導(dǎo)體公司,成立于 1998 年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術(shù),基于獨(dú)特的專(zhuān)利全硬連線 TCP/IP。iMCU? 面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。

WIZnet 在全球擁有 70 多家分銷(xiāo)商,在香港、韓國(guó)、美國(guó)設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營(yíng)銷(xiāo)。

香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國(guó)和日本除外)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6067

    文章

    44969

    瀏覽量

    649389
  • IAP
    IAP
    +關(guān)注

    關(guān)注

    2

    文章

    165

    瀏覽量

    24979
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    科技賦能推動(dòng)綠色低碳發(fā)展 第二十三屆高交會(huì)“環(huán)保”亮點(diǎn)看這里!

    ? 洞察科技前沿發(fā)展趨勢(shì),讓創(chuàng)新成為產(chǎn)業(yè)發(fā)展的核心“基因”。一年一度以“科技”“創(chuàng)新”的熱詞,第二十三屆高交會(huì)開(kāi)展!作為觀察產(chǎn)業(yè)、行業(yè)發(fā)展的重要窗口,今年高交會(huì)以“推動(dòng)高質(zhì)量發(fā)展,構(gòu)建新發(fā)展格局
    發(fā)表于 12-29 18:22 ?1305次閱讀
    科技賦能推動(dòng)綠色低碳發(fā)展 <b class='flag-5'>第二十三</b>屆高交會(huì)“環(huán)保”亮點(diǎn)看這里!

    峰岹科技獲第二十三屆中國(guó)專(zhuān)利優(yōu)秀獎(jiǎng)

    近日,中國(guó)專(zhuān)利獎(jiǎng)評(píng)審辦公室發(fā)布《第二十三屆中國(guó)專(zhuān)利獎(jiǎng)評(píng)審結(jié)果》,峰岹科技(深圳)股份有限公司的“一種單相交流永磁電動(dòng)機(jī)的無(wú)傳感器動(dòng)態(tài)驅(qū)動(dòng)方法及系統(tǒng)”發(fā)明專(zhuān)利榮獲中國(guó)專(zhuān)利優(yōu)秀獎(jiǎng),這是峰岹科技首次獲得
    的頭像 發(fā)表于 04-27 15:32 ?3541次閱讀
    峰岹科技獲<b class='flag-5'>第二十三</b>屆中國(guó)專(zhuān)利優(yōu)秀獎(jiǎng)

    【每日一練】RT-Thread Nano-NTP-獲取網(wǎng)絡(luò)時(shí)間(第二十三節(jié)學(xué)習(xí)視頻)

    本視頻為【每日一練】的第二十三節(jié)學(xué)習(xí)視頻,注:剛開(kāi)始學(xué)習(xí)的童鞋請(qǐng)從第一節(jié)視頻開(kāi)始打卡哦(本節(jié)視頻在下面打卡即可)學(xué)習(xí)任務(wù):1、本節(jié)打卡任務(wù)大家自由發(fā)揮打卡規(guī)則詳見(jiàn):【每日一練】RT-Thread
    發(fā)表于 06-08 10:47

    RGB-LCD字符和圖片顯示實(shí)驗(yàn)

    獲取最新資料更新第二十三章RGB-LCD字符和圖片顯示實(shí)驗(yàn)我們?cè)凇癛GB-LCD彩條顯示實(shí)驗(yàn)”中成功的在正點(diǎn)原子的RGB-LCD
    發(fā)表于 12-07 07:33

    火力發(fā)電廠水汽分析方法 第二十三部分:化學(xué)耗氧量的測(cè)定(重鉻

    火力發(fā)電廠水汽分析方法 第二十三部分:化學(xué)耗氧量的測(cè)定(重鉻酸鉀法)DL/T 502.23—2006 Analytical methods of steam and water
    發(fā)表于 06-08 12:15 ?28次下載

    第二十三講 異步計(jì)數(shù)器

    第二十三講 異步計(jì)數(shù)器 概述一、計(jì)數(shù)器:用以統(tǒng)計(jì)輸入計(jì)數(shù)脈沖CP個(gè)數(shù)的電路。計(jì)數(shù)器的“模”(用M表示): 二、 計(jì)數(shù)器的分類(lèi)1.按計(jì)數(shù)進(jìn)制分2.按計(jì)數(shù)
    發(fā)表于 03-30 16:27 ?1.3w次閱讀
    <b class='flag-5'>第二十三</b>講 異步計(jì)數(shù)器

    模擬電路網(wǎng)絡(luò)課件 第二十三節(jié):乙類(lèi)雙電源互補(bǔ)對(duì)稱(chēng)功率放大電路

    模擬電路網(wǎng)絡(luò)課件 第二十三節(jié):乙類(lèi)雙電源互補(bǔ)對(duì)稱(chēng)功率放大電路 5.2.1 電路的組成
    發(fā)表于 09-17 08:56 ?2219次閱讀

    第二十三屆中國(guó)國(guó)際電子生產(chǎn)設(shè)備暨微電子工業(yè)展4月上海開(kāi)幕

    2013年4月23日-25日,第二十三屆中國(guó)國(guó)際電子生產(chǎn)設(shè)備暨微電子工業(yè)展(NEPCON China 2013)將在上海世博展覽館召開(kāi)。根據(jù)當(dāng)前產(chǎn)業(yè)熱點(diǎn)以及未來(lái)發(fā)展趨勢(shì),NEPCON China
    發(fā)表于 04-17 14:07 ?837次閱讀

    2017中國(guó)西部微波射頻技術(shù)研討會(huì)暨第二十三屆國(guó)際電子測(cè)試測(cè)量研討會(huì)

    2017中國(guó)西部微波射頻技術(shù)研討會(huì)暨第二十三屆國(guó)際電子測(cè)試測(cè)量研討會(huì)
    發(fā)表于 07-05 15:12 ?1148次閱讀

    【正點(diǎn)原子FPGA連載】第二十三章RGB-LCD字符和圖片顯示實(shí)驗(yàn) -摘自【正點(diǎn)原子】新起點(diǎn)之FPGA開(kāi)發(fā)指南_V2.1

    【正點(diǎn)原子FPGA連載】第二十三章RGB-LCD字符和圖片顯示實(shí)驗(yàn) -摘自【正點(diǎn)原子】新起點(diǎn)之FPGA開(kāi)發(fā)指南_V2.1
    發(fā)表于 11-24 14:36 ?13次下載
    【正點(diǎn)原子FPGA連載】<b class='flag-5'>第二十三章</b>RGB-LCD字符和圖片顯示實(shí)驗(yàn) -摘自【正點(diǎn)原子】新起點(diǎn)之FPGA開(kāi)發(fā)指南_V2.1

    圖撲受邀參加第二十三屆中國(guó)國(guó)際高新技術(shù)成果交易會(huì)

    十二月,科技的光亮沖散了鵬城冬日的微寒。第二十三屆中國(guó)國(guó)際高新技術(shù)成果交易會(huì)(以下簡(jiǎn)稱(chēng):高交會(huì)),采用“一城兩館”聯(lián)動(dòng)新格局,在深圳會(huì)展中心(福田)和深圳國(guó)際會(huì)展中心(寶安)同時(shí)拉開(kāi)帷幕,為深圳市民奉上一場(chǎng)科技盛宴,掀起創(chuàng)新的熱潮。
    發(fā)表于 01-06 17:42 ?323次閱讀

    烽火通信光纖技術(shù)獲“第二十三屆中國(guó)專(zhuān)利獎(jiǎng)”銀獎(jiǎng)

    近日,烽火通信低衰減小彎曲光纖技術(shù),榮獲“第二十三屆中國(guó)專(zhuān)利獎(jiǎng)”銀獎(jiǎng)。在我國(guó)信息網(wǎng)絡(luò)大容量傳輸“主血管”的基礎(chǔ)上,該項(xiàng)技術(shù)深入千家萬(wàn)戶(hù),構(gòu)建了具有豐富毛細(xì)血管的立體信息高速公路網(wǎng)絡(luò)。
    的頭像 發(fā)表于 05-05 16:42 ?1567次閱讀

    第二十三屆中國(guó)國(guó)際工業(yè)博覽會(huì)宣布延期舉行

    尊敬的各位朋友: 應(yīng)官方通知,原定于2022年11月30日-12月4日在國(guó)家會(huì)展中心(上海)舉辦的第二十三屆中國(guó)國(guó)際工業(yè)博覽會(huì)將延期至2023年舉辦,我們會(huì)密切關(guān)注展會(huì)的相關(guān)動(dòng)態(tài),如有更新
    的頭像 發(fā)表于 11-16 08:15 ?943次閱讀

    峰岹科技獲第二十三屆中國(guó)專(zhuān)利優(yōu)秀獎(jiǎng)

    ★NEWS★近日,中國(guó)專(zhuān)利獎(jiǎng)評(píng)審辦公室發(fā)布《第二十三屆中國(guó)專(zhuān)利獎(jiǎng)評(píng)審結(jié)果》,峰岹科技(深圳)股份有限公司的“一種單相交流永磁電動(dòng)機(jī)的無(wú)傳感器動(dòng)態(tài)驅(qū)動(dòng)方法及系統(tǒng)”發(fā)明專(zhuān)利榮獲中國(guó)專(zhuān)利優(yōu)秀獎(jiǎng),這是峰岹
    的頭像 發(fā)表于 04-28 11:28 ?720次閱讀
    峰岹科技獲<b class='flag-5'>第二十三</b>屆中國(guó)專(zhuān)利優(yōu)秀獎(jiǎng)

    中國(guó)電子科技集團(tuán)公司第二十三研究所選購(gòu)我司炭黑含量測(cè)試儀

    中國(guó)電子科技集團(tuán)公司第二十三研究所(簡(jiǎn)稱(chēng)23所)始建于1963年,先后直屬于國(guó)防部十院、第四機(jī)械工業(yè)部十院、國(guó)防科委第十研究院、電子工業(yè)部、信息產(chǎn)業(yè)部等,2002年起歸屬于中國(guó)電
    的頭像 發(fā)表于 05-17 16:30 ?692次閱讀
    中國(guó)電子科技集團(tuán)公司<b class='flag-5'>第二十三</b>研究所選購(gòu)我司炭黑含量測(cè)試儀
    主站蜘蛛池模板: 磐安县| 象山县| 新和县| 唐河县| 信宜市| 西和县| 滨海县| 伊宁县| 泸水县| 辽宁省| 高要市| 梧州市| 恭城| 融水| 读书| 阿荣旗| 凤台县| 肥西县| 英德市| 申扎县| 榆中县| 屏东市| 安新县| 固安县| 奈曼旗| 金昌市| 柳州市| 华容县| 庆安县| 玉龙| 米易县| 福泉市| 田林县| 长垣县| 成武县| 兴化市| 铁岭县| 临西县| 师宗县| 阳新县| 灵寿县|