之前做的板子用的4線JTAG,一直是可以燒寫程序的。最近要改板子,由于4線JTAG太占面積,所以打算換成2線JTAG。但是在調試的過程中卻出現了 Could not find device (or device not supported) Session aborted!的問題。下面講一下解決的過程。
一、4線JTAG和2線JTAG介紹
首先先介紹一下4線JTAG和2線JTAG。這里以我用的MSP430F6638為例。5系列和6系列的應該都差不多。
4線JTAG需要用到430上6個腳,分別為TDO(1),TDI(3),TMS(5),TCK(7),TEST(8)以及RST(11)腳,再加上一個共地的角GND(9),一個VDD腳(2或4),VDD這個腳根據你單片機是非JTAG供電還是JTAG供電,分別選擇接在2號腳或者4號腳。根據MSP430F5529demo板的板載仿真器的電路結構猜測,應該是JTAG仿真器內部有一個電平轉換芯片,當單片機采用非JTAG供電時,可能電壓與JTAG仿真器輸出電壓不一致,這時需要一個電平轉換芯片將信號電平轉換一下,使得兩者一致?
2線JTAG只需要用到單片機上的RST腳和TEST腳,這兩個其實是復用引腳,在2線JTAG模式下,應該稱為SBWTDIO和SBWTCK更準確。除了那兩根信號線之外,再加一個共地線應該就可以燒寫程序了。
二、問題的描述及解決
問題的現象描述:
當采用4線JTAG燒寫程序時,一切正常;但是使用2線JTAG燒寫程序時,卻報出了 Could not find device (or device not supported) Session aborted!的錯誤,無法燒寫程序。
解決方案:
在查閱之后,發現接在單片機RST引腳的接地電容的大小很有講究。
接地電容如下圖C28所示。按照TI的demo板上來看,這個電容的值為DNP,應該是do not place。但是TI的demo板上,這里又焊接了一個電容,這個到底應該多大呢?一開始沒有仔細研究,我用的是0.1uF,這個是最常用的一個電容值了。
但是后來查閱資料后發現,這個電容值其實很有講究的,在4線JTAG模式下,推薦為10nF,在2線JTAG模式下,最大為2.2nF。我這里用的是0.1uF,顯然是遠超了推薦值。
后來把這個電容換成2nF之后,下載正!

這里分析一下,可能是在2線JTAG模式下,SBWTDIO既作為數據的輸入又作為數據輸出,對時序的要求更高,所以這里電容太大之后,會產生影響。同時,貼上一張關于JTAG部分參數的圖,從圖上似乎可以看到,2線JTAG是速度更高一些,可能也正因為如此,其對時序的要求也更高吧~這個分析可能不一定正確,歡迎交流、指正~
