前言
上節(jié)介紹了關(guān)于通過編程器直接讀取芯片獲取固件用來靜態(tài)分析的一點(diǎn)思路,本篇將介紹通過UART串口來直接與機(jī)器交互,通過串口輸出輸入信息,做動(dòng)態(tài)調(diào)試。
通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART,是一種異步收發(fā)傳輸器,是電腦硬件的一部分。它將要傳輸?shù)馁Y料在串行通信與并行通信之間加以轉(zhuǎn)換。作為把并行輸入信號(hào)轉(zhuǎn)成串行輸出信號(hào)的芯片,UART通常被集成于其他通訊接口的連結(jié)上。
對(duì)于物聯(lián)網(wǎng)硬件的串口調(diào)試,多數(shù)情況下指的就是通過UART串口進(jìn)行數(shù)據(jù)通訊, 但是我們經(jīng)常搞不清楚它和COM口的區(qū)別, 以及RS232, TTL等關(guān)系, 實(shí)際上UART、COM指的物理接口形式(硬件), 而TTL、RS-232是指的電平標(biāo)準(zhǔn)(電信號(hào)).
UART有4個(gè)pin(VCC, GND, RX, TX), 用的TTL電平, 低電平為0(0V)、高電平為1(3.3V或以上),Uart串口的RXD、TXD等一般直接與處理器芯片的引腳相連,而RS232串口的RXD、TXD等一般需要經(jīng)過電平轉(zhuǎn)換(通常由Max232等芯片進(jìn)行電平轉(zhuǎn)換)才能接到處理器芯片的引腳上,否則這么高的電壓很可能會(huì)把芯片燒壞。
在調(diào)試的時(shí)候, 多數(shù)情況下我們只引出rx、tx、gnd即可,但是UART的數(shù)據(jù)要傳到電腦上分析就要匹配電腦的接口,通常我們電腦使用接口有COM口和USB口(最終在電腦上是一個(gè)虛擬的COM口),但是要想連上這兩種接口都要需要進(jìn)行硬件接口轉(zhuǎn)換和電平轉(zhuǎn)換。


UART串口調(diào)試
UART調(diào)試第一步需要先找到對(duì)應(yīng)的四個(gè)PIN,在通電情況下,VCC口可以不要接,判斷 GND, RX, TX三個(gè)引腳是調(diào)試的關(guān)鍵,找四個(gè)引腳可以先看PCB上的印字。



但多數(shù)廠商在量產(chǎn)前會(huì)去掉用于調(diào)試的串口印字,如果找不到對(duì)應(yīng)引腳的印字,就需要先分析PCB的結(jié)構(gòu),一般PCB上有3、4 、5個(gè)并排或相距不遠(yuǎn)的焊點(diǎn)或通孔,就有可能是UART調(diào)試串口。



但PCB上可能存在多個(gè)這樣的焊點(diǎn)或通孔,從多個(gè)口中找出真正的調(diào)試串口,就需要借助到萬(wàn)用表。


萬(wàn)用表找串口首先需要找到GND口,就是接地口,在疑似串口的焊點(diǎn)處,通過測(cè)量電勢(shì)差,可以判斷出GND口,通過連接焊點(diǎn)和輸入負(fù)極,如果電勢(shì)為0,就可能是GND口,如果電勢(shì)為最大值,例如3.6V、5V等,就可能是VCC口。然后通過UART轉(zhuǎn)換器對(duì)應(yīng)的4個(gè)口,引出導(dǎo)線,并設(shè)置好串口輸出環(huán)境后,就可以依次嘗試。也可以通過短接其中的兩口,如果機(jī)器重啟,就可以判斷這兩口為VCC和GND。
需要注意的是,在TTL電平模式下,UATR轉(zhuǎn)換接口上的RX、TX口與上位設(shè)備,也就是PCB上的UART口的RX和TX是需要反接的。


案例一:調(diào)試某智能攝像頭
通過萬(wàn)用表測(cè)量電勢(shì)差之后,在靠近CPU的地方有三個(gè)通孔,有可能是UART串口,用導(dǎo)線連接之后,設(shè)置波特率為115200。


用SecureCRT連接串口,給機(jī)器通上電之后,串口立馬輸出了啟動(dòng)信息,并可以執(zhí)行命令,說明串口正確,如果遇到無(wú)法輸入的情況,首先檢查接線是否松動(dòng),然后在SecureCRT中的, Session Options -> Connection -> Serial -> Flow Control,將原先選中的 RTS/CTS取消掉,這是因?yàn)槿绻x中了RTS/CTS ,則硬件上要有對(duì)應(yīng)接口,軟件上實(shí)現(xiàn)對(duì)應(yīng)協(xié)議,才能實(shí)現(xiàn)此流控制。如果串口輸出為亂碼,則需要切換波特率,直至輸出正常。


案例二:調(diào)試某路由器
在靠近c(diǎn)pu的地方有四個(gè)通孔,測(cè)量電勢(shì)差后,利用導(dǎo)線探針,確定了三個(gè)PIN,連接轉(zhuǎn)換器。


串口中輸出調(diào)試信息,因波特率設(shè)置問題,初始輸出為亂碼,改為38400即可正常輸出。

案例三:調(diào)試某路由器
在PCB上有四個(gè)焊點(diǎn),先測(cè)量電勢(shì)差,分出GND和VCC,在利用焊槍分別焊上導(dǎo)線,連接轉(zhuǎn)換接口,測(cè)試出TX和RX口。


設(shè)置波特率為57600,串口輸出正確,并可執(zhí)行命令。

案例四:調(diào)試某路由器
在PCB一側(cè)有5個(gè)通孔,并標(biāo)注有UART-0字樣,通電后,測(cè)試各口電勢(shì)差,確實(shí)GND和VCC后,連接轉(zhuǎn)換接口,并測(cè)試出RX和TX口。


設(shè)置波特率為57600,串口輸出正確,并可執(zhí)行命令。


通過本地架設(shè)的tftp服務(wù)器,并在串口輸入命令,開啟相關(guān)服務(wù),就可以通過tftp與機(jī)器傳輸文件。


案例五:調(diào)試某無(wú)線數(shù)據(jù)終端
拆開正面壓板,發(fā)現(xiàn)PCB上標(biāo)注有印字,利用PCB夾具和探針,引出RX和TX口,連接轉(zhuǎn)換器,因該無(wú)線終端串口電壓不超過1.7V,焊接容易造成信號(hào)衰減,因此采用夾具。


因串口輸出信息過多,影響輸入和輸出結(jié)果,因此采用串口調(diào)試助手,設(shè)置波特率為115200,輸入命令并發(fā)送,可以成功執(zhí)行。


案例六:調(diào)試某無(wú)線數(shù)據(jù)終端
拆解機(jī)器,該型機(jī)器采用多塊電路板層級(jí)設(shè)計(jì),其主要處理芯片位于頂部,拆解時(shí)注意走線位置,防止拉壞接線口,在PCB上有UART的PIN口印字,給每一個(gè)PIN口焊上導(dǎo)線,連接轉(zhuǎn)換器。


設(shè)置波特率為921600,連接串口,用root賬號(hào)登陸,密碼為空,成功進(jìn)入系統(tǒng),執(zhí)行命令。

