新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 一種嵌入式系統(tǒng)實現(xiàn)的JTAG調(diào)試器

        一種嵌入式系統(tǒng)實現(xiàn)的JTAG調(diào)試器

        作者: 時間:2009-11-05 來源:網(wǎng)絡 收藏

        ARM7TDMI 提供了4 條掃描鏈, 分別是掃描鏈0、1、2 和3.通過掃描鏈0可以訪問arm7TDMI內(nèi)核的外圍電路,包括數(shù)據(jù)總線。該掃描鏈長度為113位, 具體包括數(shù)據(jù)總線的0 ̄31位、內(nèi)核控制信號、地址總線的0 ̄31 位、ICE -RT的控制信號等。掃描鏈1是掃描鏈0的子集, 長度為33位,具體包括數(shù)據(jù)總線的0 ̄31位和BREAKPT信號,掃描鏈1比掃描鏈0的長度短了很多,通過掃描鏈1可以更快地將指令或數(shù)據(jù)插入到ARM7TDMI的內(nèi)部。掃描鏈2長度為38位, 該掃描鏈專門用來訪問ICE-RT內(nèi)部的寄存器, 通過訪問ICERT的內(nèi)部寄存器,可以讓ARM7TDMI進入調(diào)試狀態(tài)、設(shè)置斷點、設(shè)置觀察點。通過掃描鏈3, arm7TDMI可以訪問外部的邊界掃描鏈, 該掃描鏈用得很少。

        ARM7TDMI 的調(diào)試狀態(tài)和正常運行狀態(tài)是有區(qū)別的。在正常運行狀態(tài)下, ARM7TDMI 由MCLK( MemoryClock)驅(qū)動, 正常運行。在調(diào)試狀態(tài)下, ARM7TDMI的正常運行被打斷,并且和的其他部分隔離開來。可以通過掃描鏈插入特定的ARM/THUMB指令來讀寫ARM7TDMI的內(nèi)部寄存器和修改內(nèi)存的內(nèi)容。在完成需要的操作后,可以用RESTART 指令讓arm7TDMI返回到正常運行狀態(tài),恢復原來的運行。

        的嵌入式

        硬件是以基于ARM7芯片的嵌入式的。該系統(tǒng)以帶以太網(wǎng)接口的arm芯片S3C4510B為核心處理器, 以μClinux為嵌入式操作系統(tǒng)。JTAG軟件主要包括兩部分: JTAG調(diào)試器與目標機的接口模塊和與調(diào)試主機的接口模塊。

        嵌入式系統(tǒng)設(shè)計

        設(shè)計并制作標準的S3C4510B應用系統(tǒng), 主要配置為2MBFLASH、16MBSDRAM、10/100Mbps 自適應以太網(wǎng)口、終端接口、并行I/O 接口等。利用S3C4510B 的通用I/O口中的P[4]、P[5]、P[6]、P[8]分別模擬JTAG標準中TAP的4個信號接口, 即TCK、TMS、TDI、TDO.

        從軟件上看, 需要將μClinux 操作系統(tǒng)移植到設(shè)計制作的基于S3C4510B的JTAG調(diào)試器硬件平臺上,以便開發(fā)基于網(wǎng)絡的調(diào)試器軟件。μCLinux是為沒有內(nèi)存管理單元(MMU)的處理器設(shè)計的一種嵌入式操作系統(tǒng),它繼承了桌面Linux的強大網(wǎng)絡功能,其內(nèi)核采用模塊化的組織結(jié)構(gòu),通過增減內(nèi)核模塊的方式來增減系統(tǒng)的功能。

        通常,在PC機上通過并口模擬JTAG時序,也可以按照標準仿真器設(shè)計JTAG調(diào)試器。與上述方案不同,本設(shè)計采用開放源代碼軟件設(shè)計JTAG調(diào)試器應用軟件,主要參考了Open- JTAG小組開發(fā)的通過PC機并口JTAG操作的軟件jtager - 1.0.0,將其中對PC 機并口的操作改為對S3C4510B口線的操作,通過設(shè)置S3C4510B的通用I/O口模式寄存器IOPMOD 的值可將P[4]、P[5]、P[6]設(shè)置為輸出模式,將P[8]設(shè)置為輸入模式,然后通過編程設(shè)置I/O口數(shù)據(jù)寄存器IOPDATA的值,控制P [4]、P[5]、P[6]、P[8]的狀態(tài)實現(xiàn)JTAG標準要求的時序。隨后,根據(jù)arm7TDMI調(diào)試特性,修改操作代碼,增加通過網(wǎng)絡的遠程調(diào)試功能。

        arm7TDMI的JTAG指令實現(xiàn)

        ARM7TDMI 的指令寄存器長度是4位, 通過TAP和JTAG接口, 可以把指令裝載到指令寄存器中。在CAPTURE-IR狀態(tài)下, 固定值B0001總是被裝載到指令寄存器中。在SHIFT- IR狀態(tài)下, 可以把arm7TDMI支持的新指令從TDI串行輸入,同時固定值B0001會從TDO 串行輸出。通過輸出的這個固定值,可以判斷當前的操作是否正確。在UPDATE- IR狀態(tài)下, 新輸入的指令被裝載到指令寄存器中。在回到RUN- TEST/IDLE狀態(tài)后,新指令立即生效。

        IDCODE和SCAN_N是ARM7TDMI調(diào)試中經(jīng)常用到的JTAG命令。IDCODE命令的二進制代碼是1110.IDCODE命令將Device Identification Code寄存器連接到TDI和TDO之間。Device Identification Code寄存器的長度是32 位,通過TAP可以讀到ARM7TDMI的ID.SCAN_N命令的二進制代碼是0010.arm7TDMI 提供了4 條掃描鏈,通過SCAN_N指令可以選擇需要訪問的掃描鏈。選擇掃描鏈的過程是:先把SCAN_N指令裝載到指令寄存器中,該指令會將長度為4位的掃描鏈選擇寄存器連接到TDI和TDO之間;通過TAP狀態(tài)的轉(zhuǎn)移便可使選擇的掃描鏈連接到TDI和TDO之間。

        另外BYPASS、INTEST、RESTART等JTAG指令的實現(xiàn)方法與上面兩條指令的實現(xiàn)方法類似。

        嵌入式ICE- RT邏輯實現(xiàn)

        嵌入式ICE- RT是arm處理器內(nèi)部集成的在線仿真功能模塊,通過JTAG調(diào)試接口與外界交互,其中包含的常用寄存器。

        要訪問嵌入式ICE- RT內(nèi)部的寄存器,可通過掃描鏈2對Debug Control Register進行訪問。實現(xiàn)過程:通過TAP將SCAN_N指令寫入JTAG指令寄存器中,通過TDI將數(shù)值2寫到掃描鏈選擇寄存器中,即選擇了掃描鏈2,在通過掃描鏈2訪問任何嵌入式ICE- RT內(nèi)部寄存器之前,還需要用INTEST指令將當前通過SCAN_N指令選擇的掃描鏈置為內(nèi)部測試狀態(tài)。寫入INTEST指令的過程和寫入SCAN_N 指令的過程類似。接下來就可以通過掃描鏈2訪問嵌入式ICE- RT內(nèi)部寄存器,實現(xiàn)對arm7TDMI的基本調(diào)試功能。

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 泽州县| 巴青县| 衡东县| 乌恰县| 东阳市| 卢龙县| 乌兰察布市| 永德县| 集贤县| 孙吴县| 临桂县| 康定县| 改则县| 克拉玛依市| 安达市| 遂昌县| 沭阳县| 无极县| 马龙县| 无棣县| 蓝山县| 繁峙县| 华宁县| 星子县| 洪洞县| 綦江县| 出国| 揭阳市| 承德县| 临桂县| 尼勒克县| 分宜县| 贵德县| 浦江县| 宁乡县| 遵义市| 新营市| 博湖县| 桃园县| 尉犁县| 香港 |