• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于SWD協(xié)議的ISP技術(shù)研究與應(yīng)用*

      2021-08-06 09:19:10劉浪華
      通信技術(shù) 2021年7期
      關(guān)鍵詞:固件寄存器調(diào)試

      王 宇,劉浪華

      (中國電子科技集團公司第三十研究所,四川 成都 610041)

      0 引 言

      目前嵌入式領(lǐng)域的主流產(chǎn)品在研發(fā)階段主要通過仿真器對微處理器進行程序的仿真驗證,生產(chǎn)階段通過專用聯(lián)合測試工作組(Joint Test Action Group,JTAG)燒錄器完成芯片固件燒錄,基本不涉及后期固件的升級維護。一旦固件程序在應(yīng)用上存在漏洞,只能將設(shè)備返廠維修,導(dǎo)致產(chǎn)品后期維護費用居高不下。通過結(jié)合串行調(diào)試(Serial Wire Debug,SWD)串行調(diào)試技術(shù)和在線系統(tǒng)編程(In-System Programming,ISP)技術(shù),能夠解決設(shè)備后期維護不便的問題。

      SWD技術(shù)支持所有可通過JTAG接口進行調(diào)試的ARM Cortex A/R/M系列處理器和具有CoreSight調(diào)試架構(gòu)的ARM芯片[1],包括德州儀器(Texas Instrument,TI)、 恩 智 浦(NXP Semiconductors)、Atmel、Samsung等廠家的芯片,以及意法半導(dǎo)體(STMicroelectronics,STM)公司STM32系列微處理器等。

      1 SWD協(xié)議原理研究

      SWD串行調(diào)試由一個雙向數(shù)據(jù)線和單向時鐘線組成實現(xiàn)數(shù)據(jù)的同步傳輸,可替代JTAG調(diào)試。時鐘頻率為50 MHz時數(shù)據(jù)傳輸速率可達4 MB/s,較少的印制電路板(Printed Circuit Board,PCB)布局布線資源便可實現(xiàn)低功耗低成本應(yīng)用[2]。SWD協(xié)議實現(xiàn)芯片資源的交互流程如圖1所示。

      1.1 SWD接口協(xié)議

      SWD操作流程主要分為3個階段:數(shù)據(jù)請求包REQ、應(yīng)答數(shù)據(jù)包ACK與數(shù)據(jù)讀寫傳輸包[3]。表1列舉了SWD接口交互流程的主要關(guān)鍵字信息。

      表1 SWD協(xié)議關(guān)鍵詞

      SWD的寫操作由1 byte請求包、3 bit應(yīng)答包與33 bit的寫數(shù)據(jù)組成,一次完整的寫操作如圖2所示。

      SWD的讀操作由1 byte的請求包、3 bit的應(yīng)答包與33 bit的讀數(shù)據(jù)組成,應(yīng)答包與讀數(shù)據(jù)包間無Turn周期,一次完整的讀操作如圖3所示。

      SWD中DP寄存器組成見表2,其中ID標(biāo)識寄存器用于驗證SWD操作時序,獲取ARM調(diào)試接口信息等,低12位固定為0×477,主要構(gòu)成如圖4所示。

      表2 SW-DP寄存器

      SELECT寄存器控制AP選擇特定的地址,其最低位為CTRLSEL,其組成見圖5。[31:24]位APSEL值確定當(dāng)前AP地址的高8 bit;每個AP具有 16個 Bank,[7:4]位 APBANKSEL值(0-F) 用來選擇當(dāng)前AP的Bank號;每個Bank有4個32 bit寄存器,由數(shù)據(jù)請求包REQ中的A[3:2]位來確定。

      圖6列舉了每組MEM-AP寄存器的信息,其中Bank 0x0中的CSW寄存器、TAR寄存器與DRW寄存器對設(shè)備ARM核的數(shù)據(jù)傳遞起著關(guān)鍵作用[4]。

      1.2 SWD實現(xiàn)處理器資源傳遞

      SWD的數(shù)據(jù)傳遞通過分級傳遞的方式:第一級通過DP接口選擇進入AP寄存器,然后通過AP接口選擇目的寄存器進行訪問;第二級配置CSW寄存器進行軟件控制與地址模式的選擇,最后通過TAR寄存器與DRW寄存器對處理器目標(biāo)地址進行讀寫。整個交互流程如圖7所示。

      以下是實現(xiàn)的主要函數(shù)。

      (1)Func0:單32 bit數(shù)據(jù)寫入,經(jīng)歷①②③④⑥這5個階段,參數(shù)為其③階段的目的地址與④階段的數(shù)據(jù),⑥階段僅需執(zhí)行讀操作。

      (2)Func1:連續(xù)32 bit數(shù)據(jù)寫入,SWD協(xié)議中支持連續(xù)寫入,目的地址會在寫入完成后自加1,大致流程與Func0一致,經(jīng)歷①②③④…④(n個④)⑥階段,其中④階段的個數(shù)n由寫入數(shù)據(jù)數(shù)量來確定。

      (3)Func2:單32 bit數(shù)據(jù)讀取,經(jīng)歷①②③⑤⑥這5個階段,參數(shù)為其③階段的目的地址與接收⑥階段的數(shù)據(jù)緩存。

      (4)Func3:連續(xù)32 bit數(shù)據(jù)讀取,SWD協(xié)議中目的地址會在讀取完成后自加1,大致流程Func2一致,經(jīng)歷①②③⑤⑥…⑥(n個⑥)階段,其中⑥階段的個數(shù)n由讀取數(shù)據(jù)數(shù)量來確定。

      2 STM32F103核心資源

      為了利用SWD接口完成對ARM-Cortex M3/M4等芯片固件的擦除與燒寫,實現(xiàn)固件的更新。本節(jié)以ST公司的STM32F103x系列芯片作為說明,對芯片內(nèi)部資源架構(gòu)進行基本介紹[5]。

      如圖8所示,STM32F103x采用ARM Cortex-M3核,采用32位RISC精簡指令集,時鐘頻率最高72 MHz。Flash容量最大512 kB、SRAM最大64 kB,STM32F103x芯片內(nèi)部存儲資源如圖8所示,其中Flash區(qū)存儲了芯片的BootLoader與主程序。DAP燒錄器、J-link編程器進行芯片固件燒錄也是在該區(qū)域完成。

      通過SWD接口可實現(xiàn)STM32F103x芯片SRAM區(qū)域存取訪問,控制Cortex-M3內(nèi)部資源中調(diào)試寄存器,讀取Flash區(qū)的數(shù)據(jù)。Flash區(qū)不能直接進行數(shù)據(jù)擦寫,必須通過特定方法,本文研究的主要目的就是通過SWD與芯片F(xiàn)lash算法文件FLM相結(jié)合的方式實現(xiàn)芯片固件更新。

      Cortex-M3/M4的ARM核調(diào)試寄存器地址完全相同,寄存器相關(guān)描述如表3所示。DFSR寄存器用來獲取ARM核運行錯誤狀態(tài),DHCSR與DEMCR可以控制ARM核的運轉(zhuǎn)狀態(tài),操作SRAM區(qū)域或者Flash資源時都應(yīng)將ARM核掛起,以免影響數(shù)據(jù)正確性。DCRSR寄存器用來選擇ARM核心寄存器,DCRDR寄存器用來管理ARM核心寄存器值[6]。

      表3 Cortex-M3/M4調(diào)試寄存器說明

      ARM核心寄存器組成如表4所示,其中R0~R12為32位通用目的寄存器,R13可對堆??臻g進行存取操作,R14鏈接寄存器用于存儲子程序或者函數(shù)調(diào)用的返回地址,R15程序計數(shù)器讀操作返回當(dāng)前正在執(zhí)行的指令加上4,寫入R15會導(dǎo)致程序跳轉(zhuǎn)執(zhí)行。XPSR程序狀態(tài)寄存器作為特殊功能寄存器用來判斷ARM核心寄存器執(zhí)行狀態(tài)是否正常。

      表4 ARM核心寄存器

      匯編可執(zhí)行程序就是在ARM核心寄存器上進行變量的計算與處理。通過調(diào)用Func0、Func2流程可以控制Cortex-M3/M4的所有調(diào)試寄存器,經(jīng)由DCRSR與DCRDR寄存器實現(xiàn)ARM核心寄存器讀取,獲取到ARM核的執(zhí)行控制權(quán)限。

      3 SWD實現(xiàn)芯片固件ISP在線編程

      通用Flash芯片編程流程包括:初始化、擦除與燒寫。SWD協(xié)議調(diào)用FLM文件中可執(zhí)行二進制文件的方式實現(xiàn)Flash的ISP編程。FLM文件從芯片廠家獲取,由Flash擦寫相關(guān)函數(shù)及變量等組成的通用標(biāo)準(zhǔn)文件格式可執(zhí)行文件編碼。本文以STM32F103芯片的STM32F10x_128.FLM文件為樣本進行研究與應(yīng)用,可推廣至所有支持SWD協(xié)議芯片進行應(yīng)用。

      3.1 STM32F10x_128算法文件解析

      STM32F10x_128.FLM文件可通過elfparser等軟件解析,也可在Linux Ubuntu操作系統(tǒng)下輸入以下命令查看解析文件信息readelf -a STM32F10x_128.FLM。

      截取的部分重要信息如圖9所示,其中Prgcode程序代碼段包括Flash的若干函數(shù)執(zhí)行碼,PrgData程序數(shù)據(jù)段為全局變量/靜態(tài)變量區(qū)間。SWD所需的核心內(nèi)容(Prgcode+PrgData)數(shù)據(jù)段可由地址Addr、偏移Offset與大小Size從FLM件中獲得。

      3.2 STM32F10x_128讀取IDCODE

      圖10由示波器獲得,下方波形為SWD時鐘,上方波形為SWD數(shù)據(jù)。以數(shù)據(jù)線的第一個高電平為Start起始位,對比SWD讀操作原理圖,最終獲取的內(nèi)容為0x2ba01477。參照1.1節(jié)DP寄存器中有關(guān)IDCODE的描述,能夠驗證獲取到內(nèi)容確實為IDCODE的值,進而確認已成功實現(xiàn)對SWD接口控制。

      3.3 芯片F(xiàn)lash固件燒寫

      通過SWD接口實現(xiàn)ARM核Flash資源燒寫共分為3個步驟:

      (1)通過調(diào)試寄存器掛起ARM核,停止ARM核的運行,將FLM算法文件提出的可執(zhí)行數(shù)據(jù)寫入SRAM的起始地址;

      (2)將芯片固件STM32F10x_128.Bin寫入SRAM未用空間,待Flash編程時使用;

      (3)將執(zhí)行函數(shù)包括程序入口參數(shù)等信息通過調(diào)試寄存器寫入ARM核心寄存器,依次調(diào)用Flash初始化、片擦除、編程函數(shù),完成ARM核內(nèi)部Flash的燒錄。整個流程執(zhí)行如圖11所示。

      Flash固件燒寫測試程序由C語言實現(xiàn),涵蓋了Flash初始化、片擦除、程序燒寫、數(shù)據(jù)回讀校驗及退出操作,頂層實現(xiàn)代碼如下文所述:

      在主設(shè)備上執(zhí)行Flash固件燒寫測試程序swdprogram,穩(wěn)定地實現(xiàn)了芯片固件ISP更新,程序運行結(jié)果如圖12所示。

      4 結(jié) 語

      通過SWD接口協(xié)議控制芯片ARM核的運行,結(jié)合芯片F(xiàn)LM文件解析并在ARM核中實現(xiàn)Flash相關(guān)函數(shù)資源的恢復(fù)與調(diào)用,完成了芯片固件的ISP在線編程。針對其它支持SWD接口協(xié)議的ARM芯片,除內(nèi)部資源地址空間與FLM算法文件不同外,ARM核的調(diào)試與控制操作完全相同,很容易推廣并應(yīng)用于主從模式下的微處理器芯片。通過SWD接口實現(xiàn)的ISP在線編程,能夠極大地提高設(shè)備的維護性,對于實現(xiàn)設(shè)備程序升級與功能更新有較高的應(yīng)用價值。

      猜你喜歡
      固件寄存器調(diào)試
      Lite寄存器模型的設(shè)計與實現(xiàn)
      基于航拍無人機的設(shè)計與調(diào)試
      電子制作(2018年12期)2018-08-01 00:47:44
      FOCAS功能在機床調(diào)試中的開發(fā)與應(yīng)用
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      無線通信中頻線路窄帶臨界調(diào)試法及其應(yīng)用
      電子制作(2017年19期)2017-02-02 07:08:38
      基于固件的遠程身份認證
      調(diào)壓柜的調(diào)試與試運行探討
      提取ROM固件中的APP
      電腦愛好者(2015年7期)2015-04-09 08:54:02
      一種通過USB接口的可靠固件升級技術(shù)
      奧林巴斯XZ—2新固件升級
      中國攝影(2014年1期)2014-02-24 01:50:23
      田林县| 山阳县| 利津县| 施甸县| 四川省| 扬州市| 嵊泗县| 永善县| 嘉祥县| 芷江| 永吉县| 鄂托克旗| 长葛市| 井研县| 光泽县| 灵山县| 五华县| 河曲县| 姜堰市| 澄迈县| 苏州市| 丘北县| 东莞市| 紫金县| 闵行区| 漳州市| 黄骅市| 阿合奇县| 安阳市| 仙桃市| 扎赉特旗| 玉山县| 临邑县| 永安市| 河南省| 舒城县| 桓仁| 武宣县| 皋兰县| 信丰县| 东光县|