JLink SWD + VCOM (virtual UART)接線方法
這算是個差不多先生的故事, 因工作的關係, 由網路管理和系統管理以及企業流程程式設計的領域, 進入了微控制器(MCU, 單晶片)firmware開發的世界。我們內部有從電路設計, 到PCB Layout, Assembly的能力, 所以除了MCU原廠出的Evaluation Board, Development Board外, 我們內部會在取得MCU IC後, 製作自己的工程板(Engineering Board)。驗證沒問題後, 就會將工程板改成真正產品的量產板。
幾乎每個人都以自己的角度來看世界, 硬體部門在做工程板的時候, 就我們firmware的角度來看, 他們應該沒想過我們要怎麼過日子吧! 要怎麼把firmware燒錄到工程板, 這件事就可以看得出來, 工程板上就是把比較會用到的(硬體的角度)Pin拉出來, 例如SWCLK, SWDIO, VCC, GND。然後, 給你一支JLink除錯器, 接下來怎麼接上去, 就是你家的事了! 當然, 這也是給我們自我訓練的機會。
原廠的開發板, 有部份會有onboard debugger, 像下面這張Nordic PCA10040, 我圈起來的部份就是, 通常都會是一顆JLink的晶片。
有些原廠的板子也會沒有onboard debugger, 這時候他們通常會設計一些Connector, 20pin, 9pin之類的, 現在debugger的廠商種類很多, 連接線也一樣有很多種。如以下開發板, 就有一個JLink的標準20Pin的連結器。這樣使用原廠開發板寫firmware時, 只要用標準的20pin連接線, 來連接JLink除錯器和開發板就可以了。而這連接線和接頭都有防呆的缺口設計, 所以不會弄錯。
這樣真是太好了, 因為在有onboard JLink debugger的開發板上, 通常在接上USB線的時候, 就會出現一個COM埠, 而這個COM埠就是會連到Target MCU上的UART去。那這樣, 原廠的JLink除錯器應該也是可以做到一樣的功能, 我就不用再額外接一個FTDI之類的USB轉UART的板子來做這件事! 只要佔用電腦的一個USB埠, 就可以同時有除錯器和COM埠可以使用了。
而我們一開始想的是, 如何把MCU上的firmware寫好, 除錯器只知道可以用來燒錄firmware到晶片上, 也可以用來做程式的除錯。這樣就好了, 其他的也沒時間多想了。差不多先生就這樣上身了。因此, 我知道, 原廠的JLink除錯器, 在我們使用SWD除錯時, 只要找到20pin裡的4個: VTref, SWCLK, SWDIO, GND。把這4個Pin接到工程板上的VCC, SWCLK, SWDIO, GND, 然後想辦法給工程板供電, 就可以開始工作了, 此時正常的話, IDE上都會看到有抓到除錯器和Target MCU的資訊。這就很奇怪, JLink除錯器明明是接電腦的USB, 是會有5V供電的, 為什麼不能供電給工程板呢?
雖然心裡覺得很奇怪, 也沒去追究; 然後發現網路上有在賣便宜的相容JLink除錯器, 而這些除錯器有些就只拉出4條拉線: VCC, SWCLK, SWDIO, GND。拿來試, 發現它也真的可以正常工作, 而且可以供電給工程板。這樣, 日子至少比以前好過一點! :-)
這麼貴的JLink原廠除錯器, 為什麼配到我們的工程板, 就變成這麼難用? 我一直想不通!
後來, 在JLink Configurator看到可以啓用VCOM的功能, 如下圖, 打開後, 在Windows的裝置管理員果然看到出現一個新的COM埠裝置(JLink CDC UART Port xxx)。
但是想想也知道, 電腦端的VCOM好了, 但Target MCU上的UART實體線路沒有接, 那怎麼可能可以正常工作呢? 那線路是如何接的呢?
其實, JLink的使用手冊就有說明了, 見J-Link_J-Trace_User_Guide, 上圖就是使用手冊裡的一部份, 正好是說明同時使用SWD和UART的情況。UART部份, 就是再多2條線而已; 把JLink Tx (Pin 5)連接到MCU的Rx, JLink Rx (Pin 17)連接到MCU的Tx。這樣就可以了!由這裡手冊的電路圖來看, 也就解開我之前的疑問了, 為什麼原廠JLink沒有供電, 其實不是沒有, 而是它供的是5V的電, 工程板上的MCU不同, 吃的電壓本就不同, 板子上照理是要放一個電源regulator, 把5V的電轉成MCU合適使用的電壓。這樣JLink除錯器就可以供電給板子了, 而VTref這個Pin接到板子上的VCC, 其實是用來感知Target MCU的供電是否正常, 以及它使用的電壓為何, 並據此來調整其他Pin的反應電壓吧!
而RESET(Pin 15)如果也接到MCU的nRST Pin時, 那這樣在燒錄完firmware後, 就可以由除錯器直接重開MCU, 馬上可以看到改過的程式的執行結果。我們之前沒有接的話, 都要自己去按板子上的RESET鍵, 或者自己斷掉再接上MCU的電源。雖然也可以用啦, 但現在想來都覺得好傻哦!
留言