首頁>技術>

本文能學到在PC連線多個EJTAG的情況下與指定EJTAG通訊EJTAG識別龍芯是否正常啟動正題

EJTAG(Enhanced Joint Test Action Group)是MIPS公司根據IEEE 1149.1協議的基本構造和功能擴充套件而制定的規範,是一個硬體/軟體子系統,在處理器內部實現了一套基於硬體的除錯特性,用於支援片上除錯。

依靠它可以控制CPU手動執行指令,龍芯的bootloader時pmon,下載到片外1M以上的SPI NOR FLASH上。

只有一個ejtag情況下輸入 sudo ./ejtag_debug_usb -t 裝置直接連線唯一ejtag偵錯程式,那麼在有多個的情況下如何指定裝置呢?檢視幫助或許能靈感。

我使用的EJTAG版本是ejtag-debug-3.29.19。

$ sudo ./ejtag_debug_usb --help./ejtag_debug_usb: invalid option -- -usage: ./ejtag_debug_usb [-dlStch] [-e cmd] [-T n]-d: verbose on,show debug messags-e 'cmd': run cmd-l: do not use read line-S: log disassemble info-t: disable timer-T n: set timer n ms-c: do not load cfg file-i n: the n usb cable-h: show this help

首先看看ejtag_debug_usb有什麼引數,這裡憑藉感覺 "-i" 選項“指定usb線纜”應該是我要的,PC插入3個EJTAG,分別嘗試 sudo ./ejtag_debug_usb -i 0/1/2 -t 連線板卡。接判定哪個裝置是當前連線的,EJTAG上有兩個LED,紅色執行燈不可控、綠色除錯燈可控, 命令jtagled 1/0 點亮、熄滅LED,就用它來鑑別。

逐個嘗試一遍後發現某個EJTAG一直沒被點亮過,-i 0/1/2都有裝置LED可控制,可排除EJTAG硬體故障,拔掉所有EJTAG,間隔3-5秒逐個重新插入PC,發現規律 “第一次插入的裝置總是無法連線”

聯絡龍芯技術支援,喬工程師回覆 “除了-i 0/1/2外還可以 -i <bus>:<device>指定裝置”

lsusb檢視usb匯流排下有幾個EJTAG裝置。後面的86、88、89是3個EJTAG的裝置編號,按照插入的順序Device ID由小到大分配。

$ lsusb | grep 6688Bus 001 Device 086: ID 2961:6688Bus 001 Device 088: ID 2961:6688Bus 001 Device 089: ID 2961:6688

連線第一個EJTAG則輸入 -i 001:086。

實際生產環境中多個EJTAG哪還分得清EJTAG的插入順序?即使在EJTAG上貼標籤,尋找起來也不是特直觀。於是新增一個尋找EJTAG的功能,很簡單,分不清裝置在哪時讓他的LED閃爍起來。

我的處理器是LS2K,編輯configs/config.ls2k新增fdev函式,啟動ejtag_debug_usb後載入它:source configs/config.ls2k

# EJTAG上LED閃爍,提示當前在操作哪個裝置function fdevecho "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"echo Device LED twinking...echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"echo_offjtagled 1msleep 300jtagled 0msleep 300jtagled 1msleep 300jtagled 0msleep 300jtagled 1msleep 300jtagled 0msleep 300jtagled 1msleep 300jtagled 0msleep 300end

ejtag_debug_usb 啟動後輸入set阻塞程式,除獲得CPU的應答或鍵入ctrl+c,正常情況下應該看到pc指標為0xbfc00000。call program_cachelock gzrom-dtb.bin 是從PC下載 PMON 到晶片。某些時候下載過程遲遲得不到應答,甚至無法ctrl+c退出,此時需要kill掉ejtag_debug_usb,PCB重新上電,重新連線下載。

cpu0 -setgp:0xffffffff8f8fc000 sp:0x0 s8:0xffffffff9fc02f30 ra:0x0 status:0x10d000f4 lo:0x9a604972fa788a03 hi:0x8f08b6ad63cb0587 badvaddr:0x0 cause:0x40008000 pc:0xffffffffbfc00000 epc:0x832aa08488061816

識別應答和下載合成函式auto。

function autojtagled 1jtagregs d8 0 10echo ----------------------------------------echo "Wait  board power up\r\nDetect"setecho "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"echo "         Start download"echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"# 這是板子上的LEDset_gpio_out 0 0call program_cachelock /tftpboot/gzrom-dtb.binecho_off# 這是板子上的LEDset_gpio_out 0 1echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"echo "         Finish"echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"jtagled 0end

最後,現場實際操作操作命令只有如下4條

$ sudo ./ejtag_debug_usb -t -i \<bus>:\<device>cpu0 -source configs/config.ls2kcpu0 -fdevcpu0 -auto
總結ejtag_debug_usb 建議用 -i <bus>:<device> 方式指定外設,-i 0/1/2方式有缺陷ejtag 的set命令可判斷cpu執行到哪
9
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 「python opencv視覺入門到實戰」 五、物件追蹤