2016年8月2日 星期二

Published 下午4:42 by with 1 comment

[基礎] OpenOCD 與 STM32


在單晶片開發時,大部分都採用燒錄後執行程式,
並且透過UART吐出數據的方式來debug。

不過隨著系統的複雜度上升,這樣的開發方式逐漸會遇到瓶頸。
也因此,比較大的晶片例如32位元的,通常會內建 JTAG 裝置,
也就是一種後門,方便進行debug。

在此我們採用一種 On-Chip debugger 軟硬體搭配,
簡單來說就是能夠單步執行並且隨時能知道記憶體內容。

各家晶片都有自己的 On-Chip Debugger 裝置,對應的 JTAG 硬體也各有不同。

原本打算採用的是 100 ASK 公司出品的 OpenJtag
但是該公司的這支硬體呢,在Win10下的驅動程式似乎怪怪的不能安裝,
搜尋了一些教學顯示有些麻煩的設定要做,所以暫時先算了。

既然打算要用STM32,那就用先前操作 STM8 的 STLink2 繼續用吧。

在 STM32 的開發板都會把 JTAG 介面開出來,根據接腳圖可以確認是這樣:
這是對應標準的 JTAG 的腳位,適用於像是 ULink  或是 JLink 之類的硬體套件。
如果是要用ST公司的 STLink2 去連接,則會有點不一樣。

根據 這邊的說明 ,只要利用四支街腳就足夠了。如圖所示:
也就是把 STLink2 的 SWDIO 接往 TMS、 SWCLK接往TCK。
然後 GND 和 3V 接好即可通訊使用。

我們接好之後如下圖:

單純的只用杜邦線做銜接。

接好之後,只要確定STLink2的驅動沒問題,那麼只要將中介層的軟體弄好即可。

我們這邊採用的中介層是 OpenOCD
使用了這個中介軟體,就可以將 GDB送來的指令轉換到真正的硬體上。

在OpenOCD的原始網站上,提供的基本是原始碼而已,因為要做跨平台,
所以開放給使用者自已下載回去,在自己的作業系統上編譯。

要在Windows下自己編議OpenOCD可以說是相當麻煩,必須先安裝Cygwin,
也就是模擬Linux環境才能做。詳見這個網站有說明。

由於自己編譯太麻煩,所以根據OpenOCD網站的建議,
這裡可以拿到編好的安裝檔。

下載來之後的安裝畫面就像這樣
基本上都按下一步就能安裝完成了。

但是這個OpenOCD是沒有GUI,完全使用文字介面下指令操作的。
安裝的位置如果在  C:\Program Files 底下的話,之後操作讀取script檔時就會因為那個空格而讀不到。所以我們將OpenOCD安裝在 C:\OpenOCD 以利使用,打字也比較不累。

把所有的東西連線做好,當然開發板的電源記得要接上。


啟動命令列視窗,然後下命令

 cd  C:\OpenOCD\bin

進入OpenOCD執行檔的所在位置,接著執行

openocd -f C:\OpenOCD\scripts\interface\stlink-v2.cfg -f C:\OpenOCD\scripts\target\stm32f1x_stlink.cfg

這行的意思就是啟動OpenOCD並且以 stlink2 銜接 STM32F103 的意思,
所以才要隨之讀取附屬 script 檔。

成功啟動後會出現這樣的訊息:
游標停在那邊不是當機,是OpenOCD已經開始執行。
這時要另外啟動一個文字介面的視窗,並且打字輸入

telnet localhost 4444

就會出現

這樣子代表已經可以進入指令模式操作這顆晶片了。
如果使用GDB的話,則不必啟動這個telnet。

如果你的系統沒有telnet,可以參考這邊的教學來啟動Telnet。






      edit

1 則留言:

  1. 讚啦!寫得很詳細!!
    我也來做個燒錄器硬體搭OpenOCD使用!

    回覆刪除