基于Cortex-M內核的單片機,目前主流的下載接口就是JTAG和SWD。
SWD 和 JTAG引腳區(qū)別:
JTAG:
TDI:Test Data In。 串行輸入引腳
TDO:Test Data Out,串行輸出引腳
TCK:Test Clock,時鐘引腳
TMS:Test Mode Select,模式選擇(控制信號)引腳
TRST:Test Reset,復位引腳
社署:
SWDIO:Serial Wire Data Input Output,串行數(shù)據(jù)輸入輸出引腳
SWCLK:Serial Wire Clock,串行線時鐘引腳
其中SWD只需要兩根線(SWCLK和 SWDIO),在PCB布局有限、引腳資源緊張的情況下,SWD算是一種不錯的選擇。
SWD簡介
SWD:Serial Wire Debug,代表串行線調試,是ARM設計的協(xié)議,用于對其微控制器進行編程和調試。
市面上支持SWD調試接口的下載器很多,比如:ST-Link、 J-Link、 e-Link、 GD-Link等市面上絕大部分用于Cortex-M內核處理器的下載器都支持。
對于SWDIO,是雙向(輸入輸出)數(shù)據(jù)引腳,必須在電路板上對線路進行上拉(ARM 建議采用 100 K)。
每次在協(xié)議中更改 SWDIO 的方向時,都會插入轉換時間,此時線路即不受主機驅動也不受目標驅動。 默認情況下,此轉換時間為一位時間,但可以通過配置 SWCLK 頻率來調整。
調試接口
常見的Cortex-M內核處理器都集成了SWD和JTAG 調試端口,在 SWJ-DP 中, SW-DP 的 2 個 JTAG 引腳與 JTAG-DP 的 5 個 JTAG 引腳中的部分引腳復用。
JTAG與SWD的切換機制:
默認調試接口是 JTAG 接口,如果調試工具想要切換到 SW-DP,它必須在 TMS/TCK(分別映射到 SWDIO 和 SWCLK)上提供專用的 JTAG 序列,用于禁止 JTAG-DP 并使能 SW-DP。 這樣便可僅使用 SWCLK和 SWDIO 引腳來激活SWDP。
該序列為:
輸出超過 50 個 TCK 周期的 TMS (SWDIO) = 1 信號
輸出 16 個 TMS (SWDIO) 信號 0111100111100111 (MSB)
輸出超過 50 個 TCK 周期的 TMS (SWDIO) = 1 信號
SW 協(xié)議序列
每個序列包括三個階段:
主機發(fā)送的數(shù)據(jù)包請求( 8 位)
目標發(fā)送的確認響應( 3 位)
主機或目標發(fā)送的數(shù)據(jù)傳輸階段( 33 位)
數(shù)據(jù)包請求( 8 位):
ACK 響應( 3 位):
DATA 傳輸( 33 位)
這種類似于寄存器的一些Bit位操作,底層的一些原理與普通的通信協(xié)議也有類似之處。。
SW-DP 狀態(tài)
SW-DP 的狀態(tài)機有一個用于標識 SW-DP 的內部 ID 代碼,其中主要包含的狀態(tài):復位、空閑狀態(tài)、 ID 代碼等。
在上電復位后、 DP 從 JTAG 切換到 SWD 后或者線路處于高電平超過 50 個周期后,SW-DP 狀態(tài)機處于復位狀態(tài)。
如果在復位狀態(tài)后線路處于低電平至少兩個周期, SW-DP 狀態(tài)機處于空閑狀態(tài)。
復位狀態(tài)后,該狀態(tài)機必須首先進入空閑狀態(tài),然后對 DP-SW ID CODE 寄存器執(zhí)行讀訪問。 否則,目標將在另一個事務上發(fā)出 FAULT 確認響應。
SW-DP 狀態(tài)機的更多詳細信息,可以參看Cortex-M相關的一些手冊。
SW-DP 寄存器
SWD類似普通外設,也是有一種寄存器,開發(fā)者進行的編程(讀寫)操作,其實就是操作對應的寄存器。
SWD主要的底層就介紹到這里,更多詳情,請參看Cortex-M內核手冊。
-
單片機
+關注
關注
6037文章
44558瀏覽量
635303 -
通信協(xié)議
+關注
關注
28文章
883瀏覽量
40308 -
引腳
+關注
關注
16文章
1196瀏覽量
50483 -
下載器
+關注
關注
1文章
62瀏覽量
12839 -
SWD
+關注
關注
1文章
57瀏覽量
11840
原文標題:SWD下載器通信協(xié)議底層原理
文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論