SPI、IIC與UART區(qū)別講課稿_第1頁
SPI、IIC與UART區(qū)別講課稿_第2頁
SPI、IIC與UART區(qū)別講課稿_第3頁
SPI、IIC與UART區(qū)別講課稿_第4頁
SPI、IIC與UART區(qū)別講課稿_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Good is good, but better carries it.精益求精,善益求善。SPI、IIC與UART區(qū)別HYPERLINK/smart_qiang/archive/2009/02/22/1396120.htmlSPI、IIC、UART區(qū)別第一個(gè)區(qū)別當(dāng)然是名字:SPI(SerialPeripheralInterface:串行外設(shè)接口);I2C(INTERICBUS)UART(UniversalAsynchronousReceiverTransmitter:通用異步收發(fā)器)第二,區(qū)別在電氣信號(hào)線上:SPI總線由三條信號(hào)線組成:串行時(shí)鐘(SCLK)、串行數(shù)據(jù)輸出(SDO)、串行數(shù)據(jù)輸

2、入(SDI)。SPI總線可以實(shí)現(xiàn)多個(gè)SPI設(shè)備互相連接。提供SPI串行時(shí)鐘的SPI設(shè)備為SPI主機(jī)或主設(shè)備(Master),其他設(shè)備為SPI從機(jī)或從設(shè)備(Slave)。主從設(shè)備間可以實(shí)現(xiàn)全雙工通信,當(dāng)有多個(gè)從設(shè)備時(shí),還可以增加一條從設(shè)備選擇線。如果用通用IO口模擬SPI總線,必須要有一個(gè)輸出口(SDO),一個(gè)輸入口(SDI),另一個(gè)口則視實(shí)現(xiàn)的設(shè)備類型而定,如果要實(shí)現(xiàn)主從設(shè)備,則需輸入輸出口,若只實(shí)現(xiàn)主設(shè)備,則需輸出口即可,若只實(shí)現(xiàn)從設(shè)備,則只需輸入口即可。I2C總線是雙向、兩線(SCL、SDA)、串行、多主控(multi-master)接口標(biāo)準(zhǔn),具有總線仲裁機(jī)制,非常適合在器件之間進(jìn)行近距離

3、、非經(jīng)常性的數(shù)據(jù)通信。在它的協(xié)議體系中,傳輸數(shù)據(jù)時(shí)都會(huì)帶上目的設(shè)備的設(shè)備地址,因此可以實(shí)現(xiàn)設(shè)備組網(wǎng)。如果用通用IO口模擬I2C總線,并實(shí)現(xiàn)雙向傳輸,則需一個(gè)輸入輸出口(SDA),另外還需一個(gè)輸出口(SCL)。(注:I2C資料了解得比較少,這里的描述可能很不完備)UART總線是異步串口,因此一般比前兩種同步串口的結(jié)構(gòu)要復(fù)雜很多,一般由波特率產(chǎn)生器(產(chǎn)生的波特率等于傳輸波特率的16倍)、UART接收器、UART發(fā)送器組成,硬件上由兩根線,一根用于發(fā)送,一根用于接收。顯然,如果用通用IO口模擬UART總線,則需一個(gè)輸入口,一個(gè)輸出口。第三,從第二點(diǎn)明顯可以看出,SPI和UART可以實(shí)現(xiàn)全雙工,但I(xiàn)2

4、C不行;第四,看看牛人們的意見吧!wudanyu:I2C線更少,我覺得比UART、SPI更為強(qiáng)大,但是技術(shù)上也更加麻煩些,因?yàn)镮2C需要有雙向IO的支持,而且使用上拉電阻,我覺得抗干擾能力較弱,一般用于同一板卡上芯片之間的通信,較少用于遠(yuǎn)距離通信。SPI實(shí)現(xiàn)要簡(jiǎn)單一些,UART需要固定的波特率,就是說兩位數(shù)據(jù)的間隔要相等,而SPI則無所謂,因?yàn)樗怯袝r(shí)鐘的協(xié)議。quickmouse:I2C的速度比SPI慢一點(diǎn),協(xié)議比SPI復(fù)雜一點(diǎn),但是連線也比標(biāo)準(zhǔn)的SPI要少。HYPERLINK/smart_qiang/archive/2009/02/22/1396110.htmlSPI總線SPI總線簡(jiǎn)介同步

5、外設(shè)接口(SPI)是由摩托羅拉公司開發(fā)的全雙工同步串行總線,該總線大量用在與EEPROM、ADC、FRAM和顯示驅(qū)動(dòng)器之類的慢速外設(shè)器件通信。SPI(SerialPeripheralInterface)是一種串行同步通訊協(xié)議,由一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備組成,主設(shè)備啟動(dòng)一個(gè)與從設(shè)備的同步通訊,從而完成數(shù)據(jù)的交換。SPI接口由SDI(串行數(shù)據(jù)輸入),SDO(串行數(shù)據(jù)輸出),SCK(串行移位時(shí)鐘),CS(從使能信號(hào))四種信號(hào)構(gòu)成,CS決定了唯一的與主設(shè)備通信的從設(shè)備,如沒有CS信號(hào),則只能存在一個(gè)從設(shè)備,主設(shè)備通過產(chǎn)生移位時(shí)鐘來發(fā)起通訊。通訊時(shí),數(shù)據(jù)由SDO輸出,SDI輸入,數(shù)據(jù)在時(shí)鐘的上升或下

6、降沿由SDO輸出,在緊接著的下降或上升沿由SDI讀入,這樣經(jīng)過8/16次時(shí)鐘的改變,完成8/16位數(shù)據(jù)的傳輸。SPI通信該總線通信基于主-從配置。它有以下4個(gè)信號(hào):MOSI:主出/從入MISO:主入/從出SCK:串行時(shí)鐘SS:從屬選擇芯片上“從屬選擇”(slave-select)的引腳數(shù)決定了可連到總線上的器件數(shù)量。在SPI傳輸中,數(shù)據(jù)是同步進(jìn)行發(fā)送和接收的。數(shù)據(jù)傳輸?shù)臅r(shí)鐘基于來自主處理器的時(shí)鐘脈沖,摩托羅拉沒有定義任何通用SPI的時(shí)鐘規(guī)范。然而,最常用的時(shí)鐘設(shè)置基于時(shí)鐘極性(CPOL)和時(shí)鐘相位(CPHA)兩個(gè)參數(shù),CPOL定義SPI串行時(shí)鐘的活動(dòng)狀態(tài),而CPHA定義相對(duì)于SO-數(shù)據(jù)位的時(shí)鐘

7、相位。CPOL和CPHA的設(shè)置決定了數(shù)據(jù)取樣的時(shí)鐘沿。數(shù)據(jù)方向和通信速度SPI傳輸串行數(shù)據(jù)時(shí)首先傳輸最高位。波特率可以高達(dá)5Mbps,具體速度大小取決于SPI硬件。例如,Xicor公司的SPI串行器件傳輸速度能達(dá)到5MHz。SPI總線接口及時(shí)序SPI總線包括1根串行同步時(shí)鐘信號(hào)線以及2根數(shù)據(jù)線。SPI模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時(shí)鐘極性和相位可以進(jìn)行配置,時(shí)鐘極性(CPOL)對(duì)傳輸協(xié)議沒有重大的影響。如果CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)

8、據(jù)傳輸。如果CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)備時(shí)鐘相位和極性應(yīng)該一致。SPI主模塊和與之通信的外設(shè)備時(shí)鐘相位和極性應(yīng)該一致。個(gè)人理解這句話有2層意思:其一,主設(shè)備SPI時(shí)鐘和極性的配置應(yīng)該由外設(shè)來決定;其二,二者的配置應(yīng)該保持一致,即主設(shè)備的SDO同從設(shè)備的SDO配置一致,主設(shè)備的SDI同從設(shè)備的SDI配置一致。因?yàn)橹鲝脑O(shè)備是在SCLK的控制下,同時(shí)發(fā)送和接收數(shù)據(jù),并通過2個(gè)雙向移位寄存器來交換數(shù)據(jù)。SPI接口時(shí)序如圖3、圖4所示。SPI是一個(gè)環(huán)形總線結(jié)構(gòu),由

9、ss(cs)、sck、sdi、sdo構(gòu)成,其時(shí)序其實(shí)很簡(jiǎn)單,主要是在sck的控制下,兩個(gè)雙向移位寄存器進(jìn)行數(shù)據(jù)交換。假設(shè)下面的8位寄存器裝的是待發(fā)送的數(shù)據(jù)10101010,上升沿發(fā)送、下降沿接收、高位先發(fā)送。那么第一個(gè)上升沿來的時(shí)候數(shù)據(jù)將會(huì)是sdo=1;寄存器=0101010 x。下降沿到來的時(shí)候,sdi上的電平將所存到寄存器中去,那么這時(shí)寄存器=0101010sdi,這樣在8個(gè)時(shí)鐘脈沖以后,兩個(gè)寄存器的內(nèi)容互相交換一次。這樣就完成里一個(gè)spi時(shí)序。例子:假設(shè)主機(jī)和從機(jī)初始化就緒:并且主機(jī)的sbuff=0 xaa,從機(jī)的sbuff=0 x55,下面將分步對(duì)spi的8個(gè)時(shí)鐘周期的數(shù)據(jù)情況演示一遍

10、:假設(shè)上升沿發(fā)送數(shù)據(jù)脈沖主機(jī)sbuff從機(jī)sbuffsdisdo01010101001010101001上0101010 x1010101x011下0101010010101011012上1010100 x0101011x102下1010100101010110103上0101001x1010110 x013下0101001010101101014上1010010 x0101101x104下1010010101011010105上0100101x1011010 x015下0100101010110101016上1001010 x0110101x106下1001010101101010107上0

11、010101x1101010 x017下0010101011010101018上0101010 x1010101x108下010101011010101010這樣就完成了兩個(gè)寄存器8位的交換,上面的上表示上升沿、下表示下降沿,sdi、sdo相對(duì)于主機(jī)而言的。其中ss引腳作為主機(jī)的時(shí)候,從機(jī)可以把它拉底被動(dòng)選為從機(jī),作為從機(jī)的是時(shí)候,可以作為片選腳用。根據(jù)以上分析,一個(gè)完整的傳送周期是16位,即兩個(gè)字節(jié),因?yàn)?,首先主機(jī)要發(fā)送命令過去,然后從機(jī)根據(jù)主機(jī)的名準(zhǔn)備數(shù)據(jù),主機(jī)在下一個(gè)8位時(shí)鐘周期才把數(shù)據(jù)讀回來SPI總線是Motorola公司推出的三線同步接口,同步串行3線方式進(jìn)行通信:一條時(shí)鐘線SCK,

12、一條數(shù)據(jù)輸入線MOSI,一條數(shù)據(jù)輸出線MISO;用于CPU與各種外圍器件進(jìn)行全雙工、同步串行通訊。SPI主要特點(diǎn)有:可以同時(shí)發(fā)出和接收串行數(shù)據(jù);可以當(dāng)作主機(jī)或從機(jī)工作;提供頻率可編程時(shí)鐘;發(fā)送結(jié)束中斷標(biāo)志;寫沖突保護(hù);總線競(jìng)爭(zhēng)保護(hù)等。圖3示出SPI總線工作的四種方式,其中使用的最為廣泛的是SPI0和SPI3方式(實(shí)線表示):圖2SPI總線四種工作方式SPI模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時(shí)鐘極性和相位可以進(jìn)行配置,時(shí)鐘極性(CPOL)對(duì)傳輸協(xié)議沒有重大的影響。如果CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位

13、(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)音時(shí)鐘相位和極性應(yīng)該一致。SPI接口時(shí)序如圖3、圖4所示。二,.SPI功能模塊的設(shè)計(jì)根據(jù)功能定義及SPI的工作原理,將整個(gè)IPCore分為8個(gè)子模塊:uC接口模塊、時(shí)鐘分頻模塊、發(fā)送數(shù)據(jù)FIFO模塊、接收數(shù)據(jù)FIFO模塊、狀態(tài)機(jī)模塊、發(fā)送數(shù)據(jù)邏輯模塊、接收數(shù)據(jù)邏輯模塊以及中斷形式模塊。深入分析SPI的四種傳輸協(xié)議可以發(fā)現(xiàn),根據(jù)一種協(xié)議,只要對(duì)串行同步時(shí)鐘進(jìn)行轉(zhuǎn)換

14、,就能得到其余的三種協(xié)議。為了簡(jiǎn)化設(shè)計(jì)規(guī)定,如果要連續(xù)傳輸多個(gè)數(shù)據(jù),在兩個(gè)數(shù)據(jù)傳輸之間插入一個(gè)串行時(shí)鐘的空閑等待,這樣狀態(tài)機(jī)只需兩種狀態(tài)(空閑和工作)就能正確工作。SPI協(xié)議心得SPI接口時(shí)鐘配置心得:在主設(shè)備這邊配置SPI接口時(shí)鐘的時(shí)候一定要弄清楚從設(shè)備的時(shí)鐘要求,因?yàn)橹髟O(shè)備這邊的時(shí)鐘極性和相位都是以從設(shè)備為基準(zhǔn)的。因此在時(shí)鐘極性的配置上一定要搞清楚從設(shè)備是在時(shí)鐘的上升沿還是下降沿接收數(shù)據(jù),是在時(shí)鐘的下降沿還是上升沿輸出數(shù)據(jù)。但要注意的是,由于主設(shè)備的SDO連接從設(shè)備的SDI,從設(shè)備的SDO連接主設(shè)備的SDI,從設(shè)備SDI接收的數(shù)據(jù)是主設(shè)備的SDO發(fā)送過來的,主設(shè)備SDI接收的數(shù)據(jù)是從設(shè)備S

15、DO發(fā)送過來的,所以主設(shè)備這邊SPI時(shí)鐘極性的配置(即SDO的配置)跟從設(shè)備的SDI接收數(shù)據(jù)的極性是相反的,跟從設(shè)備SDO發(fā)送數(shù)據(jù)的極性是相同的。下面這段話是SychipWlan8100ModuleSpec上說的,充分說明了時(shí)鐘極性是如何配置的:The81xxmodulewillalwaysinputdatabitsattherisingedgeoftheclock,andthehostwillalwaysoutputdatabitsonthefallingedgeoftheclock.意思是:主設(shè)備在時(shí)鐘的下降沿發(fā)送數(shù)據(jù),從設(shè)備在時(shí)鐘的上升沿接收數(shù)據(jù)。因此主設(shè)備這邊SPI時(shí)鐘極性應(yīng)該配置為下

16、降沿有效。又如,下面這段話是摘自LCDDriverICSSD1289:SDIisshiftedinto8-bitshiftregisteroneveryrisingedgeofSCKintheorderofdatabit7,databit6databit0.意思是:從設(shè)備SSD1289在時(shí)鐘的上升沿接收數(shù)據(jù),而且是按照從高位到地位的順序接收數(shù)據(jù)的。因此主設(shè)備的SPI時(shí)鐘極性同樣應(yīng)該配置為下降沿有效。時(shí)鐘極性和相位配置正確后,數(shù)據(jù)才能夠被準(zhǔn)確的發(fā)送和接收。因此應(yīng)該對(duì)照從設(shè)備的SPI接口時(shí)序或者Spec文檔說明來正確配置主設(shè)備的時(shí)鐘。IICHYPERLINK/smart_qiang/archive

17、/2009/02/22/1396083.html關(guān)于IIC總線2I2C總線工作原理2.1總線的構(gòu)成及信號(hào)類型I2C總線是由數(shù)據(jù)線SDA和時(shí)鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進(jìn)行雙向傳送,最高傳送速率100kbps。各種被控制電路均并聯(lián)在這條總線上,但就像電話機(jī)一樣只有撥通各自的號(hào)碼才能工作,所以每個(gè)電路和模塊都有唯一的地址,在信息的傳輸過程中,I2C總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能。CPU發(fā)出的控制信號(hào)分為地址碼和控制量?jī)刹糠?,地址碼用來選址,即接通需要控制的電路,確定控制的種類;控制

18、量決定該調(diào)整的類別(如對(duì)比度、亮度等)及需要調(diào)整的量。這樣,各控制電路雖然掛在同一條總線上,卻彼此獨(dú)立,互不相關(guān)。I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號(hào),它們分別是:開始信號(hào)、結(jié)束信號(hào)和應(yīng)答信號(hào)。開始信號(hào):SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。結(jié)束信號(hào):SCL為低電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。應(yīng)答信號(hào):接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個(gè)信號(hào)后,等待受控單元發(fā)出一個(gè)應(yīng)答信號(hào),CPU接收到應(yīng)答信號(hào)后,根據(jù)實(shí)際情況作出是否繼續(xù)傳遞信號(hào)的判斷。若未收到應(yīng)答信號(hào),由判斷為受控單

19、元出現(xiàn)故障。目前有很多半導(dǎo)體集成電路上都集成了I2C接口。帶有I2C接口的單片機(jī)有:CYGNAL的C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外圍器件如存儲(chǔ)器、監(jiān)控芯片等也提供I2C接口。I2C(InterIntegratedCircuit)總線是一種由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。I2C總線產(chǎn)生于在80年代,最初為音頻和視頻設(shè)備開發(fā),如今主要在服務(wù)器管理中使用,其中包括單個(gè)組件狀態(tài)的通信。例如管理員可對(duì)各個(gè)組件進(jìn)行查詢,以管理系統(tǒng)的配置或掌握組件的功能狀態(tài),如電源和系統(tǒng)風(fēng)扇。可隨時(shí)監(jiān)控

20、內(nèi)存、硬盤、網(wǎng)絡(luò)、系統(tǒng)溫度等多個(gè)參數(shù),增加了系統(tǒng)的安全性,方便了管理。1I2C總線特點(diǎn)I2C總線最主要的優(yōu)點(diǎn)是其簡(jiǎn)單性和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本。總線的長(zhǎng)度可高達(dá)25英尺,并且能夠以10Kbps的最大傳輸速率支持40個(gè)組件。I2C總線的另一個(gè)優(yōu)點(diǎn)是,它支持多主控(multimastering),其中任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主總線。一個(gè)主控能夠控制信號(hào)的傳輸和時(shí)鐘頻率。當(dāng)然,在任何時(shí)間點(diǎn)上只能有一個(gè)主控。I2C總線的時(shí)鐘信號(hào)在I2C總線上傳送信息時(shí)的時(shí)鐘同步信號(hào)是由掛接在SCL時(shí)鐘線上的所有器

21、件的邏輯“與”完成的。SCL線上由高電平到低電平的跳變將影響到這些器件,一旦某個(gè)器件的時(shí)鐘信號(hào)變?yōu)榈碗娖剑瑢⑹筍CL線上所有器件開始并保護(hù)低電平期。此時(shí),低電平周期短的器件的時(shí)鐘由低至高的跳變并不影響SCL線的狀態(tài),這些器件將進(jìn)入高電平等待的狀態(tài)。當(dāng)所有器件的時(shí)鐘信號(hào)都變?yōu)楦唠娖綍r(shí),低電平期結(jié)束,SCL線被釋放返回高電平,即所有的器件都同時(shí)開始它們的高電平期。其后,第一個(gè)結(jié)束高電平期的器件又將SCL線拉成低電平。這樣就在SCL線上產(chǎn)生一個(gè)同步時(shí)鐘。可見,時(shí)鐘低電平時(shí)間由時(shí)鐘低電平期最長(zhǎng)的器件決定,而時(shí)鐘高電平時(shí)間由時(shí)鐘高電平期最短的器件決定。I2C總線的傳輸協(xié)議與數(shù)據(jù)傳送起始和停止條件在數(shù)據(jù)傳

22、送過程中,必須確認(rèn)數(shù)據(jù)傳送的開始和結(jié)束。在I2C總線技術(shù)規(guī)范中,開始和結(jié)束信號(hào)(也稱啟動(dòng)和停止信號(hào))的定義如圖3所示。開始信號(hào):當(dāng)時(shí)鐘總線SCL為高電平時(shí),數(shù)據(jù)線SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。結(jié)束信號(hào):當(dāng)SCL線為高電平時(shí),SDA線從低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。開始和結(jié)束信號(hào)都是由主器件產(chǎn)生。在開始信號(hào)以后,總線即被認(rèn)為處于忙狀態(tài),其它器件不能再產(chǎn)生開始信號(hào)。主器件在結(jié)束信號(hào)以后退出主器件角色,經(jīng)過一段時(shí)間過,總線被認(rèn)為是空閑的。圖3超始和停止信號(hào)圖數(shù)據(jù)格式I2C總線數(shù)據(jù)傳送采用時(shí)鐘脈沖逐位串行傳送方式,在SCL的低電平期間,SDA線上高、低電平能變化,在高電平期間,SDA上

23、數(shù)據(jù)必須保護(hù)穩(wěn)定,以便接收器采樣接收,時(shí)序如圖4所示。圖4數(shù)據(jù)傳送時(shí)序圖I2C總線發(fā)送器送到SDA線上的每個(gè)字節(jié)必須為8位長(zhǎng),傳送時(shí)高位在前,低位在后。與之對(duì)應(yīng),主器件在SCL線上產(chǎn)生8個(gè)脈沖;第9個(gè)脈沖低電平期間,發(fā)送器釋放SDA線,接收器把SDA線拉低,以給出一個(gè)接收確認(rèn)位;第9個(gè)脈沖高電平期間,發(fā)送器收到這個(gè)確認(rèn)位然后開始下一字節(jié)的傳送,下一個(gè)字節(jié)的第一個(gè)脈沖低電平期間接收器釋放SDA。每個(gè)字節(jié)需要9個(gè)脈沖,每次傳送的字節(jié)數(shù)是不受限制的。I2C總線的數(shù)據(jù)傳送格式是在I2C總線開始信號(hào)后,送出的第一字節(jié)數(shù)據(jù)是用來選擇從器件地址的,其中前7位為地址碼,第8位為方向位(R/W)。方向位為“0”

24、表示發(fā)送,即主器件把信息寫到所選擇的從器件中;方向位為“1”表示主器件將從從器件讀信息。格式如下:1010A2A1A0R/W注:前四位固定為1010。開始信號(hào)后,系統(tǒng)中的各個(gè)器件將自己的地址和主器件送到總線上的地址進(jìn)行比較,如果與主器件發(fā)送到總線上的地址一致,則該器件即被主器件尋址的器件,其接收信息還是發(fā)送信息則由第8位(R/W)決定。發(fā)送完第一個(gè)字節(jié)后再開始發(fā)數(shù)據(jù)信號(hào)。響應(yīng)數(shù)據(jù)傳輸必須帶響應(yīng)。相關(guān)的響應(yīng)時(shí)鐘脈沖由主機(jī)產(chǎn)生,當(dāng)主器件發(fā)送完一字節(jié)的數(shù)據(jù)后,接著發(fā)出對(duì)應(yīng)于SCL線上的一個(gè)時(shí)鐘(ACK)認(rèn)可位,此時(shí)鐘內(nèi)主器件釋放SDA線,一字節(jié)傳送結(jié)束,而從器件的響應(yīng)信號(hào)將SDA線拉成低電平,使SD

25、A在該時(shí)鐘的高電平期間為穩(wěn)定的低電平。從器件的響應(yīng)信號(hào)結(jié)束后,SDA線返回高電平,進(jìn)入下一個(gè)傳送周期。通常被尋址的接收器在接收到的每個(gè)字節(jié)后必須產(chǎn)生一個(gè)響應(yīng)。當(dāng)從機(jī)不能響應(yīng)從機(jī)地址時(shí),從機(jī)必須使數(shù)據(jù)線保持高電平,主機(jī)然后產(chǎn)生一個(gè)停止條件終止傳輸或者產(chǎn)生重復(fù)起始條件開始新的傳輸。如果從機(jī)接收器響應(yīng)了從機(jī)地址但是在傳輸了一段時(shí)間后不能接收更多數(shù)據(jù)字節(jié),主機(jī)必須再一次終止傳輸。這個(gè)情況用從機(jī)在第一個(gè)字節(jié)后沒有產(chǎn)生響應(yīng)來表示。從機(jī)使數(shù)據(jù)線保持高電平主機(jī)產(chǎn)生一個(gè)停止或重復(fù)起始條件。完整的數(shù)據(jù)傳送過程如圖5所示。圖5完整的數(shù)據(jù)傳送過程I2C總線還具有廣播呼叫地址用于尋址總線上所有器件的功能。若一個(gè)器件不需

26、要廣播呼叫尋址中所提供的任何數(shù)據(jù),則可以忽咯該地址不作響應(yīng)。如果該器件需要廣播呼叫尋址中按需提供的數(shù)據(jù),則應(yīng)對(duì)地址作出響應(yīng),其表現(xiàn)為一個(gè)接收器。3總線基本操作I2C規(guī)程運(yùn)用主/從雙向通訊。器件發(fā)送數(shù)據(jù)到總線上,則定義為發(fā)送器,器件接收數(shù)據(jù)則定義為接收器。主器件和從器件都可以工作于接收和發(fā)送狀態(tài)??偩€必須由主器件(通常為微控制器)控制,主器件產(chǎn)生串行時(shí)鐘(SCL)控制總線的傳輸方向,并產(chǎn)生起始和停止條件。SDA線上的數(shù)據(jù)狀態(tài)僅在SCL為低電平的期間才能改變,SCL為高電平的期間,SDA狀態(tài)的改變被用來表示起始和停止條件。參見圖1。圖1串行總線上的數(shù)據(jù)傳送順序3.1控制字節(jié)在起始條件之后,必須是器

27、件的控制字節(jié),其中高四位為器件類型識(shí)別符(不同的芯片類型有不同的定義,EEPROM一般應(yīng)為1010),接著三位為片選,最后一位為讀寫位,當(dāng)為1時(shí)為讀操作,為0時(shí)為寫操作。如圖2所示。圖2控制字節(jié)配置3.2寫操作寫操作分為字節(jié)寫和頁面寫兩種操作,對(duì)于頁面寫根據(jù)芯片的一次裝載的字節(jié)不同有所不同。關(guān)于頁面寫的地址、應(yīng)答和數(shù)據(jù)傳送的時(shí)序參見圖3。圖3頁面寫3.3讀操作讀操作有三種基本操作:當(dāng)前地址讀、隨機(jī)讀和順序讀。圖4給出的是順序讀的時(shí)序圖。應(yīng)當(dāng)注意的是:最后一個(gè)讀操作的第9個(gè)時(shí)鐘周期不是“不關(guān)心”。為了結(jié)束讀操作,主機(jī)必須在第9個(gè)周期間發(fā)出停止條件或者在第9個(gè)時(shí)鐘周期內(nèi)保持SDA為高電平、然后發(fā)出

28、停止條件。圖4順序讀4實(shí)例:X24C04與MCS-51單片機(jī)軟硬件的實(shí)現(xiàn)X24C04是XICOR公司的CMOS4096位串行EEPROM,內(nèi)部組織成5128位。16字節(jié)頁面寫。與MCS-51單片機(jī)接口如圖5所示。由于SDA是漏極開路輸出,且可以與任何數(shù)目的漏極開路或集電極開路輸出“線或”(wire-Ored)連接。上拉電阻的選擇可參考X24C04的數(shù)據(jù)手冊(cè)。下面是通過I2C接口對(duì)X24C04進(jìn)行單字節(jié)寫操作的例程。流程圖及源程序如下:圖5X24C04與51單片機(jī)接口;名稱:BSENT;描述:寫字節(jié);功能:寫一個(gè)字節(jié);調(diào)用程序:無;輸入?yún)?shù):A;輸出參數(shù):無BSEND:MOVR2,#08H;1字

29、節(jié)8位SENDA:CLRP3.2;RLCA;左移一位MOVP3.3,C;寫一位SETBP3.2DJNZR2,SENDA;寫完8個(gè)字節(jié)?CLRP3.2;應(yīng)答信號(hào)SETBP3.3SETBP3.2RET圖6流程圖5結(jié)束語在I2C總線的應(yīng)用中應(yīng)注意的事項(xiàng)總結(jié)為以下幾點(diǎn):1)嚴(yán)格按照時(shí)序圖的要求進(jìn)行操作,2)若與口線上帶內(nèi)部上拉電阻的單片機(jī)接口連接,可以不外加上拉電阻。3)程序中為配合相應(yīng)的傳輸速率,在對(duì)口線操作的指令后可用NOP指令加一定的延時(shí)。4)為了減少意外的干擾信號(hào)將EEPROM內(nèi)的數(shù)據(jù)改寫可用外部寫保護(hù)引腳(如果有),或者在EEPROM內(nèi)部沒有用的空間寫入標(biāo)志字,每次上電時(shí)或復(fù)位時(shí)做一次檢測(cè),

30、判斷EEPROM是否被意外改寫。關(guān)于IIC總線的操作注意事項(xiàng)1、對(duì)IIC總線的一次操作完之后,需要等待一段時(shí)間才能進(jìn)行第二次操作。否則是啟動(dòng)不了總線的:)2、在時(shí)鐘線(SCL)為高電平的時(shí)候,一定不能動(dòng)數(shù)據(jù)線(SDA)狀態(tài),除非是啟動(dòng)或者結(jié)束總線型號(hào)容量器件/業(yè)面尋址字節(jié)可尋址位模塊24C01128B(1010)(A2)(A1)(A0)(0或1)3128B24C02256B(1010)(A2)(A1)(A0)(0或1)3256B24C04512B(1010)(A2)(A1)(P0)(0或1)22X256B24C081024B(1010)(A2)(P1)(P0)(0或1)14X256B24C16

31、2048B(1010)(P2)(P1)(P0)(0或1)08X256B解析:IIC總線接口器件24C系列非易失性存儲(chǔ)器與89C51接口采用軟件模擬IIC。24C系列存儲(chǔ)器器件地址統(tǒng)一為1010XXXX,不要問為什么,這是廠家出廠的時(shí)候規(guī)定好的了。至于24C的引腳功能和89C51的接口我就不多說了,本文的重點(diǎn)主要是如何應(yīng)用。上面說了,器件的地址字節(jié)的高位是1010,那么低4位呢?先說最后一位吧,最后一位為0的時(shí)候表示89C51要寫數(shù)據(jù)入存儲(chǔ)器,1的時(shí)候表示要從存儲(chǔ)器讀數(shù)據(jù)。還剩下中三位A2,A1和A0。它們的高低電平取決于24C的A2,A1,A0是接高電平還是接地。A2,A1和A0有8個(gè)組合,因

32、此可以擴(kuò)展8個(gè)相同的器件,根據(jù)A2、A1、A0的不同,一樣的器件也會(huì)有不同的地址。那么是不是每一個(gè)24C都可以擴(kuò)展8個(gè)呢?不是的。注意上表,24C01有三個(gè)可尋址位,A2,A1,A0,所以可以擴(kuò)展8個(gè),24C02也一樣。而04則只可以擴(kuò)展4個(gè)08只可以擴(kuò)展2個(gè),16就沒有擴(kuò)展了,只可以掛一片24C16。為什么呢?因?yàn)樵L問24C系列除了訪問器件地址外,還要訪問器件內(nèi)的字節(jié)的地址。例如24C01,要對(duì)其操作,就先選選中它的地址,然后操作第一個(gè)字節(jié)或其他字節(jié),這些字節(jié)也是有地址的,分模塊,用一個(gè)字節(jié)表示,最多可以操作256個(gè)字節(jié)。24C01和24C02不大于256個(gè)字節(jié),對(duì)其操作就簡(jiǎn)單得多了。但24

33、C04,08和16呢?他們都大于256個(gè)字節(jié),怎么辦?分模塊。注意到上表的P0,P1,P3沒有?把04分成兩個(gè)模塊,2X256B,08四個(gè)模塊,16就八個(gè)模塊。究竟怎么模塊操作呢?拿24C08為例,有A2P1P0。A2只可以0或1,所以只能擴(kuò)展2個(gè)24C08,其內(nèi)有4個(gè)256字節(jié)的模塊,要操作哪個(gè)模塊取決于P1,P0的組合。例如,24C08的地址字節(jié)為1010000X第一個(gè)字節(jié)地址為0,第256個(gè)地址為255,如果地址字節(jié)是1010001X,那么第256個(gè)字節(jié)的地址為0,第512個(gè)字節(jié)的地址為255。就如此。再用24C08舉例說明如何擴(kuò)展,當(dāng)兩個(gè)24C08的A2腳分別接高電平和地的時(shí)候,就可以

34、了,這樣就擴(kuò)展了,他們的器件地址分別是1010000X和1010100X。當(dāng)要讀第一個(gè)(A2接地)24C08的的第一個(gè)模塊的數(shù)據(jù)時(shí)候,單片機(jī)先發(fā)送地址字節(jié)10100001;當(dāng)要把數(shù)據(jù)寫進(jìn)第二個(gè)(A2接高電平)24C08的第二個(gè)模塊的時(shí)候,應(yīng)發(fā)送10101010地址字節(jié)。不再說了,再說我瘋了,看程序吧。這是對(duì)24C16操作的例子。*/復(fù)制內(nèi)容到剪貼板代碼:#include/*全局符號(hào)定義*/#defineWRITE0 xA0/*定義24C016的器件地址SLA和方向位W*/#defineREAD0 xA1/*定義24C04的器件地址SLA和方向位R*/#defineBLOCK_SIZE100/*

35、定義指定字節(jié)個(gè)數(shù)*/#defineucharunsignedchar#defineHIGH1#defineLOW0#defineFALSE0#defineTRUEFALSEsbitSCL=P34;/T0sbitSDA=P35;/T1ucharxdataEAROMImageBLOCK_SIZE=0;/*在外部RAM中定義發(fā)送存儲(chǔ)映象單元*/voiddelayi2c(void);voidI_start(void)SCL=HIGH;delayi2c();SDA=LOW;delayi2c();SCL=LOW;delayi2c();voidI_stop(void)SDA=LOW;delayi2c();S

36、CL=HIGH;delayi2c();SDA=HIGH;delayi2c();SCL=LOW;delayi2c();/初始化voidI_init(void)SCL=LOW;I_stop();bitI_clock(void)bitsample;SCL=HIGH;delayi2c();sample=SDA;SCL=LOW;delayi2c();return(sample);/發(fā)送8位數(shù)據(jù)bitI_send(ucharI_data)uchari;/*發(fā)送8位數(shù)據(jù)*/for(i=0;i8;i+)SDA=(bit)(I_data&0 x80);I_data=I_data1;I_clock();/*請(qǐng)求應(yīng)

37、答信號(hào)ACK*/SDA=HIGH;return(I_clock();/接受8位數(shù)據(jù)ucharI_receive(void)ucharI_data=0;registeruchari;for(i=0;i8;i+)I_data*=2;if(I_clock()I_data+;return(I_data);/應(yīng)答voidI_Ack(void)SDA=LOW;I_clock();SDA=HIGH;voidwait_5ms(void)inti;for(i=0;i1000;i+);/向24C04寫入器件地址和一個(gè)指定的字節(jié)地址。bitE_address(ucharpage,ucharAddress)I_sta

38、rt();if(I_send(WRITE+page)return(I_send(Address);elsereturn(FALSE);/參數(shù)的含義:從第幾個(gè)模塊(不超過3),模塊中第幾個(gè)字節(jié)(不超過255)/寫到RAM映象的第幾個(gè)字節(jié)和讀的長(zhǎng)度bitE_read_block(ucharpage,ucharaddr,uchararraypoint,ucharlongth)uchari;/*從地址0開始讀取數(shù)據(jù)*/if(E_address(page,addr)/*發(fā)送重復(fù)啟動(dòng)信號(hào)*/I_start();if(I_send(READ+page)for(i=0;i=longth;i+)EAROMIma

39、gearraypoint+i=I_receive();if(i!=longth)I_Ack();elseI_clock();I_stop();return(TRUE);elseI_stop();return(FALSE);elseI_stop();return(FALSE);bitE_write_block(ucharpage,ucharaddr,uchararraypoint,ucharlongth)uchari;for(i=addr;i=addr+longth;i+)if(E_address(page,i)&I_send(EAROMImagearraypoint+i-addr)I_stop

40、();wait_5ms();elsereturn(FALSE);return(TRUE);/testvoidmain()EAROMImage39=0 xfe;SCON=0 x5a;TMOD=0 x20;TCON=0 x69;TH1=0 xfd;I_init();/I2C總線初始化P1=0 xFF;if(E_write_block(0,8,39,1)P1=0 xFE;/p10elseif(E_read_block(0,8,55,1)elseP1=P1&0 xFD;if(EAROMImage55=0 xfe)P1=P1&0 x0FB;while(1);HYPERLINK/smart_qiang/archive/2009/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論