<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          ISP和JTAG

          作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
          JTAG是Joint Test Action Group(聯(lián)合測試行動(dòng)小組)的縮寫,是一種國際標(biāo)準(zhǔn)測試協(xié)議(IEEE 1149.1兼容),主要用于芯片內(nèi)部測試。JTAG用來對芯片進(jìn)行測試的基本原理是在器件內(nèi)部定義一個(gè)TAP(Test Access Port;測試訪問口)通過專用的JTAG測試工具對內(nèi)部節(jié)點(diǎn)進(jìn)行測試。標(biāo)準(zhǔn)的JTAG接口是4線:TMS、 TCK、TDI、TDO,分別為模式選擇、時(shí)鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出線。

          TMS:測試模式選擇。此引腳用來實(shí)現(xiàn)TAP 控制器各個(gè)狀態(tài)之間的切換。
          TCK: 測試時(shí)鐘。JTAG操作是與TCK 同步的。
          TDI:測試數(shù)據(jù)輸入--需要移位到指令寄存器或數(shù)據(jù)寄存器(掃描鏈)的串行輸入數(shù)據(jù)。
          TDO:測試數(shù)據(jù)輸出-- 自指令寄存器或數(shù)據(jù)寄存器串行移出的數(shù)據(jù)。
          現(xiàn)在,JTAG接口還常用于實(shí)現(xiàn)ISP(In-System Programmable;在線編程),對EEPROM、FLASH等器件進(jìn)行編程和在線調(diào)試。JTAG編程方式是在線編程,傳統(tǒng)開發(fā)流程中先對芯片進(jìn)行預(yù)編程再裝到板上的模式因此而改變,簡化的流程為先固定器件到電路板上,再用JTAG編程,從而大大加快工程進(jìn)度。
          AVR 的JTAG功能(只有部分型號才有)使得AVR的調(diào)試工作非常簡單,可以通過JTAG 接口對Flash、EEPROM、熔絲位和鎖定位進(jìn)行編程。使用AVR studio軟件和JTAG硬件( AVR JTAG編程器,AVR JTAG仿真器)可以進(jìn)行程序下載(亦即編程)和程序在線調(diào)試。通過JTAG功能,工程師可以方便的觀察各個(gè)寄存器的變化和程序的運(yùn)行情況,十分適合單片機(jī)的學(xué)習(xí)與系統(tǒng)開發(fā)。
          什么是ISP?
          ISP是一種通用的程序下載方式,所有AVR單片機(jī)都有ISP下載接口??梢酝ㄟ^ISP下載線或者STK500把程序下載到單片機(jī)中。ISP下載線成本低廉,制作簡單,一個(gè)并口ISP下載線只需幾十元即可得到。但是通過ISP的方式下載程序速度慢并且不能實(shí)現(xiàn)在線的仿真調(diào)試,所以這種編程方式并不適合于單片機(jī)的學(xué)習(xí)與系統(tǒng)開發(fā)。
          什么是Debugwire?
          為了降低成本和調(diào)試引腳的開銷,ATMEL公司在AVR器件上使用的新的調(diào)試接口——Debugwire。通過Debugwire的方式,用戶可以實(shí)現(xiàn)程序的在線調(diào)試,調(diào)試方面Debugwire與JTAG相比其主要區(qū)別在于僅使用一根信號線(RESET),即可完成調(diào)試信息的交互,達(dá)到控制程序流向,執(zhí)行指令以及編程熔絲位的功能,但是在使用中尚需接電源信號:VTref(VCC)、GND。要注意的是,Debugwire不同于JTAG,它只是一種調(diào)試接口,而不是編程接口,也就是說不能通過Debugwire下載程序。
          JTAG,ISP,Debugwire的區(qū)別。
          JTAG:可以進(jìn)行程序的下載和在線仿真調(diào)試,程序下載速度快。只有部分器件支持。在JTAG使能的前提下程序的下載和仿真無需進(jìn)行其他設(shè)定即可。
          ISP:只能進(jìn)行程序的下載,程序下載速度慢。所有AVR單片機(jī)均支持ISP程序下載。
          Debugwire:只能進(jìn)行程序的在線仿真調(diào)試不能進(jìn)行程序的下載。只有比較少的器件支持Debugwire方式仿真。目標(biāo)MCU的ISP功能和debug WIRE功能是互斥的,使能了目標(biāo)MCU的 debug WIRE 功能后ISP功能就無法使用,使能了ISP功能后debug WIRE功能就無法使用。

          細(xì)說ISP和IAP的區(qū)別
          ISP:in system programming,
          IAP: in applicatin programming 但兩者的操作方式,結(jié)果和應(yīng)用場合有區(qū)別
          ISP: 用寫入器將code燒入,不過,芯片可以在目標(biāo)板上,不用取出來,在設(shè)計(jì)目標(biāo)板的時(shí)候就將接口設(shè)計(jì)在上面,所以叫"在系統(tǒng)編程",即不用脫離系統(tǒng);
          IAP: 在應(yīng)用編程,有芯片本身(或通過外圍的芯片)可以通過一系列操作將code寫入,比如一款支持Iap的單片機(jī),內(nèi)分3個(gè)程序區(qū),1作引導(dǎo)程序區(qū),2作運(yùn)行程序區(qū),3作下載區(qū),芯片通過串口接收到下載命令,進(jìn)入引導(dǎo)區(qū)運(yùn)行引導(dǎo)程序,在引導(dǎo)程序下將new code內(nèi)容下載到下載區(qū),下載完畢并校驗(yàn)通過后再將下載區(qū)內(nèi)容復(fù)制到2區(qū),運(yùn)行復(fù)位程序,則Iap完成;
          應(yīng)用場合: 1,ISP 程序升級需要到現(xiàn)場解決,不過好一點(diǎn)的是不必拆機(jī)器了; 2,IAP 如果有網(wǎng)管系統(tǒng)的話,用網(wǎng)管下載一切搞定,人不用跑來跑去, 這可能是他們的優(yōu)點(diǎn)或應(yīng)用吧。 典型IAP:IC卡電話機(jī)內(nèi)含V.xx MODEM芯片,MCU自帶引導(dǎo)區(qū),可遠(yuǎn)程下載更新程序。
          在線編程目前有兩種實(shí)現(xiàn)方法:在系統(tǒng)編程(ISP)和在應(yīng)用編程(IAP)。ISP一般是通過單片機(jī)專用的串行編程接口對單片機(jī)內(nèi)部的Flash存儲(chǔ)器進(jìn)行編程,而IAP技術(shù)是從結(jié)構(gòu)上將Flash存儲(chǔ)器映射為兩個(gè)存儲(chǔ)體,當(dāng)運(yùn)行一個(gè)存儲(chǔ)體上的用戶程序時(shí),可對另一個(gè)存儲(chǔ)體重新編程,之后將控制從一個(gè)存儲(chǔ)體轉(zhuǎn)向另一個(gè)。ISP的實(shí)現(xiàn)一般需要很少的外部電路輔助實(shí)現(xiàn),而IAP的實(shí)現(xiàn)更加靈活,通??衫脝纹瑱C(jī)的串行口接到計(jì)算機(jī)的RS232口,通過專門設(shè)計(jì)的固件程序來編程內(nèi)部存儲(chǔ)器。

          ISP,In System Programing
          主要是指代芯片的燒寫方式,以往寫片子需要把片子拿下來,離開電路,用 編程器燒,換句話說,芯片不能不脫離應(yīng)用系統(tǒng)進(jìn)行寫入。
          ISP 主要針對這個(gè)問題,使用JTAG或者串行口(MCU 內(nèi)部有Boot Loader,通過指定的方式激活之,它可以和PC或其它上位機(jī)通過串口聯(lián)系,不用使單片機(jī)離開應(yīng)用系統(tǒng)而更新內(nèi)部的程序/設(shè)置)進(jìn)行程序的燒寫操作。
          因此,具有ISP 功能的MCU 可以不使用編程器進(jìn)行編程。當(dāng)然,實(shí)現(xiàn)ISP 可能需要一些硬件電路支持,具體的在數(shù)據(jù)手冊中有說明。
          IAP,In Application Programing
          單片機(jī)內(nèi)部具有一些可擦寫的非易失存儲(chǔ)器,如Flash。在單片機(jī)獨(dú)立運(yùn)行時(shí),不具備IAP 功能的單片機(jī)并不能對Flash的數(shù)據(jù)進(jìn)行修改,比如,對自身的某一個(gè)模塊的代碼,數(shù)據(jù)進(jìn)行修改。具備了IAP 功能的MCU ,能夠通過使用各自公司開發(fā)的技術(shù),對于自身進(jìn)行修改。
          簡言之:ISP=>修改MCU 內(nèi)部數(shù)據(jù)需要有外部介入;
          IAP=>修改MCU 內(nèi)部數(shù)據(jù)可以不用外部介入。
          二者可以說是數(shù)據(jù)更新的一種實(shí)現(xiàn)機(jī)制。
          一般具備ISP 功能后,就不要編程器了,而是使用下載線進(jìn)行編程工作。但是不是說他們就一定不支持編程器了,具體型號具體分析。是否需要仿真器進(jìn)行仿真和是否具備ISP和IAP沒有必然的聯(lián)系。只不過具備了IAP功能,可以在MCU內(nèi)寫入監(jiān)控程序,模擬一個(gè)仿真器,當(dāng)然,這個(gè)監(jiān)控程序是要消耗資源的,和使用硬件的仿真器還有一定的差異。


          1、JTAG是一個(gè)通信標(biāo)準(zhǔn),用于計(jì)算機(jī)和單片機(jī)進(jìn)行實(shí)時(shí)快速通訊。
          AVR 的JTAG功能(只有部分型號才有)使得AVR的調(diào)試工作非常簡單,可以通過JTAG 接口對Flash、EEPROM、熔絲位和鎖定位進(jìn)行編程。
          使用AVR studio軟件和JTAG硬件( AVR JTAG編程器,AVR JTAG仿真器)可以進(jìn)行程序下載(編程)和程序在線調(diào)試。
          JTAG接口有四個(gè)引腳。以JTAG的術(shù)語來說,這些引腳組成了測試訪問端口TAP。這些引腳是:
          TMS:測試模式選擇。此引腳用來實(shí)現(xiàn)TAP 控制器各個(gè)狀態(tài)之間的切換。
          TCK:測試時(shí)鐘。JTAG 操作是與TCK 同步的。
          TDI: 測試數(shù)據(jù)輸入--需要移位到指令寄存器或數(shù)據(jù)寄存器(掃描鏈)的串行輸入數(shù)據(jù)。
          TDO:測試數(shù)據(jù)輸出-- 自指令寄存器或數(shù)據(jù)寄存器串行移出的數(shù)據(jù)。

          本文引用地址:http://www.ex-cimer.com/article/201611/322862.htm


          2、ISP是一種通用的程序下載方式,AVR單片機(jī)都有ISP下載接口??梢酝ㄟ^ISP下載線或者STK500把程序下載到單片機(jī)中。

          ISP下載線成本低廉,制作簡單,一個(gè)并口ISP下載線只需幾十元即可得到。開發(fā)工具成本低也是AVR單片機(jī)的優(yōu)勢之一。

          JTAG與ISP的區(qū)別和聯(lián)系

          區(qū)別:JTAG可以調(diào)試程序,而ISP只能下載程序。

          聯(lián)系:同作為AVR程序下載工具,都能把程序從電腦下載到單片機(jī)中。都能對芯片的熔絲位和鎖定位進(jìn)行編程。

          JTAG調(diào)試與普通軟件仿真的區(qū)別和聯(lián)系

          聯(lián)系:都可以在計(jì)算機(jī)調(diào)試程序終端看到程序的運(yùn)行效果,都可以設(shè)置斷點(diǎn),單步運(yùn)行,進(jìn)入循環(huán),跳出循環(huán),連續(xù)運(yùn)行等操作。還能實(shí)時(shí)觀察各寄存器的值,IO口狀態(tài)等。



          關(guān)鍵詞: ISPJTA

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();