<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

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

利用I2C總線(xiàn)實(shí)現ATmega88的在應用編程

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

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

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

d.JPG


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

a.JPG


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

b.JPG


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

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


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>