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





