使用python操縱jlink

2021-09-24 09:41:49 字數 1623 閱讀 7383

機緣巧合之下,我在網上找到了乙個神器,pylink-square。就是用python來控制jlink。經過我的試驗,發現這個包可以在mcu執行期間連上mcu,還不會打斷mcu的執行,更厲害的地方是,它還可以把mcu的ram,flash中的內容讀出來,實時的哦,讀取的操作不會讓mcu停下來。有了這個包,雖然我不能打log了,但是我可以把一些關鍵的變數讀出來看,並且因為不會打斷mcu的執行,所以我可以拿著個jlink,想看哪個裝置就戳上去讀變數。

flash中的存的引數還好說,你肯定是知道位址的。但是一些ram中的變數,要怎麼讀取呢。這裡要分兩種情況,如果是靜態的變數,或者全域性變數,應該是固定位址的,按理說是能夠根據位址直接讀出來的,如果是棧中的變數,函式中的區域性變數,那就無能為力了。另外,雖然我現在還沒嘗試去讀,但是我看到這個pylink的包好像還可以讀暫存器的值,也就是r0~r13。那麼在宕機的時候,是不是能夠讀取這些暫存器的值,還有ram中的資料來判斷宕機是死在哪了呢,這個功能想想還是有可行性的,以後有機會試試。

這裡放一張我在map檔案裡看到的變數,型別是data,gb全域性變數,還可以看到變數的名字在ram中的位址,真是貼心。

接下來我來說說,這個pylink該怎麼用

在命令列中輸入

python -m pip install pylink-square

記得有個square,只是pylink的裝的就是另外乙個包了

pylink找到jlink的依據就是這個jlink的序列號。一開始還真是苦惱了很久,因為一直不知道jlink的序列號去**找。

在開始選單中找到jlink commander。開啟這個commander就會自動連線jlink,這個時候

就看到序列號了。

那麼在pylink,要如何連線jlink,也很簡單。先建立乙個jlink物件。

j = pylink.jlink()

然後根據序列號連線jlink

j.open('59402259')

注意了,這個序列號必須是個字串

連線晶元之前,需要注意,pylink預設是用jtag介面的,如果jlink跟晶元是用swd連線的,要設定pylink的介面為swd。

j.set_tif(pylink.enums.jlinkinte***ces.swd)

介面選對之後,我們要告訴pylink連線的晶元是什麼型號

j.connect('efm32zg210f32『)

如果是一些比較冷門的晶元,可能你輸入晶元的型號jflash都找不到,這個時候可能只能依靠核心的型號來連線晶元了。

j.memery_read8(addr,num)

再進一步天馬行空的話,豈不是python可以操縱晶元外設!!因為操作外設其實就是操作外設暫存器,操作外設暫存器,就跟讀寫flash一樣的。python唯一做不到的就是無法執行中斷服務函式。也就是操作外設的話,只能以輪詢的方式來,比如uart,不能中斷傳送中斷接收這類的,只能查詢接收,查詢傳送。

pymysql包使用(python操縱mysql)

4 更新資料 5 刪除資料 import pymysql db pymysql.connect host localhost user root password 123 port 3306 cursor db.cursor cursor 方法獲取mysql操縱游標,用於執行sql語句 cursor...

JLink配置與使用

前幾天,趙凱同學師弟王飛說他有個jlink,於是我一時心血來潮就借來用,呵,這一玩就耗去了我幾天的時間。說說經歷。第一天下午,我拿那個jlink v8在實驗室台式電腦上試了試,可以用,心裡竊喜,以後我就可以不用這破機器了,用我的自己 接好,再試還是不行。後來,突然想到,之所以下午在實驗室能用,那時因...

J LINK使用問題彙總

三 問題彙總總結 摸索中對出現的問題進行總結,解決方法可供參考,後續不斷更新 錯誤碼如下 error could not read unit serial number 解決方法同二。錯誤碼如下 error could not find core in coresight setup開啟j link...