【啟動AI Maker世代 】2024 MAI 開發者社群大會(5/16-17)
|

【Amiccom A8106 RF 無線調光 (1)】JTAG debugger 原理解析

   

作者:Ryan Hu

本系列將介紹如何以 8051 為基礎的 RF 模組來做遙控器與接收器,以完成硬體調光。本篇將先講解其中的 debugger 與 bootloader 運作原理,以及 JTAG 介面的強大功能。

A8106 瑋忠科技版本

一如既往,我們先解釋一下這次的專案要做什麼。簡單來說,我要利用 Amiccom(笙科電子)以 8051 為基底的 RF 模組 — A8106,做一對遙控器和接收器,讓發射端廣播 2.4G 的訊號,而接收端收到 packet 並解析後會完成相對應調光的動作。這次的重點是硬體調光,而不是軟體的 PWM。

這是我在安可爾所經手的第二個案子,老實說,難度真的滿高的。以前在 Arduino 上玩的 WiFi、BLE(都是 2.4G)都是由第三方 library 寫好,再直接 call function 來用即可。但這次我沒有 function 可以 call ,只有下游廠商莫名又難懂的 sample code(很多真的有寫跟沒寫一樣...…)能參考,需要自行研究 2.4G RF 的傳輸方式。

幸好經過幾個星期的努力終於破關(不過只搞定最主要的功能,其他部分需要繼續研究);本系列文章便是專案實作的過程,接下來將會一一分享。

debugger 的秘密

做韌體的同好朋友一定都知道,無論要開發的專案內容為何,「燒錄」絕對是最基本、也是最重要的事。

前一個專案是我第一次使用 keil C51 進行開發,當時有個叫做 SN-LINK 的硬體,據說是 SN8F5701 這個模組開發的 debugger;我不疑有他,接上去後照著步驟設定,的確能夠執行燒錄動作。

而因為 Arduino 並不需要這樣的東西,不需要在模組和電腦之間還要連一個 debugger 才可以燒錄;因此我當時只覺得是特例,並沒有多想,直到這次的專案又出現了 debugger(這次名稱是 ICE,是 Amiccom 自家推出的 debugger),這才完全激起我的好奇心。

為什麼這個 debugger 需要存在?它不就是個燒錄器嗎?我們先講結論,其實它的主要功能並不是燒錄,因此如果你沒有要執行 debug mode,那它其實不需要存在。

而故事的源頭,要從 bootloader 開始講起...…

bootloader 的意義

我們都知道燒錄和 bootloader 脫離不了關係。

Bird 曾經跟我說過:「Everything can be called bootloader before user code.」

在一個模組(開發板)中,bootloader 可以有很多段;例如,若確定為燒錄模式,就會執行接下來的 bootloader 去等待 UART 的資料,接著再寫到 program flash(像是中間經過類似 erase block 等),執行動作後便完成燒錄。

在模組通電的瞬間,模組內會先執行 MCU 廠商已經寫死在裡面的 bootloader,用來控制硬體;像這次使用的 A8106,在其 datasheet 中便提到:P04 腳位如果在 LOW 時會進入燒錄模式,若為 HIGH 則為 normal mode。也就是說,通電後,bootloader 將利用判斷式去偵測 P04 腳位的情況,再根據判斷結果塞對應的值進去相關的暫存器,以完成燒錄或正常模式。

相信有在玩專案的 maker 同好們或多或少都知道這個流程,不過這些跟 debugger 的關聯為何?

一般的埋控開發,在與電腦連結前,中間都會出現一個 middleware(也就是 debugger),而我們就來好好介紹一下這個連接 debugger 的介面。因為 P04 若為 LOW,則與 debugger 連接的其中兩條線(此為 P14 和 P15)將被設成 debug IO(可以進行燒錄或 debug);反之,若 P04 為 HIGH(normal mode),P14 和 P15 就會是普通的 GPIO。

此介面稱為 JTAG(or SWD),不過一般玩 Arduino 的 maker 不太會接觸 JTAG 的介面,而講到 JTAG, 當然也得一起說明 SWD 才完整,但其實簡單來說,SWD 就是簡化版的 JTAG。

JTAG 是在一般模組、開發板上常會看到的 debug 介面,由四隻腳組成(這裡講的是主要形式,市面上還有許多奇形怪狀的形式),分別是:

1. TDI(data in)
2. TDO(data out)
3. CLK(clock)
4. TMS(mode 切換)
*備註:每家使用的名稱可能會有些許差異,但功能都大同小異。

它可以操縱 IC 內暫存器的讀取或寫入,這聽起來沒有很厲害,因為依照上次專案的經驗,我的 user code 也可以直接對 MCU 的暫存器進行設值的動作。
不過我們以這次專案使用的 A8106 為例(雖然 ICE 是走 SWD,不過解釋上用 JTAG),A8106 是 MCU,它只是一顆 IC,原廠的下游廠商則會根據這顆 IC 來做不同的功能,推出市面上我們看到的模組(開發板)。

由此可知,不同廠商很可能都會利用 A8106 這個 MCU ,來兜出不同功能取向的模組,意即若某廠商覺得某些腳位不重要,可能就不會將此腳位拉出來當作為模組的 GPIO pin,或其他功能的 pin 腳位。

本文為會員限定文章

立即加入會員! 全站文章無限看~

                               

已經是會員? 按此登入

只需不到短短一分鐘...

輸入您的信箱與ID註冊即可享有一切福利!

會員福利
1

免費電子報

2

會員搶先看

3

主題訂閱

4

好文收藏

Hu Ryan

Author: Ryan Hu

對於 IOT 軟硬整合相關有極大興趣,鍾愛無人機,目前獨自完成的專案像是瓦力號、GPS 自動語音導覽系統、NTP 網路自動校時時鐘,喜歡流浪。

Share This Post On
468 ad

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *