關(guān) 閉

新聞中心

EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 利用I2C總線實現(xiàn)ATmega88的在應(yīng)用編程

利用I2C總線實現(xiàn)ATmega88的在應(yīng)用編程

作者: 時間:2012-12-05 來源:網(wǎng)絡(luò) 收藏

2 PC端編程軟件設(shè)計
2.1 Intel Hex文件格式
的目標(biāo)程序代碼是采用IntelHex文件格式保存的。Intel Hex文件包含了目標(biāo)代碼及相應(yīng)的地址信息,這些實現(xiàn)必需的信息由PC機(jī)端的上位機(jī)程序提取,并重新以頁面為單位裝幀后發(fā)送給Bootloader便可實現(xiàn)Flash的編程。
Intel Hex文件格式將二進(jìn)制的目標(biāo)機(jī)器代碼以ASCII碼的文本形式記錄,在文件中,每一行都是一個由十六進(jìn)制機(jī)器碼或數(shù)據(jù)常量組成的Hex記錄。記錄格式如表1所列。

本文引用地址:http://2s4d.com/article/159653.htm

d.JPG


每條Hex記錄都是以“:”開頭的,表1中所述的每個字節(jié)在記錄中是由兩個ASCII碼表示的,這樣的兩個十六進(jìn)制數(shù)為一個字節(jié);長度表示的是記錄中數(shù)據(jù)項的長度;地址為數(shù)據(jù)項在Flash中的起始地址;記錄的類型總共有6種,分別為數(shù)據(jù)記錄(00)、文件結(jié)束記錄(01)、擴(kuò)展段地址記錄(01)、開始段地址記錄(03)、擴(kuò)展線性地址記錄(04)、開始線性地址記錄(05)。數(shù)據(jù)是與記錄類型相對應(yīng)的可變長度的數(shù)據(jù)組。校驗字節(jié)計算如下:首先,將每條記錄中除記錄頭和校驗外所有ASCII碼以2個ASCII碼轉(zhuǎn)換為1個字節(jié)的形式轉(zhuǎn)換為二進(jìn)制。然后計算上述二進(jìn)制字節(jié)的累加和,最后將累加和的低字節(jié)取反加1即為校驗字節(jié)。
ATmega88目標(biāo)代碼的Hex文件由數(shù)據(jù)記錄和文件結(jié)束記錄兩種類型的記錄構(gòu)成。上位機(jī)程序在解析過程中以行為單位讀取文件中的記錄,并根據(jù)上述記錄的格式進(jìn)行解析,獲得Flash每一頁面的地址和相應(yīng)的數(shù)據(jù),遇到文件結(jié)束記錄后則停止解析。
2.2 的PC機(jī)串口模擬
PC機(jī)端的編程軟件是通過與ATmega88的Bootloader通信的,在微控制器中是廣泛存在的,一般的微控制器都集成了I2C總線控制模塊。但PC機(jī)基本沒有I2C總線接口,需要專用的USB轉(zhuǎn)I2C總線協(xié)議芯片或其他接口的I2C總線模塊才能實現(xiàn)PC機(jī)與微控制器之間的I2C總線通信。這種方法成本高且實現(xiàn)麻煩,本文給出了一種利用PC機(jī)串口的握手信號模擬I2C總線的方法,相比專用協(xié)議轉(zhuǎn)換芯片或模塊的方法,這種方法更加簡單、高效。為了實現(xiàn)PC機(jī)RS232串口與微控制器I2C總線的電平匹配,設(shè)計了如圖2所示的接口電路。

a.JPG


圖2中,PC機(jī)串口的RTS輸出用來模擬I2C總線的SCI,時鐘信號;DTR輸出模擬I2C總線的SDA輸出數(shù)據(jù)信號;CTS輸入用于接收SDA輸入數(shù)據(jù)。PC機(jī)串口的RS232的高電平為15 V,低電平為-15 V;I2C總線的高電平為+5 V,低電平為0 V。因此,將的握手信號轉(zhuǎn)換成I2C總線信號時需要進(jìn)行相應(yīng)的電平轉(zhuǎn)換,PC機(jī)串口RS232電平與I2C總線FTL電平之間的轉(zhuǎn)換是由電阻R1、R2和5.1V穩(wěn)壓管D1、D2實現(xiàn)的。
當(dāng)RTS輸出+15 V高電平時,由于電阻和穩(wěn)壓管的作用,SCL端電平被穩(wěn)定在+5.1 V;而當(dāng)RTS輸出-15 V低電平時,由于二極管D2導(dǎo)通,SCL電平被鉗位在-0.7 V。這樣,便實現(xiàn)了±15 V的RS232電平到0~5 V CMOS電平的轉(zhuǎn)換;電阻同時也起著限流作用。DTR輸出到SDA信號的電平轉(zhuǎn)換也是同樣的原理,而當(dāng)SDA處于輸入狀態(tài)時,由于CMOS電平可以滿足RS232電平的輸入容限,因此無需進(jìn)行電平轉(zhuǎn)換。
由于用PC機(jī)串口模擬I2C總線時僅僅用到了串口的握手信號,而沒有用到串口的波特率、數(shù)據(jù)長度、奇偶校驗等設(shè)置功能及輸入/輸出緩沖區(qū)的管理功能,本文直接采用Windows提供的API函數(shù)實現(xiàn)串口編程。串口的打開和關(guān)閉分別采用CreateFile函數(shù)和CloseHandle函數(shù)實現(xiàn)。RTS和DTR信號高低電平的控制由EscapeCommFunction函數(shù)將串口作為文件操作實現(xiàn),調(diào)用該函數(shù)后程序要有一定時間的延時以實現(xiàn)通信波特率的控制。CTS的電平狀態(tài)則由GetCommModemStatus函數(shù)查詢得到。
在實現(xiàn)了RTS、DTR的電平控制與CTS電平狀態(tài)的獲取后,借鑒單片機(jī)用I/O口模擬I2C總線的方法,可以通過控制RTS、DTR電平與查詢CTS狀態(tài)來模擬I2C總線。在總線的時序處理與讀寫操作方面,兩種方法的唯一不同在于;用單片機(jī)I/O口模擬I2C總線時,I2C總線的SDA信號由輸出模式轉(zhuǎn)換到輸入模式是通過將單片機(jī)I/O口從輸出轉(zhuǎn)換為輸入實現(xiàn)的;由于串口握手信號無法實現(xiàn)雙向通信,因此,SDA信號的輸入功能是通過將DTR置高電平后讀取CTS狀態(tài)實現(xiàn)的,之所以將DTR置高電平是因為微控制器端的I2C總線的集電極開漏輸出結(jié)構(gòu)需要DTR置高后才能輸出高電平,這類似于I2C總線上拉電阻的功能。
2.3 上位機(jī)程序設(shè)計
PC端上位機(jī)程序的主要功能為:解析應(yīng)用程序的Hex格式文件,并從中提取Flash中每一頁面的地址與數(shù)據(jù)信息;設(shè)置串口號與所需升級的ATmega88的I2C總線地址,利用串口的握手信號模擬I2C總線通信,將Hex文件中的程序代碼準(zhǔn)確無誤地發(fā)送給相應(yīng)地址的Bootloader以實現(xiàn)應(yīng)用程序的在線更新。
根據(jù)上述功能設(shè)計了如圖3所示的上位機(jī)程序界面,開發(fā)環(huán)境采用Borland C++builder 5.0,串口操作通過Windows API接口函數(shù)實現(xiàn)。

b.JPG


I2C總線通信的波特率設(shè)置為10 kbps,這是通過每次EscapeCommFunction函數(shù)調(diào)用后運行相應(yīng)時間的延時函數(shù)實現(xiàn)的,這樣也可以使RTS和DTR信號在改變電平后有足夠的穩(wěn)定時間。點擊“燒錄程序”按鈕后,上位機(jī)程序通過I2C總線向相應(yīng)地址的ATmega88發(fā)送復(fù)位命令,然后循環(huán)發(fā)送Flash第一頁的數(shù)據(jù)幀;ATmega88接收到復(fù)位命令利用看門狗復(fù)位或人工上電復(fù)位后,跳轉(zhuǎn)運行Bootloader程序,開始接收數(shù)據(jù)幀并對相應(yīng)的Flash頁面進(jìn)行編程。Bootloader接收到一幀數(shù)據(jù)后將I2C總線拉低,使總線處于忙狀態(tài),此時上位機(jī)一直查詢SDA狀態(tài)直到SDA恢復(fù)高電平后再操作I2C總線,這樣便實現(xiàn)了有效的通信流量控制。Bootloader對數(shù)據(jù)幀進(jìn)行校驗后對flag進(jìn)行標(biāo)記,上位機(jī)發(fā)送完數(shù)據(jù)幀等I2C總線空閑后,讀取flag并根據(jù)其狀態(tài)重發(fā)數(shù)據(jù)幀或發(fā)送下一幀數(shù)據(jù),這樣便實現(xiàn)了通信的差錯控制,保證寫入程序代碼的正確性。所有Flash頁面編程完畢后,上位機(jī)程序關(guān)閉串口,Bootloader在2 s內(nèi)接收不到數(shù)據(jù)幀后,就能跳轉(zhuǎn)去運行升級后的應(yīng)用程序。

結(jié)語
本文給出了一套完整的利用I2C總線實現(xiàn)的方法,包括Bootloader程序、I2C總線的模擬、上位機(jī)程序及相關(guān)的通信協(xié)議。該方法應(yīng)用于四旋翼飛行器的無感無刷直流電機(jī)驅(qū)動板,成功通過I2C總線實現(xiàn)了4個的在線調(diào)試與升級。該方法經(jīng)過少量針對具體微控制器的代碼修改后也可用于其他AVR系列微控制器的。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉