作者:夏繼強,邢春香,盧明臻,滿慶豐
應(yīng)用串行接口芯片擴展系統(tǒng)時,在初步選擇了串行接口的芯片后,為了對芯片的資源更好地了解,開發(fā)者一般在系統(tǒng)設(shè)計前搭建一個簡單的硬件電路并編制相應(yīng)的軟件對其測試,待性能驗證后再確定最終的設(shè)計方案?本文根據(jù)這一需要設(shè)計了一個用于串行總線芯片測試的實驗平臺?該平臺以PC機為人機接口?采用單片機產(chǎn)生芯片串行通信時序?應(yīng)用這一平臺可以大大簡化芯片使用前的測試過程?這一平臺也為單片機串行擴展的初學(xué)者提供了快捷的學(xué)習(xí)工具?本平臺目前集成了SPI?One-wire?Microware?I2C四種串行接口,在今后的使用中,可根據(jù)需要增加串行接口的種類?
1 串行擴展平臺的結(jié)構(gòu)
SPI?One-wire?Microware?I2C是目前單片機應(yīng)用系統(tǒng)中最常用的幾個串行擴展接口?具有I2C和One-wire接口的外圍器件都有自己的地址編號,單片機通過軟件選通器件;而SPI和Microware擴展接口芯片首先要通過單片機I/O口線選通其片選腳,然后才能對其進行操作?這四種串行擴展接口都有不同的時序要求,但每一種總線的基本時序要求都是一致的,對芯片的操作無非是讀出或?qū)懭耄煌氖蔷唧w的數(shù)據(jù)字節(jié)內(nèi)容,只要按照各自的時序和命令操作,即可實現(xiàn)芯片功能?本文的串行擴展平臺就是基于這一方法搭建的? 串行擴展平臺由兩部分組成:上位機部分由PC機構(gòu)成,具有人機接口界面,操作起來方便直接;下位機部分由單片機及擴展接口電路構(gòu)成,并通過RS-232接口與上位機通信?
下位機的核心是AT89C51單片機?單片機本身并沒有SPI?One-wire?Microware?I2C接口,使用虛擬器件技術(shù),在單片機內(nèi)采用模塊化設(shè)計思想固化四種接口的串行訪問子程序,通過軟件調(diào)用完成這幾種串行擴展的時序,用單片機的普通I/O口線模擬出四種串行接口,在下位機電路板上留有較大的通用板空間或用標準的連接器將串行接口引出,便于與待測芯片連接?AT89C51單片機沒有RS-232接口,但它的UART口可以采用MAX232等芯片擴展出簡單的RS-232接口,與上位機的RS-232接口相接?下位機的結(jié)構(gòu)如圖1所示?
測試時,將待測芯片與對應(yīng)的串行接口相連,操作者在上位機將訪問命令和數(shù)據(jù)通過RS-232接口下傳給下位機;下位單片機對其分析后調(diào)用相應(yīng)的時序模擬程序訪問待測芯片,并將結(jié)果通過RS-232接口上傳給上位機,在上位機顯示?從整個測試過程來看,只要關(guān)心命令和數(shù)據(jù)的輸入和輸出,不必關(guān)心具體時序,近似一種透明的操作?測試后,只需對單片機中的子程序稍加裁減,即可移植到實際應(yīng)用軟件中,為開發(fā)提供了方便?下面將分別介紹這四種串行通信接口的實現(xiàn)?
2 四種串行通信接口的實現(xiàn)
在串行擴展中,可以根據(jù)接口主器件的數(shù)量分為單主器件系統(tǒng)和多主器件系統(tǒng)?其中單主器件系統(tǒng)應(yīng)用最普遍?在單主器件系統(tǒng)中,具有一個主控制器件和多個從器件,數(shù)據(jù)的傳送由主器件控制?主器件啟動和停止數(shù)據(jù)的發(fā)送,提供同步時鐘信號?在應(yīng)用中使用種類最多的是功能繁多的從器件?本文的串行擴展平臺主要針對這些從器件應(yīng)用設(shè)計?所以該平臺采用單主器件系統(tǒng)結(jié)構(gòu),只考慮用單片機的通用I/O口線模擬主器件訪問從器件的時序邏輯?
2.1 I2C總線接口時序
I2C串行總線是Philips公司提出的一種板內(nèi)芯片間串行總線?它用兩根連線即可方便地實現(xiàn)外圍器件擴展?圖2給出了主器件對從器件訪問的基本讀寫時序,SDA為數(shù)據(jù)線,SCL為時鐘線?
I2C總線上數(shù)據(jù)傳送的基本單位為字節(jié),采用低位在前的格式?主從器件之間一次傳輸?shù)臄?shù)據(jù)稱為一幀,由啟動信號?若干個數(shù)據(jù)字節(jié)和應(yīng)答位以及停止信號組成?可以看出,I2C的主要命令只有讀?寫兩種情況,雖然讀寫的字節(jié)根據(jù)具體器件的不同而不同,但其時序關(guān)系不會發(fā)生改變?根據(jù)這一點,下位機只要具備I2C的基本時序即可?這些基本時序包括:啟動?寫字節(jié)?讀字節(jié)?應(yīng)答位?停止信號,并可以組合成兩個子程序:讀N字節(jié)子程序?寫N字節(jié)子程序?
2.2 串行外圍接口SPI
SPI(同步串行外設(shè)接口)由Motorola公司提出,它是一種三線同步接口,分別為同步信號?輸入信號和輸出信號?另外每個擴展芯片還需要一根片選線,主器件通過片選線選通與其通信的從器件?圖3給出了SPI的時序圖?其中,SCK為同步時鐘脈沖,SS為片選線,MOSI為主器件的數(shù)據(jù)輸出和從器件的數(shù)據(jù)輸入線,MISO為主器件的數(shù)據(jù)輸入線和從器件的數(shù)據(jù)輸出線?
SPI是全雙工的,即數(shù)據(jù)的發(fā)送和接收可同時進行?如果僅對從器件寫數(shù)據(jù),主器件可以丟棄同時讀入的數(shù)據(jù);反之,如果僅讀數(shù)據(jù),可以在命令字節(jié)后,寫入任意數(shù)據(jù)?數(shù)據(jù)傳送以字節(jié)為單位,并采用高位在前的格式?SPI接口的通信程序可簡化為:寫讀N字節(jié)子程序?
2.3 Microware串行通訊接口
NS公司的Microware是串行同步雙工通訊接口,由一根數(shù)據(jù)輸出線?一根數(shù)據(jù)輸入線和一根時鐘線組成?所有從器件的時鐘線連接到同一根SK線上,主器件向SK線發(fā)送時鐘脈沖信號,從器件在時鐘信號的同步沿輸出/輸入數(shù)據(jù)?主器件的數(shù)據(jù)輸出線DI和所有從器件的數(shù)據(jù)輸入線相接,從器件的數(shù)據(jù)輸出線都接到主器件的數(shù)據(jù)輸入線DO上?與SPI接口類似,每個從器件也都需要另外提供一條片選通線CS(注意:它采用高選通方式)? 圖4給出了主器件對從器件操作的基本時序,包括寫起始位?寫操作碼和讀字節(jié),數(shù)據(jù)交換采用高位在前的格式?圖4中給出了讀兩個字節(jié)時的情況,在主器件寫完起始位和操作碼后,從器件會應(yīng)答一個 “0”?該應(yīng)答位在主器件寫完操作碼的最后一位時給出?在本文中,主器件速度較慢,可以不考慮等待該位?Microware接口的通用子程序有:啟動子程序,讀N字節(jié)子程序?寫N字節(jié)子程序?不同的Microware器件支持的起始位?操作碼有所不同,但可人為組成合適的字節(jié)?
2.4 One-wire總線
One-wire總線是DALLAS公司研制開發(fā)的一種協(xié)議?它由一個總線主節(jié)點?一個或多個從節(jié)點組成系統(tǒng),通過一根信號線對從芯片進行數(shù)據(jù)的讀取?每一個符合One-wire協(xié)議的從芯片都有一個唯一的地址,包括48位的序列號?8位的家族代碼和8位的CRC代碼?主芯片對各個從芯片的尋址依據(jù)這64位的不同來進行? One-wire總線利用一根線實現(xiàn)雙向通信?因此其協(xié)議對時序的要求較嚴格,如應(yīng)答等時序都有明確的時間要求?基本的時序包括復(fù)位及應(yīng)答時序?寫一位時序?讀一位時序,如圖5和圖6所示?在復(fù)位及應(yīng)答時序中,主器件發(fā)出復(fù)位信號后,要求從器件在規(guī)定的時間內(nèi)送回應(yīng)答信號;在位讀和位寫時序中,主器件要在規(guī)定的時間內(nèi)讀回或?qū)懗鰯?shù)據(jù)?為了與其它模擬接口的子程序在結(jié)構(gòu)形式上盡量一致,在One-wire模擬時序程序中把位讀和位寫時序拓延,形成低位在前的字節(jié)讀寫時序,寫一個字節(jié)的時序如圖7所示?最終形成三個子程序:復(fù)位及應(yīng)答子程序?寫N個字節(jié)子程序和讀N個字節(jié)子程序?
2.5 下位機軟件
從功能上來說,下位機軟件的作用是接收上位機發(fā)出的命令,分析命令,根據(jù)命令對各時序子程序進行組合和調(diào)用,形成正確的訪問時序邏輯;如果有返回數(shù)據(jù),還要將返回數(shù)據(jù)回送上位機顯示?前面已經(jīng)對四種串行接口的模擬時序子程序進行了簡要介紹,由于篇幅所限,無法對每個子程序進行詳細的說明,進一步的時序說明,可以查閱有關(guān)的參考文獻和相關(guān)手冊?這里只給出下位機軟件總體流程,如圖8所示?有關(guān)上位的命令在上位機與其通信的協(xié)議中介紹?
3 上位機通信軟件的實現(xiàn)
上位PC機作為人機交互界面,負責(zé)向下位機發(fā)送經(jīng)過人工分析的數(shù)據(jù)字節(jié),這為開發(fā)者提供了對芯片的透明操作?即在對某一類芯片進行操作時并不關(guān)心中間具體的過程,只須分析數(shù)據(jù),形成相應(yīng)的數(shù)據(jù)幀,發(fā)送給下位機,即可完成對芯片的操作?上位機將操作的芯片分成四類(I2C?SPI?Microware?One-wire),用一個字節(jié)進行標識(0?1?2?3)?如果只進行寫操作,則上位機發(fā)送完寫入字節(jié)后,不操作;如果進行讀操作,需重新設(shè)定發(fā)送的字節(jié)并等待下位機返回的數(shù)據(jù)字節(jié)?在Microware和One-wire協(xié)議中須發(fā)送起始位或復(fù)位信號的地方可以用特殊字節(jié)標識?上位機向下位機發(fā)送的數(shù)據(jù)幀由起始字節(jié)?通信選定字節(jié)?讀/寫命令字節(jié)?字節(jié)數(shù)和數(shù)據(jù)字節(jié)組成?圖9給出了在讀和寫兩種情況下,上位機發(fā)送的數(shù)據(jù)幀和下位機返回數(shù)據(jù)幀的組成?
結(jié)束語
本文討論的芯片級串行總線擴展應(yīng)用研發(fā)平臺在實際應(yīng)用中取得了良好的效果,縮短了新器件功能測試的時間,縮短了新產(chǎn)品的開發(fā)周期,并可根據(jù)需要增加串行接口種類?另外,這一平臺也為初學(xué)者全面了解串行擴展技術(shù)提供了良好的途徑?
責(zé)任編輯:gt
-
芯片
+關(guān)注
關(guān)注
459文章
52464瀏覽量
440189 -
單片機
+關(guān)注
關(guān)注
6067文章
44973瀏覽量
649999 -
總線
+關(guān)注
關(guān)注
10文章
2959瀏覽量
89703
發(fā)布評論請先 登錄
AT89C51系列單片機燒寫器的設(shè)計與實現(xiàn)
如何實現(xiàn)(電腦)PC機與單片機AT89C51的串行通信
基于AT89C51應(yīng)用系統(tǒng)的串行通信設(shè)計

關(guān)于51單片機的AT89C51對直流電動機的驅(qū)動競賽實驗

AT89C51單片機

評論