專利名稱:一種基于片上閃存的系統(tǒng)芯片jtag調(diào)試控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及系統(tǒng)芯片領(lǐng)域,尤其是一種系統(tǒng)芯片JTAG調(diào)試控制方法。
背景技術(shù):
系統(tǒng)芯片(SOC,System on Chip)是指在單個芯片上集成一個完整的系統(tǒng)。這一 設(shè)計技術(shù)始于20世紀(jì)90年代中期。隨著半導(dǎo)體工藝技術(shù)的快速發(fā)展,IC (Integrated Circuit,集成電路)設(shè)計者能夠?qū)⒃絹碓綇?fù)雜的功能集成到單個硅片上,出現(xiàn)了集成電路 (IC)向集成系統(tǒng)(IS,Integrate System)轉(zhuǎn)變的趨勢,SOC就是在這一轉(zhuǎn)變下產(chǎn)生的。隨 著深亞微米工藝技術(shù)日益成熟,集成電路芯片的規(guī)模越來越大。數(shù)字IC從基于時序驅(qū)動 的設(shè)計方法,發(fā)展到基于IP (Intellectual Property,知識產(chǎn)權(quán))核復(fù)用的設(shè)計方法,這一 設(shè)計方法在SOC中得到廣泛的應(yīng)用。SOC能夠充分的利用現(xiàn)有的設(shè)計積累,極大的提高了 ASIC (Application Specified Integrated Circuit,專用集成電路)的設(shè)計能力,因此發(fā) 展十分的迅速,并成為集成電路發(fā)展的必然趨勢。JTAG 是 Joint Test Action Group(聯(lián)合測試行為組織)的簡稱。IEEE 1149.1 標(biāo) 準(zhǔn)就是由JTAG這個組織最初提出的,最終由IEEE批準(zhǔn)并且標(biāo)準(zhǔn)化的。所以,IEEE 1149.1 這個標(biāo)準(zhǔn)一般也俗稱JTAG調(diào)試標(biāo)準(zhǔn)。JTAG接口主要用于芯片的調(diào)試,還可以用于實現(xiàn)ISP (In-System Programmable,在線編程),對FLASH (閃存)等器件進(jìn)行編程。在JTAG調(diào)試當(dāng)中,邊界掃描是一個很重要的概念。邊界掃描技術(shù)的基本思想是 在靠近芯片的輸入輸出管腳上增加一個移位寄存器單元。因為這些移位寄存器單元都分布 在芯片的邊界上,所以被稱為邊界掃描寄存器。當(dāng)芯片處于調(diào)試狀態(tài)的時候,這些邊界掃描 寄存器可以將芯片和外圍的輸入輸出隔離開來。通過這些邊界掃描寄存器單元,就可以觀 察和控制芯片上的輸入和輸出信號。對于芯片的輸入管腳,可以通過與之相連的邊界掃描 寄存器單元把信號(數(shù)據(jù))加載倒該管腳中去;對于芯片的輸出管腳,也可以通過與之相連 的邊界掃描寄存器獲取該管腳上的輸出信號。在正常的運行狀態(tài)下,這些邊界掃描寄存器 對芯片來說是透明的,所以正常的運行不會受到任何影響。這樣,邊界掃描寄存器提供了一 個便捷的方式用以觀測和控制所需要調(diào)試的芯片,任意的讀取和修改芯片內(nèi)的寄存器以及 數(shù)據(jù)成為可能。另外,芯片輸入輸出管腳上的邊界掃描寄存器單元可以相互連接起來,在芯 片的周圍形成一個邊界掃描鏈。邊界掃描鏈可以串行的輸入和輸出,通過相應(yīng)的時鐘信號 和控制信號,就可以方便的觀察和控制處在調(diào)試狀態(tài)下的芯片。JTAG通過TAP (Test Access Port,測試訪問口)來實現(xiàn)對邊界掃描鏈的控制。在 IEEE 1149. 1標(biāo)準(zhǔn)里面,將寄存器分為兩大類數(shù)據(jù)寄存器(DR)和指令寄存器(IR)。邊界 掃描鏈屬于數(shù)據(jù)寄存器中很重要的一種,用來實現(xiàn)對芯片的輸入輸出的觀察和控制,數(shù)據(jù) 寄存器還包括器件標(biāo)識寄存器和旁路寄存器。而指令寄存器用來實現(xiàn)對數(shù)據(jù)寄存器的控 制,例如可以為邊界掃描鏈指定一個訪問對象。TAP是一個通用的端口,通過TAP可以訪問芯片提供的所有數(shù)據(jù)寄存器和指令 寄存器。對整個TAP的控制是通過TAP Controller (TAP控制器)來完成的。標(biāo)準(zhǔn)的TAP接口是四線TMS (Test Mode Selection hput,測試模式選擇輸入)、TCK (Test Clock Input,測試時鐘輸入)、TDI (Test Data Input,測試數(shù)據(jù)輸入)、TDO (Test Data Output, 測試數(shù)據(jù)輸出)。還有一根可選引腳TRST(Test Reset hput,測試復(fù)位輸入)。這些引腳 的定義為TCK為TAP的操作提供一個獨立的,基本的時鐘信號,TAP的一切操作都要通過這 個時鐘來驅(qū)動;TDI為測試數(shù)據(jù)輸入,所有要輸入到特定寄存器的數(shù)據(jù)都要通過TDI接口來 一位一位的串行輸入,這個輸入也有TCK來驅(qū)動;TDO為測試數(shù)據(jù)輸出,所有要從特定寄存 器讀取的數(shù)據(jù)都通過TDO—位一位串行的輸出,這個過程需要通過TCK驅(qū)動;TMS為測試模 式選擇,用來控制TAP狀態(tài)機(jī)的轉(zhuǎn)換,通過這一信號可以控制TAP在不同狀態(tài)之間轉(zhuǎn)換,從 而根據(jù)用戶要求完成不同操作,該信號在TCK上升沿有效;TRST為測試復(fù)位線,通過這一信 號可以對TAP狀態(tài)機(jī)復(fù)位。通過TAP對數(shù)據(jù)寄存器進(jìn)行訪問的一般過程如下首先,通過指令寄存器,選擇一 個需要訪問的數(shù)據(jù)寄存器;其次,將選定的數(shù)據(jù)寄存器連接到TDI和TDO上,即將數(shù)據(jù)寄存 器綁定到掃描鏈路上;最后,在TCK的驅(qū)動下,經(jīng)過TDI,將需要的數(shù)據(jù)輸入到指定的數(shù)據(jù)寄 存器,同時通過TD0,將指定的數(shù)據(jù)寄存器中的數(shù)據(jù)輸出。TAP狀態(tài)機(jī)如附圖1所示,總共有16個狀態(tài),通過TMS來控制這些狀態(tài)之間的轉(zhuǎn) 換,從而達(dá)到對數(shù)據(jù)寄存器的輸入和讀取。JTAG測試系統(tǒng)的正常操作過程是向指令寄存器 送入指令,然后通過數(shù)據(jù)寄存器進(jìn)行測試。測試指令指出了下一個要進(jìn)行的測試以及測試 需要使用的數(shù)據(jù)寄存器。指令分為公開和私有,已經(jīng)定義的標(biāo)準(zhǔn)指定了一個兼容器件必須 支持的最小公開指令集。而私有指令主要用于片上的專用測試,標(biāo)準(zhǔn)并沒有做出具體的規(guī) 定。JTAG的邊界掃描結(jié)構(gòu)如圖2所示。BSC (Boundary Scan Cell)為邊界掃描單元, 能夠截取各個輸入輸出管腳的數(shù)據(jù)。數(shù)據(jù)寄存器的三個重要部分如下器件標(biāo)識寄存器能 夠讀出固定在芯片內(nèi)部的標(biāo)識碼;旁路寄存器將TDI延遲一個時鐘連接到TD0,使得測試臺 可以快速的訪問下一個器件(在多個器件串行連接的情況下);邊界掃描寄存器能夠截取芯 片核心邏輯與輸入輸出管腳之間的所有信號。一個支持JTAG調(diào)試的CPU,只要時鐘TCK正常,就可以通過JTAG接口訪問CPU的 內(nèi)部寄存器和掛在CPU總線上的設(shè)備,如RAM (Random Access Memory,隨機(jī)存取存儲器) 等存儲設(shè)備以及UART,TIMER, GPIO等通用IP和特定芯片的專用IP。這就為系統(tǒng)芯片的調(diào) 試提供了極為便利的條件。但是隨之而來也產(chǎn)生了新的問題。由于通過JTAG接口可以讀 取和修改芯片內(nèi)部存儲設(shè)備的數(shù)據(jù)和IP的寄存器,這就使得那些對信息安全有特殊要求 的芯片面臨數(shù)據(jù)泄露和被篡改的危險。片上閃存具有非易失性的特點,在斷電后能夠保存數(shù)據(jù)。同時由于其位于芯片內(nèi) 部,在芯片封裝完成后,通過JTAG接口可以讀寫片上閃存,但通過其它的方式則很難讀取和 改變片上閃存的數(shù)據(jù)。需要說明的是,在理論上,JTAG接口可以訪問CPU總線上的任何設(shè)備, 所以應(yīng)該能夠?qū)懫祥W存,但閃存的寫入方式與RAM不大相同,寫的時序根據(jù)不同的閃存而 不同,因此需要一個特定的接口 IP將片上閃存與總線相連,實現(xiàn)指定閃存的寫入功能。
發(fā)明內(nèi)容
為了克服已有的系統(tǒng)芯片JTAG調(diào)試控制方法的存在數(shù)據(jù)安全隱患、安全性較差的不足,本發(fā)明提供一種在方便調(diào)試的同時保障數(shù)據(jù)安全、提升安全性的基于片上閃存的 系統(tǒng)芯片JTAG調(diào)試控制方法。本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是
一種基于片上閃存的系統(tǒng)芯片JTAG調(diào)試控制方法,所述JTAG通過TAP實現(xiàn)對邊界掃 描鏈的控制,所述TAP接口包括TCK接口、TMS接口、TDI接口、TDO接口和TRST接口,所述 TCK接口、TMS接口和TDI接口分別通過一個二選一的數(shù)據(jù)選擇器來控制,數(shù)據(jù)選擇器的兩 個輸入分別為正常信號和固定的低電平或高電平,再通過系統(tǒng)芯片內(nèi)的一個位寬為一位的 寄存器REGl來控制數(shù)據(jù)選擇器,當(dāng)寄存器REGl的值為一時,將低電平信號連接到TCK接 口、TMS接口和TDI接口上,屏蔽JTAG接口 ;而寄存器REGl的值為零時,將正常信號連接到 TCK接口、TMS接口和TDI接口上,進(jìn)入正常的調(diào)試模式;
設(shè)置兩個關(guān)鍵值為KEYl和KEY2,以及選定片上閃存中存放關(guān)鍵詞的地址ADDR ; 所述系統(tǒng)芯片JTAG調(diào)試控制方法包括以下步驟
(1)、啟動程序,從零地址開始取指,即進(jìn)入ROM段;
(2)、從片上閃存的ADDR地址讀取32位數(shù)據(jù)VALUE,并將VALUE與關(guān)鍵值KEYl進(jìn)行比
較
如果VALUE與KEYl相等,則將REGl寫成一,此時JTAG接口被屏蔽,并跳轉(zhuǎn)到程序的起 始地址;
如果VALUE與KEYl不相等,則將REGl寫成零,此時JTAG接口能夠正常的工作,順利進(jìn) 入調(diào)試模式;
(3)繼續(xù)將VALUE與KEY2進(jìn)行比較
如果VALUE與KEY2相等,則直接跳轉(zhuǎn)到程序的起始地址。如果VALUE月KEY2不相等, 則跳轉(zhuǎn)到一段循環(huán)指令。作為優(yōu)選的一種方案所述TRST接口也通過一個二選一的數(shù)據(jù)選擇器來控制,當(dāng) 寄存器REGl的值為一時,將高電平信號接到TRST接口上;當(dāng)寄存器REGl的值為零時,將正 常信號接到TRST接口上。進(jìn)一步,所述寄存器REGl支持讀和寫。所述兩個關(guān)鍵值KEYl和KEY2選用除了 OxfffTfTfT外的數(shù)值。所述兩個關(guān)鍵值 KEYl和KEY2的地址與程序段的地址位于片上閃存的不同位置。本發(fā)明的技術(shù)構(gòu)思為為了能夠順利的進(jìn)入JTAG調(diào)試以及調(diào)試完成后能夠安全 有效的屏蔽JTAG接口,本發(fā)明對JTAG的四根輸入引腳TCK,TMS, TDI,TRST進(jìn)行控制(如果 對應(yīng)的JTAG接口沒有TRST,也可只對其它三根控制)。由前文論述可知,這四根引腳對JTAG 調(diào)試起至關(guān)重要的作用,當(dāng)這四根輸入引腳能夠正常輸入時,JTAG工作在調(diào)試模式下,可以 去調(diào)試芯片。當(dāng)TCK,TMS和TDI為固定的低電平,TRST為固定的高電平時,由于沒有TCK 驅(qū)動,同時模式選擇的TMS也為低電平,TAP狀態(tài)機(jī)不能正常跳轉(zhuǎn),JTAG調(diào)試功能被屏蔽, 不能再去讀取和修改芯片內(nèi)部的數(shù)據(jù)。TRST被固定為高電平是因為TRST為低電平時,會 使JTAG接口復(fù)位,故將其接為高電平(沒有這跟引腳也不影響最終的結(jié)果)。以下過程認(rèn)為 JTAG為具有五線的接口,即JTAG接口包含TRST線。四根輸入引腳分別通過一個二選一的數(shù)據(jù)選擇器來控制。數(shù)據(jù)選擇器的兩個輸入 分別為正常信號和固定的低電平或高電平。再通過芯片內(nèi)的一個位寬為一位的寄存器REGl來控制數(shù)據(jù)選擇器,當(dāng)REGl的值為一時,將低電平信號連接到JTAG接口的TCK,TMS, TDI 上,并將高電平信號街道JTAG接口的TRST上,屏蔽JTAG接口;而REGl的值為零時,將正常 信號連接到JTAG接口的TCK,TMS, TDI和TRST上,進(jìn)入正常的調(diào)試模式??紤]到片上閃存 的特性,我們將根據(jù)片上閃存的數(shù)據(jù)來決定REGl的值,從而達(dá)到對JTAG調(diào)試的控制。需要 注意的是,REGl不應(yīng)該用全局復(fù)位信號去復(fù)位,即REGl只支持讀和寫,不支持任何形式的 復(fù)位。整個控制過程的核心是一段固化在芯片上的ROM程序,通過這段ROM程序可以根 據(jù)片上閃存的一個特殊地址的內(nèi)容來使JTAG接口正常工作或者屏蔽JTAG接口。首先應(yīng)該 決定兩個32位的關(guān)鍵值,這兩個關(guān)鍵值是判斷當(dāng)前需求的依據(jù)。由于片上閃存在出廠后一 般是擦除后的狀態(tài),即所有數(shù)據(jù)位都為一,所以選定的兩個關(guān)鍵值應(yīng)該避開Oxffffffff。記 這兩個選定的關(guān)鍵值為KEYl和KEY2。其次應(yīng)該選定一個存放關(guān)鍵值的地址。如果程序也 是存放在片上閃存上,那么應(yīng)該注意不要讓存放的程序段和存放關(guān)鍵值的地址沖突。記選 定的這個地址為ADDR。這段ROM程序起始地址位于芯片內(nèi)地址空間的零地址。程序啟動后會從零地址 開始取指,即會進(jìn)入ROM段。ROM段固化的程序?qū)⑼瓿梢韵乱恍┎僮魇紫?,從片上閃存的 ADDR地址讀取32位數(shù)據(jù)VALUE,并將VALUE與KEYl進(jìn)行比較。如果VALUE與KEYl相等, 則將REGl寫成一,此時JTAG接口被屏蔽,并跳轉(zhuǎn)到程序的起始地址(一般為片上或者片外 存儲器的基地址)。如果VALUE與KEYl不相等,則將REGl寫成零,此時JTAG接口能夠正常 的工作,順利進(jìn)入調(diào)試模式,并繼續(xù)將VALUE與KEY2進(jìn)行比較。如果VALUE與KEY2相等, 則直接跳轉(zhuǎn)到程序的起始地址。如果VALUE月KEY2不相等,則跳轉(zhuǎn)到一段循環(huán)指令。根據(jù)上面的分析,這段ROM程序會產(chǎn)生三個不同的狀態(tài)屏蔽JTAG,跳轉(zhuǎn)到程序起 始段;開啟JTAG,跳轉(zhuǎn)到程序起始段;開啟JTAG,跳轉(zhuǎn)到一段循環(huán)指令。這三種狀態(tài)的作用 如下
(1)芯片調(diào)試前,片上閃存處于擦除的狀態(tài),所有的數(shù)據(jù)位都為一。復(fù)位后,位于零地址 的ROM程序從片上閃存ADDR地址讀回的32位數(shù)據(jù)為Oxffffffff,與KEYl和KEY2都不相 等。ROM程序段將會開啟JTAG,此時由于程序還沒有裝載到存儲器中,不能直接跳到程序的 起始地址(否則CPU取到無法識別的指令),只能跳到一段循環(huán)指令,以確保能夠順利的進(jìn)入 調(diào)試模式。進(jìn)入JTAG調(diào)試模式后,將需要調(diào)試的程序載入存儲器中相應(yīng)的地址空間。并通 過JTAG接口將片上閃存的ADDR地址寫成KEY2的值。(2)再次復(fù)位啟動后,ROM程序段再次從片上閃存ADDR地址讀取數(shù)據(jù),這時讀回的 數(shù)據(jù)為等于KEY2,JTAG正常的工作,由于程序已經(jīng)下載完畢,可以直接跳到程序的起始地 址。這時可以正常的運行程序,監(jiān)測程序運行的狀態(tài),并根據(jù)需要可以反復(fù)的修改和重新載 入程序。直到程序完全運行正確,并希望永久的屏蔽JTAG接口,以防止非法的讀取和修改 芯片內(nèi)的數(shù)據(jù),這時通過JTAG接口將片上閃存的ADD地址寫成KEYl的值。(3)由于片上閃存能夠在斷電后保存數(shù)據(jù),以后的每一次復(fù)位重新啟動后,ROM程 序段從片上閃存的ADDR地址讀取的數(shù)據(jù)都等于KEYl的值,JTAG被屏蔽,無法再通過JTAG 接口去讀取和修改芯片內(nèi)的數(shù)據(jù),也無法再去修改片上閃存的ADDR地址的數(shù)據(jù),從而達(dá)到 了保護(hù)芯片內(nèi)數(shù)據(jù)安全的作用。綜上所述,本發(fā)明能夠通過片上閃存安全有效的對系統(tǒng)芯片的JTAG調(diào)試進(jìn)行控制,從而達(dá)到保護(hù)芯片數(shù)據(jù)安全的目的。本發(fā)明的有益效果主要表現(xiàn)在在方便調(diào)試的同時保障數(shù)據(jù)安全、提升安全性。
圖1是TAP狀態(tài)機(jī)的示意圖。圖2是JTAG的邊界掃描結(jié)構(gòu)圖。
3AMBA(Advanced Microcontroller Bus Architecture, MW^W 制器總線架構(gòu))2. 0結(jié)構(gòu)的簡單片上系統(tǒng)的示意圖。圖4是CPU的JTAG接口的具體連接方法的示意圖。圖5是ROM程序的流程圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明作進(jìn)一步描述。參照圖3 圖5,一種基于片上閃存的系統(tǒng)芯片JTAG調(diào)試控制方法,所述JTAG通 過TAP實現(xiàn)對邊界掃描鏈的控制,所述TAP接口包括TCK接口、TMS接口、TDI接口、TDO接 口和TRST接口,所述TCK接口、TMS接口和TDI接口分別通過一個二選一的數(shù)據(jù)選擇器來 控制,數(shù)據(jù)選擇器的兩個輸入分別為正常信號和固定的低電平或高電平,再通過系統(tǒng)芯片 內(nèi)的一個位寬為一位的寄存器REGl來控制數(shù)據(jù)選擇器,當(dāng)寄存器REGl的值為一時,將低電 平信號連接到TCK接口、TMS接口和TDI接口上,屏蔽JTAG接口 ;而寄存器REGl的值為零 時,將正常信號連接到TCK接口、TMS接口和TDI接口上,進(jìn)入正常的調(diào)試模式;
設(shè)置兩個關(guān)鍵值為KEYl和KEY2,以及選定片上閃存中存放關(guān)鍵詞的地址ADDR ; 所述系統(tǒng)芯片JTAG調(diào)試控制方法包括以下步驟 (1 )、啟動程序,從零地址開始取指,即進(jìn)入ROM段;
(2)、從片上閃存的ADDR地址讀取32位數(shù)據(jù)VALUE,并將VALUE與關(guān)鍵值KEYl進(jìn)行比
較
如果VALUE與KEYl相等,則將REGl寫成一,此時JTAG接口被屏蔽,并跳轉(zhuǎn)到程序的起 始地址;
如果VALUE與KEYl不相等,則將REGl寫成零,此時JTAG接口能夠正常的工作,順利進(jìn) 入調(diào)試模式;
(3)繼續(xù)將VALUE與KEY2進(jìn)行比較
如果VALUE與KEY2相等,則直接跳轉(zhuǎn)到程序的起始地址。如果VALUE月KEY2不相等, 則跳轉(zhuǎn)到一段循環(huán)指令。所述TRST接口也通過一個二選一的數(shù)據(jù)選擇器來控制,當(dāng)寄存器REGl的值為一 時,將高電平信號接到TRST接口上;當(dāng)寄存器REGl的值為零時,將正常信號接到TRST接口 上。所述寄存器REGl支持讀和寫,不支持任何形式的復(fù)位。所述兩個關(guān)鍵值KEYl和KEY2選用除了 Oxffffffff外的數(shù)值。所述兩個關(guān)鍵值 KEYl和KEY2的地址與程序段的地址位于片上閃存的不同位置。
3W AMBA(Advanced Microcontroller Bus Architecture, ^MW控制器總線架構(gòu))2.0結(jié)構(gòu)的簡單片上系統(tǒng)。CPU是一顆支持JTAG調(diào)試的RISC (Reduced Instruction Set Computer,精簡指令集計算機(jī))微處理器。eFlash為片上閃存,采用4片 大小為128K的片上閃存并聯(lián),可以進(jìn)行按word (字,即32位)訪問,地址空間為0x80000 到 Oxfffffc。eFlash Controller (片上閃存控制器)為片上閃存與 AMBA AHB(Advanced High-performance Bus,高性能總線)的接口,這個接口能夠?qū)HB總線信號轉(zhuǎn)換為對應(yīng)的 閃存控制信號,從而實現(xiàn)對閃存的讀,寫,擦操作。也正是有了這個接口,使得通過JTAG對 片上閃存在線編程成為可能。圖4給出了 CPU的JTAG接口的具體連接方法,四個二選一的數(shù)據(jù)選擇器來控制 JTAG接口的四個輸入TMS,TCK, TDI, TRST0數(shù)據(jù)選擇器一的兩個輸入分別為片上系統(tǒng)的 輸入引腳TMS_IN和固定的低電平;數(shù)據(jù)選擇器二的兩個輸入分別為片上系統(tǒng)的輸入引腳 TCK_IN和固定的低電平;數(shù)據(jù)選擇器三的兩個輸入分別為片上系統(tǒng)的輸入引腳TDI_IN和 固定的低電平;數(shù)據(jù)選擇器四的兩個輸入分別為片上系統(tǒng)輸入引腳TRST_IN和固定的高電 平。四個數(shù)據(jù)選擇的控制信號都為JTAG_0FF。這個控制信號來自eFlash Controller中的 一個寄存器REGl,并與REGl的值保持一致。這個REGl只有讀寫功能,不會隨系統(tǒng)的復(fù)位 而復(fù)位。當(dāng)控制信號JTAG_0FF為高電平時,固定的低電平和固定的高電平分別被選中,任 何的調(diào)試控制信息都無法傳遞給TAP,也就是說JTAG調(diào)試被完全屏蔽;當(dāng)JTAG_0FF為低電 平時,來自片上系統(tǒng)的輸入引腳被選中,可以通過這四根輸入將需要的數(shù)據(jù)傳入TAP,從而 JTAG調(diào)試能夠正常的進(jìn)行。選定兩個關(guān)鍵值KEY1,KEY2分別為0x20101234和0x19876789 (關(guān)鍵值可任意選 取,注意不要選擇Oxffffffff,原因見前文論述),存放關(guān)鍵值的地址ADDR為OxffffOc (可 在片上閃存地址空間范圍內(nèi)任意選取一個地址,注意不要與存儲在片上閃存的數(shù)據(jù)相沖 突,而且按照word讀取,地址應(yīng)對齊)。為了能夠根據(jù)片上閃存某個地址的值來改變寄存器REGl的值,需要固化一段ROM 程序,并將這段ROM程序作為整個芯片的啟動程序。ROM程序的流程如附圖5所示。首先 檢測eFlash Controller是否是空閑的(只有在空閑狀態(tài),才能通過eFlash Controller 對片上閃存發(fā)起讀操作)。非空閑則等待,空閑則從OxffffOc讀取一個32位的數(shù)據(jù),記為 VALUE。再將VALUE與0x20101234進(jìn)行比較,相等則直接跳到程序起始地址。不相等則將 eFlash Controller中的寄存器REGl置成0,即將JTAG_0FF置成低電平,并繼續(xù)將VALUE 與0x19876789進(jìn)行比較。若兩者相等,則跳到程序起始段;若兩者不相等,則跳到一段位于 ROM程序的循環(huán)指令。芯片開始調(diào)試前,復(fù)位后從ROM程序段啟動。從OxffffOc處讀回的32位數(shù)據(jù)為 Oxffffffff (閃存初始狀態(tài)為擦除狀態(tài)),與KEY1,KEY2都不相等,ROM程序?qū)EGl寫0。 JTAG_0FF為低電平,JTAG能夠正常工作,并跳到一段位與ROM程序的循環(huán)指令。此時可以 通過JTAG來裝載需要調(diào)試的程序。程序裝載完成后,再將OxfTfTOc寫成0x19876789。復(fù) 位再啟動后,從OxffffOc處讀回來的值為0x19876789,與KEY2相等,ROM程序?qū)EGl寫0。 JTAG_0FF為低電平,JTAG能夠正常工作,并跳到程序的起始段。此時可以通過JTAG來運行 程序,并可重復(fù)裝載,反復(fù)調(diào)試。等到程序調(diào)試完全完成,再將OxfTfTOc寫成0x20121234。 再次復(fù)位重啟后,從OxffffOc讀回的數(shù)據(jù)與KEYl相等,ROM程序?qū)EGl寫1。此時JTAG_ OFF為高電平,屏蔽JTAG接口,并直接跳到程序起始地址,開始運行程序。此時,不能再通過JTAG接口來截取或者修改程序,也不能再去寫OxffffOc這個地址。閃存能夠在斷電后 保存OxffffOc處的數(shù)據(jù),同時REGl不會被復(fù)位,從而JTAG被屏蔽的狀態(tài)能夠永久的保存。
權(quán)利要求
1.一種基于片上閃存的系統(tǒng)芯片JTAG調(diào)試控制方法,所述JTAG通過TAP實現(xiàn)對邊界 掃描鏈的控制,所述TAP接口包括TCK接口、TMS接口、TDI接口、TDO接口和TRST接口,其 特征在于所述TCK接口、TMS接口和TDI接口分別通過一個二選一的數(shù)據(jù)選擇器來控制, 數(shù)據(jù)選擇器的兩個輸入分別為正常信號和固定的低電平或高電平,再通過系統(tǒng)芯片內(nèi)的一 個位寬為一位的寄存器REGl來控制數(shù)據(jù)選擇器,當(dāng)寄存器REGl的值為一時,將低電平信號 連接到TCK接口、TMS接口和TDI接口上,屏蔽JTAG接口 ;而寄存器REGl的值為零時,將正 常信號連接到TCK接口、TMS接口和TDI接口上,進(jìn)入正常的調(diào)試模式;設(shè)置兩個關(guān)鍵值為KEYl和KEY2,以及選定片上閃存中存放關(guān)鍵詞的地址ADDR ;所述系統(tǒng)芯片JTAG調(diào)試控制方法包括以下步驟(1 )、啟動程序,從零地址開始取指,即進(jìn)入ROM段;(2)、從片上閃存的ADDR地址讀取32位數(shù)據(jù)VALUE,并將VALUE與關(guān)鍵值KEYl進(jìn)行比較如果VALUE與KEYl相等,則將REGl寫成一,此時JTAG接口被屏蔽,并跳轉(zhuǎn)到程序的起 始地址;如果VALUE與KEYl不相等,則將REGl寫成零,此時JTAG接口能夠正常的工作,順利進(jìn) 入調(diào)試模式;(3)繼續(xù)將VALUE與KEY2進(jìn)行比較如果VALUE與KEY2相等,則直接跳轉(zhuǎn)到程序的起始地址。
2.如果VALUE月KEY2不相等,則跳轉(zhuǎn)到一段循環(huán)指令。
3.如權(quán)利要求1所述的一種基于片上閃存的系統(tǒng)芯片JTAG調(diào)試控制方法,其特征在 于所述TRST接口也通過一個二選一的數(shù)據(jù)選擇器來控制,當(dāng)寄存器REGl的值為一時,將 高電平信號接到TRST接口上;當(dāng)寄存器REGl的值為零時,將正常信號接到TRST接口上。
4.如權(quán)利要求1或2所述的一種基于片上閃存的系統(tǒng)芯片JTAG調(diào)試控制方法,其特征 在于所述寄存器REGl支持讀和寫。
5.如權(quán)利要求1或2所述的一種基于片上閃存的系統(tǒng)芯片JTAG調(diào)試控制方法,其特征 在于所述兩個關(guān)鍵值KEYl和KEY2選用除了 OxfffTfTfT外的數(shù)值。
6.如權(quán)利要求4所述的一種基于片上閃存的系統(tǒng)芯片JTAG調(diào)試控制方法,其特征在 于所述兩個關(guān)鍵值KEYl和KEY2的地址與程序段的地址位于片上閃存的不同位置。
全文摘要
一種基于片上閃存的系統(tǒng)芯片JTAG調(diào)試控制方法,所述JTAG通過TAP實現(xiàn)對邊界掃描鏈的控制,所述TCK接口、TMS接口和TDI接口分別通過一個二選一的數(shù)據(jù)選擇器來控制,數(shù)據(jù)選擇器的兩個輸入分別為正常信號和固定的低電平或高電平,再通過系統(tǒng)芯片內(nèi)的一個位寬為一位的寄存器REG1來控制數(shù)據(jù)選擇器,當(dāng)寄存器REG1的值為一時,將低電平信號連接到TCK接口、TMS接口和TDI接口上,屏蔽JTAG接口;而寄存器REG1的值為零時,將正常信號連接到TCK接口、TMS接口和TDI接口上,進(jìn)入正常的調(diào)試模式;根據(jù)片上閃存的數(shù)據(jù)決定寄存器REG1的值。本發(fā)明在方便調(diào)試的同時保障數(shù)據(jù)安全、提升安全性。
文檔編號G01R31/3185GK102073009SQ20101056170
公開日2011年5月25日 申請日期2010年11月29日 優(yōu)先權(quán)日2010年11月29日
發(fā)明者嚴(yán)曉浪, 曾健林, 葛海通, 黃凱 申請人:杭州中天微系統(tǒng)有限公司