前言
上節(jié)介紹了關(guān)于通過編程器直接讀取芯片獲取固件用來靜態(tài)分析的一點思路陷猫,本篇將介紹通過UART串口來直接與機器交互,通過串口輸出輸入信息的妖,做動態(tài)調(diào)試绣檬。
通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART嫂粟,是一種異步收發(fā)傳輸器娇未,是電腦硬件的一部分。它將要傳輸?shù)馁Y料在串行通信與并行通信之間加以轉(zhuǎn)換星虹。作為把并行輸入信號轉(zhuǎn)成串行輸出信號的芯片零抬,UART通常被集成于其他通訊接口的連結(jié)上镊讼。
對于物聯(lián)網(wǎng)硬件的串口調(diào)試,多數(shù)情況下指的就是通過UART串口進行數(shù)據(jù)通訊平夜, 但是我們經(jīng)常搞不清楚它和COM口的區(qū)別, 以及RS232, TTL等關(guān)系, 實際上UART蝶棋、COM指的物理接口形式(硬件), 而TTL、RS-232是指的電平標準(電信號).
UART有4個pin(VCC, GND, RX, TX), 用的TTL電平忽妒, 低電平為0(0V)玩裙、高電平為1(3.3V或以上),Uart串口的RXD段直、TXD等一般直接與處理器芯片的引腳相連吃溅,而RS232串口的RXD、TXD等一般需要經(jīng)過電平轉(zhuǎn)換(通常由Max232等芯片進行電平轉(zhuǎn)換)才能接到處理器芯片的引腳上鸯檬,否則這么高的電壓很可能會把芯片燒壞决侈。
在調(diào)試的時候, 多數(shù)情況下我們只引出rx、tx京闰、gnd即可颜及,但是UART的數(shù)據(jù)要傳到電腦上分析就要匹配電腦的接口,通常我們電腦使用接口有COM口和USB口(最終在電腦上是一個虛擬的COM口)蹂楣,但是要想連上這兩種接口都要需要進行硬件接口轉(zhuǎn)換和電平轉(zhuǎn)換俏站。
UART串口調(diào)試
UART調(diào)試第一步需要先找到對應(yīng)的四個PIN,在通電情況下痊土,VCC口可以不要接肄扎,判斷 GND, RX, TX三個引腳是調(diào)試的關(guān)鍵,找四個引腳可以先看PCB上的印字赁酝。
但多數(shù)廠商在量產(chǎn)前會去掉用于調(diào)試的串口印字犯祠,如果找不到對應(yīng)引腳的印字,就需要先分析PCB的結(jié)構(gòu)酌呆,一般PCB上有3衡载、4 、5個并排或相距不遠的焊點或通孔隙袁,就有可能是UART調(diào)試串口痰娱。
但PCB上可能存在多個這樣的焊點或通孔,從多個口中找出真正的調(diào)試串口菩收,就需要借助到萬用表梨睁。
萬用表找串口首先需要找到GND口,就是接地口娜饵,在疑似串口的焊點處坡贺,通過測量電勢差,可以判斷出GND口,通過連接焊點和輸入負極遍坟,如果電勢為0拳亿,就可能是GND口,如果電勢為最大值政鼠,例如3.6V风瘦、5V等队魏,就可能是VCC口切威。然后通過UART轉(zhuǎn)換器對應(yīng)的4個口捎泻,引出導(dǎo)線,并設(shè)置好串口輸出環(huán)境后,就可以依次嘗試樟氢。也可以通過短接其中的兩口,如果機器重啟玫霎,就可以判斷這兩口為VCC和GND鸽斟。
需要注意的是,在TTL電平模式下呢诬,UATR轉(zhuǎn)換接口上的RX涌哲、TX口與上位設(shè)備,也就是PCB上的UART口的RX和TX是需要反接的尚镰。
案例一:調(diào)試某智能攝像頭
通過萬用表測量電勢差之后阀圾,在靠近CPU的地方有三個通孔,有可能是UART串口狗唉,用導(dǎo)線連接之后初烘,設(shè)置波特率為115200。
用SecureCRT連接串口分俯,給機器通上電之后肾筐,串口立馬輸出了啟動信息,并可以執(zhí)行命令缸剪,說明串口正確吗铐,如果遇到無法輸入的情況,首先檢查接線是否松動杏节,然后在SecureCRT中的唬渗, Session Options -> Connection -> Serial -> Flow Control,將原先選中的 RTS/CTS取消掉拢锹,這是因為如果選中了RTS/CTS 谣妻,則硬件上要有對應(yīng)接口,軟件上實現(xiàn)對應(yīng)協(xié)議卒稳,才能實現(xiàn)此流控制蹋半。如果串口輸出為亂碼,則需要切換波特率充坑,直至輸出正常减江。
案例二:調(diào)試某路由器
在靠近cpu的地方有四個通孔染突,測量電勢差后,利用導(dǎo)線探針辈灼,確定了三個PIN份企,連接轉(zhuǎn)換器。
串口中輸出調(diào)試信息巡莹,因波特率設(shè)置問題司志,初始輸出為亂碼,改為38400即可正常輸出降宅。
案例三:調(diào)試某路由器
在PCB上有四個焊點骂远,先測量電勢差,分出GND和VCC腰根,在利用焊槍分別焊上導(dǎo)線激才,連接轉(zhuǎn)換接口,測試出TX和RX口额嘿。
設(shè)置波特率為57600瘸恼,串口輸出正確,并可執(zhí)行命令册养。
案例四:調(diào)試某路由器
在PCB一側(cè)有5個通孔东帅,并標注有UART-0字樣,通電后捕儒,測試各口電勢差冰啃,確實GND和VCC后,連接轉(zhuǎn)換接口刘莹,并測試出RX和TX口阎毅。
設(shè)置波特率為57600,串口輸出正確点弯,并可執(zhí)行命令扇调。
通過本地架設(shè)的tftp服務(wù)器,并在串口輸入命令抢肛,開啟相關(guān)服務(wù)狼钮,就可以通過tftp與機器傳輸文件。
案例五:調(diào)試某無線數(shù)據(jù)終端
拆開正面壓板捡絮,發(fā)現(xiàn)PCB上標注有印字熬芜,利用PCB夾具和探針,引出RX和TX口福稳,連接轉(zhuǎn)換器涎拉,因該無線終端串口電壓不超過1.7V,焊接容易造成信號衰減,因此采用夾具鼓拧。
因串口輸出信息過多半火,影響輸入和輸出結(jié)果,因此采用串口調(diào)試助手季俩,設(shè)置波特率為115200钮糖,輸入命令并發(fā)送,可以成功執(zhí)行酌住。
案例六:調(diào)試某無線數(shù)據(jù)終端
拆解機器店归,該型機器采用多塊電路板層級設(shè)計,其主要處理芯片位于頂部赂韵,拆解時注意走線位置娱节,防止拉壞接線口,在PCB上有UART的PIN口印字祭示,給每一個PIN口焊上導(dǎo)線,連接轉(zhuǎn)換器谴古。
設(shè)置波特率為921600质涛,連接串口,用root賬號登陸掰担,密碼為空汇陆,成功進入系統(tǒng),執(zhí)行命令带饱。