因為有很多小伙伴是從單片機轉過來的,對JTAG非常熟悉。想用JTAG來調試裸機代碼,而且一直用卡拷貝經常會出現虛擬機連接不上TF卡的情況。 I.MX6ULL本身是支持JTAG的,但是由于關于這個資料真的是太少了,而且還都是英文的,新手很難搞定。所以我們專門調試并整理了這方面的資料來供大家參考學習。 接下來,我先簡單介紹下怎么使用JTAG來調試,后面會把詳細的步驟加到使用手冊中去。 1.1 調試需要的硬件環境 1、i.MX6ULL終結者開發板一塊 2、JLNK V9下載器一個 3、JLINK V9轉換板一個(2.54mm轉2.0mm) 1.2 搭建開發環境 1.2.1 安裝JLINK V9驅動 首先我們需要安裝JLNK V9的驅動,驅動程序大家可以去網上下載,為了方便大家使用我們已經下載好,并保存到光盤目錄的“i.MX6UL終結者光盤資料\02_開發所需軟件\JLINK V9驅動”目錄下了(我們使用的版本是V6.34)。下面我們開始安裝驅動程序。 首先我們鼠標雙擊“JLink V6.34.exe”安裝程序,如下圖所示: ![]() 然后彈出安裝向導,如下圖所示: ![]() 然后我們點擊“Next”按鈕繼續安裝,會彈出license版本許可對話框,我們點擊“I Agree”按鈕,如下圖所示: ![]() 然后彈出是否需要創建桌面快捷方式的對話框,我們選擇創建,然后點擊“Next”按鈕,繼續下一步,如下圖所示: ![]() 然后彈出安裝位置選擇對話框,我們使用默認的安裝目錄(如果需要安裝到其它目錄,可以自己選擇),然后點擊“Install”按鈕,如下圖所示: ![]() 然后開始安裝,如下圖所示: ![]() 最后彈出安裝完成對話框,我們點擊“Finish”按鈕。至此,JLINK V9的驅動安裝完成了。然后我們通過USB數據線鏈接JLINK V9下載器到PC電腦上,我們在設備管理器可以看到Winsows系統識別到了JLNK下載器,如下圖所示: ![]() NXP官方提供了i.MX6ULL的SDK開發包, 這個SDK包提供了Windows和Linux兩個版本,分別針對Windows系統和Linux系統。本章節我們使用Windows版本的SDK。Windows版本的SDK里面的例程提供了IAR的工程版,這些工程是基于IAR開發環境來編譯的。I.MX6ULL的SDK開發包我們可以去NXP官網上下載,為了大家使用方便,我們已經下載好,并保存在了光盤資料的“i.MX6UL終結者光盤資料\01_開發及燒寫工具\4.i.MX6ULL SDK包”目錄下。下面我們先來安裝下SDK開發包。 首先我們雙擊“SDK_2.2_MCIM6ULL_RFP_Win.exe”安裝程序,會彈出安裝界面,我們點擊“Next”按鈕,如下圖所示: ![]() 然后我們一路點擊next,SDK安裝就完成了。 1.2.3 安裝IAR開發工具在上面安裝SDK的章節我們介紹了,SDK里面提供了IAR的工程,所以我們需要在Windows系統下安裝IAR開發工具。大家需要注意SDK提供的IAR工程需要使用IAR 8以下的版本(筆者開始的時候安裝了IAR 8.2,結果在編譯的時候會報錯誤,后來更改成了IAR 7.8,編譯通過)。大家可以去網上下載IAR安裝程序,為了大家使用方便,我們已經下載好,并保存在了光盤資料的“i.MX6UL終結者光盤資料\02_開發所需軟件\IAR7.8安裝程序”目錄下。IAR的安裝在這里就不給大家演示了,詳細的步驟會在使用手冊中添加,不然推文的篇幅就太長了。 1.3 IAR JLNK調試SDK程序 在1.2.2章節我們安裝了SDK程序(安裝位置:G:\nxp),在1.2.3章節我們安裝了IAR開發工具,接下來我們打開IAR開發工具,如下圖所示: ![]() 在本章節我們主要是講解如何通過IAR+JLINK調試i.MX6ULL的IAR工程,關于IAR工具的具體使用,大家可以網上查找相關的文檔。然后我們點擊“file->open->workspace”,如下圖所示: ![]() 然后會打開“Open Workspace”對話框,我們這里以sdk里面的hello_world工程為例,來學習一下通過JLINK來調試i.MX6ULL的程序。該工程的目錄在sdk安裝位置的“boards\evkmcimx6ull\demo_apps\hello_world\iar”目錄下面,因為我們的sdk安裝到了G盤的nxp文件夾下,所以hello_world工程的絕對路徑是“G:\nxp\boards\evkmcimx6ull\demo_apps\hello_world\iar”(大家可以根據自己sdk安裝的位置,選擇對應的目錄)。我們在“Open Workspace”對話框里選擇hello_world工程的目錄,最終在該目錄下選擇“hello_world.eww”(IAR工程文件的后綴名是eww),然后點擊“打開”按鈕,如下圖所示 ![]() Hello_world工程打開后的界面如下圖所示: ![]() 我們可以看到該工程提供了四種編譯方式,如下圖所示: ![]() 我們這里使用默認的“ddr_debug”方式編譯該工程。我們可以點擊工具欄上的“Make”按鈕,編譯該工程,如下圖所示: ![]() 從上圖的編譯結果輸出信息,我們可以看到編譯成功。然后我們連接JLNIK V9下載器到i.MX6ULL終結者開發板的JTAG接口,如下圖所示: ![]() 由于i.MX6ULL芯片的JTAG接口和SAI(聲卡)是復用的,所以我們使用JTAG接口的時候需要修改下開發板(V1.0的底板需要去掉底上的電阻R183;V1.1的底板需要去掉聲卡芯片旁邊的跳線帽(J50))。然后我們連接開發板的調試串口到PC電腦上,并在電腦上打開串口終端,串口終端的波特率設置成115200,8位數據位,無奇偶校驗,1位停止位,不選擇流控,如下圖所示: ![]() 然后我們給開發板上電,接著我們在IAR工程界面的菜單欄點擊“Debug without Loading”圖標,如下圖所示: ![]() 如果JLINK和開發板的JTAG接口連接正確的話,會進入到調試界面,如下圖所示: ![]() 從上圖我們可以看到hello_world的程序已經開始運行,程序的指針在main函數入口處停止,等待我們執行調試。IAR進入調試模式以后,在菜單欄上調試相關的快捷圖標會變成有效狀態(鼠標可以點擊),與調試相關的幾個快捷圖標如下圖所示: ![]() 從上圖,我們可以看到一共有7個快捷圖標,他們分別是: Step Over:單步執行(沒點擊一次,程序相應的運行一行) Step Into:如果程序指針當前指向的是一個函數調用,如果點擊此圖標,則會進入到當前指向的這個函數內部 Step Out:與Step Into想對應,如果我們通過Step Into進入到某個函數內部去執行了,此時想返回到之前的函數,并繼續執行此前函數的嚇一跳命令,我們可以點擊此圖標 Next Statement:右擊某一行選“Set Next Statement”,可以不執行中間程序,執行點直接到此行,用于不執行某些代碼 Run to Cursor:程序調試的時候運行到光標處(我們可以在任意一行程序鼠標單擊一下,使光標定位到該行,然后點擊“Run to Cursor”,程序就會運行到光標所在的行,并停住) Go:執行程序,程序遇到斷點會停止,如果沒有設置斷點,程序就會一直繼續執行 Stop Debugging:結束調試模式 從上圖我們可以看到“Go”快捷圖標的功能是程序繼續運行,如果遇到斷點,就停止,否則一直往下執行。上圖中的程序最后進入while(1)主循環,在while(1)主循環里面主要實現接收串口數據,并把接收到的串口數據通過串口再次發送出去。為了驗證“Go”快捷圖標在沒有遇到斷點的情況下會一直執行,我們繼續點擊“Go”快捷圖標,繼續運行程序,我們可以看到串口終端打印輸出了“hello world.”字符串,如下圖所示: ![]() |