如何采用Cortex-M3處理器進(jìn)行合理的測(cè)試設(shè)計(jì)?
掃描二維碼
隨時(shí)隨地手機(jī)看文章
ARM Cortex-M 系列微處理器主要用于低成本和低功耗領(lǐng)域,如智能測(cè)量。人機(jī)接口設(shè)備。汽車(chē)和工業(yè)控制系統(tǒng)。大型家用電器。消費(fèi)性產(chǎn)品和醫(yī)療器械等領(lǐng)域。ARM Cortex-M3 內(nèi)核搭載了若干種調(diào)試相關(guān)的特性。
第一使用JTAG跟蹤訪問(wèn)程序,JTAG是行業(yè)標(biāo)準(zhǔn)的接口,用于下載和調(diào)試目標(biāo)處理器上的程序以及許多其他功能。它提供了連接設(shè)備的簡(jiǎn)便方法,并且在所有基于Arm處理器的設(shè)備上都可用。JTAG接口可與基于Cortex-M的設(shè)備一起使用,以訪問(wèn)CoreSight調(diào)試功能。
JTAG在每一個(gè)TCK信號(hào)的上升沿采樣TMS信號(hào)和TDI信號(hào),決定狀態(tài)機(jī)的狀態(tài)是否發(fā)生變化,在每一個(gè)TCK信號(hào)的下降沿輸出TDO信號(hào)??梢钥吹剑瑹o(wú)論TAP目前處于哪一個(gè)狀態(tài),只要TMS保持高電平并持續(xù)5個(gè)TCK時(shí)鐘,則TAP一定會(huì)回到Test-Logic-Reset狀態(tài)。
JTAG內(nèi)部有一個(gè)IR(instruction register)寄存器和多個(gè)DR(data register)寄存器,IR寄存器決定要訪問(wèn)的是哪一個(gè)DR寄存器。DR寄存器有IDCODE、BYPASS等。在Test-Logic-Reset狀態(tài)下IR寄存器默認(rèn)選擇的是IDCODE這個(gè)DR寄存器。
JTAG主機(jī)通過(guò)IR SCAN設(shè)置IR寄存器的值,然后通過(guò)DR SCAN來(lái)讀、寫(xiě)相應(yīng)的DR寄存器。
目前RISC-V的官方調(diào)試上位機(jī)是openocd,調(diào)試工具可以是JLink或者CMSIS-DAP??梢苑譃橹饕譃?個(gè)部分,(1)分別是Debug Host,可以理解為PC;(2)Debug Hardware,可以理解為JLink或者CMSIS-DAP這樣的調(diào)試工具;(3)第三部分就是嵌入在芯片內(nèi)部的調(diào)試模塊。在調(diào)試模塊內(nèi)部,與調(diào)試工具直接交互的是DTM模塊,DTM模塊通過(guò)DMI接口與DM模塊交互。
第二SWD串行線調(diào)試。SWD是Serial Wire Debug的簡(jiǎn)稱(chēng),翻譯成中文是”串行線調(diào)試”。 SWD是ARM目前支持的兩種調(diào)試端口之一,另一個(gè)調(diào)試端口叫做JTAG Debug Port,也就是我們常用的J-link上面的調(diào)試端口(JTAG模式下)?;贏RM CoreSight調(diào)試構(gòu)架,SWD可以通過(guò)傳輸數(shù)據(jù)包來(lái)讀寫(xiě)芯片的寄存器。SWD是用于訪問(wèn)ARM調(diào)試接口的雙線協(xié)議。它是ARM調(diào)試接口規(guī)范(ARM Debug Interface Architecture Specification)的一部分,是JTAG的替代品。SWD的物理層由兩條線組成:
SWDIO: 雙向數(shù)據(jù)線
SWCLK: host驅(qū)動(dòng)的時(shí)鐘線
外部設(shè)備(如調(diào)試探針)通過(guò)連接到SWDIO/SWCLK,可以直接訪問(wèn)串行線調(diào)試端口(SW-DP)。SW-DP可以訪問(wèn)一個(gè)或多個(gè)接入端口(AP),通過(guò)AP可以訪問(wèn)系統(tǒng)的其余部分寄存器。 Cortex M系列CPU的一個(gè)重要AP是AHB-AP,它是內(nèi)部AHB總線上的主機(jī)。換句話說(shuō),AHB-AP可以訪問(wèn)內(nèi)部核心的內(nèi)存映射。由于內(nèi)部閃存、SRAM、調(diào)試組件和外圍設(shè)備都是內(nèi)存映射,因此AHB-AP可以控制整個(gè)設(shè)備,包括對(duì)其進(jìn)行編程。整個(gè)SWD操作過(guò)程是分級(jí)進(jìn)行的,時(shí)鐘信號(hào)由SWCLK 管腳輸入,數(shù)據(jù)信號(hào)從SWDIO管腳輸入輸出。首先Debugger對(duì)SW-DP進(jìn)行操作,確定AP寄存器的參數(shù),達(dá)到對(duì)Cortex Memory Map進(jìn)行操作。
SWCLK是始終由host驅(qū)動(dòng)的時(shí)鐘信號(hào)。雙方將推動(dòng)SWDIO線路發(fā)送數(shù)據(jù),SWDIO上的高值表示邏輯“1”,低值表示邏輯的“0”。協(xié)議規(guī)定當(dāng)雙方都將驅(qū)動(dòng)SWDIO線時(shí),規(guī)定了三個(gè)不同的階段。每個(gè)事務(wù)都以host發(fā)送請(qǐng)求為開(kāi)始;Target隨后以應(yīng)答回應(yīng);最后是數(shù)據(jù)傳輸階段。數(shù)據(jù)階段由誰(shuí)控制線路,取決于host發(fā)出的請(qǐng)求類(lèi)型。如果host發(fā)出的是寫(xiě)請(qǐng)求,host將驅(qū)動(dòng)SWDIO線。在讀請(qǐng)求時(shí),target將驅(qū)動(dòng)SWDIO線,將數(shù)據(jù)從target傳輸?shù)絟ost。在所有階段,數(shù)據(jù)都是首先傳輸LSB(最低有效位)。不管是target從SWDIO線上采樣數(shù)據(jù),還是驅(qū)動(dòng)數(shù)據(jù)到SWDIO線上,都是在時(shí)鐘SWCLK的上升沿進(jìn)行。
支持JTAG和SWD模式的下載調(diào)試器很多,J-Link、 ST-LINK、 ULINK這些大眾化的工具都支持,還有很多小眾的下載調(diào)試器同樣也支持。